Плавное мигание светодиоды или познакомимся еще с новыми операторами...
Всем привет! Добро пожаловать на новый урок ардуино. Сегодня
мы продолжим работу со светодиодам, и освоим новый способ заставить его мигать.
Но обо всем по порядку. Сначала давайте освоим еще несколько новых «слов» в
нашем языке программирования ардуино. Для начала нам нжуно будет использовать
особый тип данных (до этого мы использовали целочисленный тип int). Настало время освоить новый тип
переменной – с плавающей запятой.
Оператор float — как раз и задает тип данных с плавающей
запятой. Синтаксис его точно такой же как и при объявлении ранее использовании
переменной int:
float b; // объявление переменной b типа данных с плавающей
запятой.
Теперь давайте разберёмся каким еще способом можно изменять
плавно значение переменной, например от меньшего к большему и так до
бесконечности. Для этого мы воспользуемся оператором тригонометрической
функции: синусом. С помощью функции sin() мы будем получать плавно меняющиеся значения и после
небольшого преобразования будем направлять эти значения прямо в канал ШИМ.
Теперь давайте разберемся с преобразованием. Для чего это
нам нужно? А вот для чего: дело в том, что тригонометрические функции (в нашем
случае это функция вычисления синуса) работает не с градусами, а с радианами. Поэтому
нужно будет произвести перерасчет из градусов в радианы. Это вычисляется по
формуле: x*(3.1415/180)
где 3.1415 это округленное значение числа Пи, а х это переменная которая будет
принимать значения от 0 до 180 и выраженная в градусах. Наконец умножив
полученный результат на 255 мы сможем получить плавно нарастающие числа от 0 до
255.
Давайте подведем итоги. Изменяя значения переменной x от 0 до 180, наша формула y=255*((sin(x*(3.1415/180))))
будет выдавать значения х от 0 до 255 (напомним, что переменную х выраженную в
градусах от 0 до 180, мы преобразуем в радианы). Для наглядности я пересчитал
все данные в электронных таблицах и обратите внимание на получившийся график.
А сам скетч получился таким:
int
ledPin=11;
float
Val;
int led;
void
setup()
{
pinMode
(ledPin, OUTPUT);
}
void
loop ()
{
for (int
x=0; x<180; x++)
{
Val=(sin(x*(3.1415/180)));
led=int(Val*255);
analogWrite (ledPin, led);
delay (20);
}
}
Схема элементарно простая: подключаем светодиод (длинной ножкой)
через резистор 220 Ом к 11 пину. Короткую ножку соответственно на землю. И все!
Даже схему можно не приводить, но для наглядности все же приведу схему.
А
теперь давайте наконец собереми испытаем нашу схему. Собирать будем на макетной
плате, думаю что для нашего читателя это не составит большого труда. А далее
все должно заработать! Вы обратили как интересно мигает светодиод? Все потому
что подключен он к 11 выводу, который на плате ардуино не простой, а который
поддерживает ШИМ.
Для
интереса давайтеподключим теперь вместо светодиода осцилограф и посмотрим какую
осциллограмму нам выдает ШИМ на 11 пине. Саму осциллограмму вы можете так же
увидеть в видеоролике ниже. Приятного просмотра и удачных вам экспериментов с
ардуино.
Комментариев нет:
Отправить комментарий