Добавить код для их переключения, можно также поэкспериментировать с различными световыми эффектами (поочередное или параллельное мигание и пр).

2.4 Мигаем светодиодом: широтно-импульсная модуляция

В первой части мы уже рассматривали изменение яркости светодиода с помощью ШИМ - широтно-импульсной модуляции. Там мы использовали таймер NE555, чтобы создать напряжение такого вида:

То же самое легко запрограммировать с помощью контроллера. Напишем программу, которая будет плавно повышать яркость светодиода от нуля до максимума.

int led = 13;

int pwm = 0;

void setup() {

pinMode(led, OUTPUT);

}

void loop() {

for(int i=0; i<1000; i++) {

digitalWrite(led, HIGH);

delayMicroseconds(pwm);

digitalWrite(led, LOW);

delayMicroseconds(100 - pwm);

}

pwm += 1;

if (pwm > 100) pwm = 0;

}

Мы создали глобальную переменную pwm, в которой сохраняется текущее значение уровня заполнения в процентах. Дальше мы включаем “высокое” и “низкое” состояние вывода, в соответствии с этим значением - когда одно значение велико, второе, наоборот, мало. Цикл “for(int i=0; i<1000; i++)” повторяет участок кода 1000 раз - без него светодиод менял бы яркость слишком быстро.

Если загрузить этот код, мы увидим плавно увеличивающий яркость светодиод. Но у вышеприведенного кода есть недостатки. Во-первых, он довольно-таки громоздкий - слишком много строк для переключения только одного вывода. Во-вторых, процессор занят только переключением светодиода, любая другая задача нарушит согласованность временных интервалов. К счастью для нас, разработчики процессора пошли навстречу пользователям, и формирование ШИМ может выполняться автоматически, на аппаратном уровне. Для этого достаточно использовать функцию analogWrite, в качестве параметра указав степень заполнения в виде параметра 0..255.

Например, для установки яркости 50% достаточно написать:

analogWrite(led, 128);

Процессор сам сделает все остальное, и сформирует на выходе нужный сигнал. Наш код в это время может делать что-то другое, например выводить информацию на ЖК-экран. Единственное ограничение - режим ШИМ может работать не на всех выводах, это определяется моделью процессора. Например, для Arduino Uno для ШИМ доступны только номера выводов 3, 5, 6, 9, 10, и 11.

Разумеется, с помощью ШИМ управлять можно не только яркостью одного светодиода, но и более мощной нагрузкой постоянного тока (лампа,

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату