Регулировка яркости светодиода ШИМ двумя кнопками

В проектах часто используются кнопки для управления. Например, одной кнопкой что-то прибавляем, другой — уменьшаем. Разберем на примере управления яркостью светодиода.

НАМ ПОНАДОБИТСЯ
  • Плата Arduino Uno
  • Один светодиод
  • Один резистор сопротивлением 220-270 Ом.
  • Два резистора сопротивлением 10-100 кОм.
  • Две кнопки.
  • Провода
  • Макетная плата
СХЕМА ПОДКЛЮЧЕНИЯ

Untitled Sketch_bbРезистор R1 ограничивает ток на светодиоде. Резисторы R2 и R3 «подтягивают» входные пины к нулю, чтобы не было ложных срабатываний. И так как управление светодиодом реализовано с помощью ШИМ (широтно-импульсная модуляция), то светодиод необходимо подключить только к определенным выводам платы ардуино.

В ардуино ШИМ можно реализовать на цифровых выводах, обозначенных PWM или ~. На плате Arduino Uno это D03, D05, D06, D10, D11. И скважность импульса задается в пределах от 0 до 255.

В данном скетче кнопка «+» с шагом 5 увеличивает яркость светодиода от 0 до 255, а кнопка «-» уменьшает.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int ledPin = 11;      // Присваиваем имя ledPin цифровому выводу 11, к которому подключен светодиод
int brightness =0;    // переменная для задания яркости
int fadeValue = 5;    // шаг изменения яркости
int buttonPlus=2;     //  Номер Pin к которому подключена кнопка "+" 
int buttonMinus=3;    //  Номер Pin к которому подключена кнопка "-"
 
void setup()  { 
pinMode(ledPin, OUTPUT); // Инициализируем цифровой вывод ledPin (pin 11) как выход
} 
void loop()  { // Этот цикл будет выполняться бесконечное количество раз.
  if (digitalRead(buttonPlus) == HIGH) { //если на выводе 2 (кнопка "+") высокий уровень (нажата), то
    brightness +=  fadeValue; // прибавляем значение яркости с шагом fadeValue
  }   
  if (digitalRead(buttonMinus) == HIGH) { //если на выводе 3 (кнопка "-") высокий уровень (нажата), то
    brightness -=  fadeValue; // уменьшаем значение яркости с шагом fadeValue
  }   
  brightness = constrain(brightness, 0, 255); // Эта функция задает крайние точки диапазона для переменной brightness 0 и 255
  analogWrite(ledPin, brightness);    // устанавливаем на выводе ledPin значение яркости яркость brightness
  delay(50); // Пауза 50 миллисекунд.                            
}