суббота, 20 февраля 2016 г.

Плавное мигание светодиоды или познакомимся еще с новыми операторами...

Всем привет! Добро пожаловать на новый урок ардуино. Сегодня мы продолжим работу со светодиодам, и освоим новый способ заставить его мигать. Но обо всем по порядку. Сначала давайте освоим еще несколько новых «слов» в нашем языке программирования ардуино. Для начала нам нжуно будет использовать особый тип данных (до этого мы использовали целочисленный тип 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 пине. Саму осциллограмму вы можете так же увидеть в видеоролике ниже. Приятного просмотра и удачных вам экспериментов с ардуино. 

Комментариев нет:

Отправить комментарий