===== Эксперимент 7. Регулирование яркости светодиода =====
Для вывода данных традиционно применяется двоичная система с применением логических значений 0 и 1. Но не всегда схемотехнику необходимо значение нуля или единицы.\\
Среди цифровых пинов контроллера выделяются несколько со знаком ''~'', данные пины поддерживают сигнал ШИМ (PWM), то есть можно создать сигнал который имеет определенное напряжение и продолжительность.\\
Контроллер поддерживает восьмибитную ШИМ, что позволяет выбрать переменную в диапазоне значений от 0 до 256.\\
Давайте посмотрим это на практике, на примере плавного включения и выключения светодиода, подключенному к 3 пину.
==== Схема эксперимента ====
{{ :products:ardu:exp07.1.png?nolink&400 |}}
//Рисунок 1. Электрическая принципиальная схема эксперимента//
{{ :products:ardu:exp07.png?direct&600 |}}
//Рисунок 2. Монтажная схема эксперимента//
==== Программный код эксперимента ====
//объявляем константу с номером пина для светодиода
const int Led = 3;
void setup() {
pinMode(Led, OUTPUT); // инициализируем пин как выход
}
void loop() {
// создаем цикл, где яркость (brightness) изначально равна 0, и с каждым шагом увеличивается на 1 единицу
for (int brightness = 0; brightness < 255; brightness ++) {
analogWrite(Led, brightness); // формируем сигнал ШИМ на пине
delay(5); // создаем задержку 5 миллисекунд
}
// теперь производим уменьшение значения переменной (уменьшаем яркость)
for (int brightness = 255; brightness >= 0; brightness --) {
analogWrite(Led, brightness);
delay(5);
}
}
Как мы уже знаем, у сигнала с широтно- импульсной модуляцией есть два параметра- частота и коэффициент заполнения(скважность). Частота сигнала ШИМ в контроллере около 500 герц, а коэффициент заполнения сигнала будем задавать с помощью функции ''analogWrite(Led, brightness)'', где:\\
* Led – номер вывода для генерации ШИМ сигнала.
* brightness – коэффициент заполнения ШИМ.
Для плавного изменения яркости светодиода необходимо изменять коэффициент заполнения, для этого мы будем использовать оператор цикла **for()**\\
Операторы цикла используется для повторения блока операторов, заключенных в фигурные скобки.\\
[[http://arduino.ru/Reference/For.html|Подробнее о цикле For ]]
В условии цикла **for** мы записали, чтобы значение нашей переменной **brightness** увеличивалась от **0** до **255**, с шагом 1, то есть выражения в теле цикла (заключенные в фигурные скобки) будут повторяться пока значение переменной не достигнет 255, после этого выполнение цикла завершиться.\\
И поскольку переменная **brightness** записана в качестве аргумента функции ''analogWrite(Led, brightness)'', то с каждым шагом выполнения цикла будет увеличиваться коэффициент заполнения ШИМ, чтобы это происходило плавно в теле цикла присутствует небольшая задержка в 5 мс.\\
В результате выполнения этого блока программы светодиод будет плавно набирать яркость.\\
Во втором блоке с оператором **for** в условии записано уменьшение значения переменной **brightness**, и соответственно уменьшению коэффициента заполнения ШИМ в процессе выполнения цикла, в результате чего светодиод плавно гаснет.\\
После завершения работы второго цикла, выполнение передается на первый и далее по кругу.
Попробуй изменить программу так, чтобы светодиод набирал не полную яркость либо затухал не полностью