В первом уроке Мигаемвстроенным на плату Arduino светодиодом мы рассмотрели как можно мигать встроенным светодиодом. Но кроме мигания можно плавно включать и выключать светодиод с подошью ШИМ или в английском PWM (Pulse-Width Modulation) широтно-импульсная модуляция . Что такое ШИМ рассказывать не буду. В интернете очень много информации по данной теме.
Для урока нам понадобиться:
Подключение будет аналогично второму уроку: Мигаем светодиодом на Arduino. Только Переключим на пин на котором есть ШИМ. Их иногда обозначают волнистой чертой "~" или обводят кружочками или ещё как-то выделяют среди прочих. На Arduino Uno это "~".
Подключим к з пину, у нас получится следующая схема подключения.
Так как ШИМ в Arduino 8 bit соответственно в программе мы можем использовать любое значение от 0 до 225.
Подправим код:
int led_pin=3; // пин подключения
int brightness = 0; // яркость светодиода
int fadeAmount = 3; // шаг изменения яркости
void setup() { }
void loop() {
analogWrite(led_pin, brightness); // устанавливаем значение
brightness = brightness + fadeAmount; // прибавляем шаг изменения яркости, которая установится в следующем цикле
if (brightness == 0|| brightness == 255) { // Условие
fadeAmount = -fadeAmount ; // Меняем знак
// delay(500); // ожидаем 1/2 секунды
}
delay(50); // ожидаем 1/20 секунды
}
int - означать что у нас переменные целочисленные от -32 768 до 32 767.
Переменная brightness нужна нам, чтобы задать первоначальное свечение светодиода и для увлечение в цикле.
Переменная fadeAmount устонавливает шага изменения яркости. Данная переменная должна быть кратная 255, для данной программы. Можно конечно проверить, чтобы при выполнении цикла наше значение не выходила за пределы 255. Но мы пока этого делать не умеем.
analogWrite(led_pin, brightness);
Для работы с ШИМ инициализируем выход как аналоговый analogWrite().
brightness = brightness + fadeAmount;
В данной строчке мы складываем две переменные. Так как все что находиться внутри функции loop() обрабатывается в непрерывном цикли. Благодаря этому сложение будет происходить при каждом проходе по циклу.
Для того чтобы переменная brightness не выходила за границы ШИМ (от 0 до 255 ) сделаем проверку:
if (brightness == 0 || brightness == 255)
Оператор If означает логическое ЕСЛИ. || логическое ИЛИ. == - это символ равенства двух значений. В нашем случае двух целочисленных значений.
Прочитаем строчку: ЕСЛИ переменная brightness равная 0 ИЛИ равны 255 то выполняем действия в {}.
В {} у нас вырождение fadeAmount = -fadeAmount ; Данное вырождение меняет знак на противоположный.
И так что же у нас происходит в цикле :
brightness увеличивается до тех пор пока не станет равным 255. После чего переменная fadeAmount меняет знак на минус а brightness начинает уменьшаться. После того как brightness становиться равным 0. fadeAmount снова меняет знак на положительный. И так все повторяется пока мы не отключим питание.
Понравилась статья? Поделитесь ею с друзьями:
Вернуться в раздел: Уроки Arduino: Светодиоды, Резисторы, Arduino Дата публикации 8 февраля , 2017
Читайте также
Здравствуйте.
Если шаг равен 3, то не получается что значения 0 и 255 будут проскочены при сумировании, так как условие стоит ==?
Добрый день
Как задать такое число,чтоб светодиод работал как солнечный цикл
Маленькая ошибка в тексте: не 225, а 255. Ну, и увидеть бы вариант на таймерах, а не на задержке, ибо задержка - уж совсем базовое, а привычка делать программу на ней - привычка очень плохая.
у меня ругается на voidsetup(){}
previously defined here
что делать?
Господа, А возможно ли дистанционно управлять яркостью? Я как не пробовал, у меня не получалось
сдрасти. посмотрелваш урок по плавному миганию светодиода. я 0 в програмирование
помогите с кодом на 2-3 линии светодиодово чтоб плавно перемигивали в
хаотичном пораядке. заранее благодарен
Выполнил программу. Диод мигант с определённой яркостью фиксированной. Изменения яркости не наблюдаю. Вроде программа простая, ошибиться негде.
Вирусную, установкой фиксированного значения яркости, заметно изменение
яркости свечения диода, а если делать , как в программе, плавного
изменения нет. Подскажите, в чём может быть ошибка?
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.