Урок 3 — плавное включение светодиода на Arduino с помощью ШИМ (PWM)

.Урок 3 — плавное включение светодиода на Arduino с помощью ШИМ (PWM)

В первом уроке Мигаемвстроенным на плату Arduino светодиодом мы рассмотрели как можно мигать встроенным светодиодом. Но кроме мигания можно плавно включать и выключать светодиод с подошью ШИМ или в английском PWM (Pulse-Width Modulation) широтно-импульсная модуляция . Что такое ШИМ рассказывать не буду. В интернете очень много информации по данной теме.

Для урока нам понадобиться:

Подключение будет аналогично второму уроку: Мигаем светодиодом на Arduino. Только Переключим на пин на котором есть ШИМ. Их иногда обозначают волнистой чертой "~" или обводят кружочками или ещё как-то выделяют среди прочих. На Arduino Uno это "~".

Подключим к з пину, у нас получится следующая схема подключения.

PWM Arduino ШИМ

Так как ШИМ в 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 снова меняет знак на положительный. И так все повторяется пока мы не отключим питание.


Следующий урок: Сигнал SOS с помощью Arduino и одного светодиода


Если у вас чего то нет для выполнения данного урока, Вы можете посмотреть в каталоге. Там собранные комплектующими от проверенных продавцов по самым низким ценам.

Понравилась статья? Поделитесь ею с друзьями:

Вернуться в раздел: Уроки Arduino: Светодиоды, Резисторы, Arduino Дата публикации 8 февраля , 2017

Комментарии

Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.

Александр
#7 Гость: Александр (29 ноября, 2020 в 03:48)

Здравствуйте.

Если шаг равен 3, то не получается что значения 0 и 255 будут проскочены при сумировании, так как условие стоит ==?

WHITE RIKI
#6 Гость: WHITE RIKI (9 сентября, 2020 в 07:37)

Добрый день

Как задать такое число,чтоб светодиод работал как солнечный цикл

Vivan755
#5 Гость: Vivan755 (18 мая, 2020 в 10:01)

Маленькая ошибка в тексте: не 225, а 255. Ну, и увидеть бы вариант на таймерах, а не на задержке, ибо задержка - уж совсем базовое, а привычка делать программу на ней - привычка очень плохая.

kelvin
#4 Гость: kelvin (18 апреля, 2020 в 00:57)

у меня ругается на voidsetup(){}

previously defined here

что делать?

Владимир Тебеньков
#3 Гость: Владимир Тебеньков (12 марта, 2019 в 19:41)

Господа, А возможно ли дистанционно управлять яркостью? Я как не пробовал, у меня не получалось

Berto Yo
#2 Гость: Berto Yo (12 марта, 2019 в 19:40)

сдрасти. посмотрелваш урок по плавному миганию светодиода. я 0 в програмирование

помогите с кодом на 2-3 линии светодиодово чтоб плавно перемигивали в

хаотичном пораядке. заранее благодарен

Станислав Головин
#1 Гость: Станислав Головин (12 марта, 2019 в 19:39)

Выполнил программу. Диод мигант с определённой яркостью фиксированной. Изменения яркости не наблюдаю. Вроде программа простая, ошибиться негде.

Вирусную, установкой фиксированного значения яркости, заметно изменение

яркости свечения диода, а если делать , как в программе, плавного

изменения нет. Подскажите, в чём может быть ошибка?


Cлучайные товары

Посмотреть товар в Магазине »

Мы в соц сетях

Подпишись на канал Telegram

Portal-PK (Портал ПК) © 2015 - 2024
Разработка проектов
AT Block
DWIN Box