Ссылка на оригинал: http://publicatorbar.ru/regulirovka-yarkosti-svetodioda-shim-dvumya-knopkami/
Скопировано чтобы не потерять.
В проектах часто используются кнопки для управления. Например, одной кнопкой что-то прибавляем, другой — уменьшаем. Разберем на примере управления яркостью светодиода.
Скопировано чтобы не потерять.
В проектах часто используются кнопки для управления. Например, одной кнопкой что-то прибавляем, другой — уменьшаем. Разберем на примере управления яркостью светодиода.
НАМ ПОНАДОБИТСЯ
- Плата Arduino Uno
- Один светодиод
- Один резистор сопротивлением 220-270 Ом.
- Два резистора сопротивлением 10-100 кОм.
- Две кнопки.
- Провода
- Макетная плата
Резистор R1 ограничивает ток на светодиоде. Резисторы R2 и R3 «подтягивают» входные пины к нулю, чтобы не было ложных срабатываний. И так как управление светодиодом реализовано с помощью ШИМ (широтно-импульсная модуляция), то светодиод необходимо подключить только к определенным выводам платы ардуино.
В ардуино ШИМ можно реализовать на цифровых выводах, обозначенных PWM или ~. На плате Arduino Uno это D03, D05, D06, D10, D11. И скважность импульса задается в пределах от 0 до 255.
В данном скетче кнопка «+» с шагом 5 увеличивает яркость светодиода от 0 до 255, а кнопка «-» уменьшает.
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 миллисекунд. }
-----------------------------
#include <Adafruit_NeoPixel.h>
int val;
int IN1 = 9; // motor
int motorPower = 0;
int fadeValue = 5; // шаг изменения скорости
Adafruit_NeoPixel strip = Adafruit_NeoPixel(3, 6, NEO_GRB + NEO_KHZ800);
void setup()
{
Serial.begin(9600);
pinMode(IN1, OUTPUT);
strip.begin(); // инициализируем ленту
strip.show(); // выключаем ленту
}
void loop()
{
if (Serial.available())
{
val = Serial.read();
if (val == '1') // увеличиваем скорость
{
motorPower += fadeValue;
}
if (val == '2') // уменьшаем скорость
{
motorPower -= fadeValue;
}
}
if (val == '3') // зеленый
{
strip.show();
strip.setPixelColor(0, 0, 255, 0);
strip.setPixelColor(1, 0, 255, 0);
strip.setPixelColor(2, 0, 255, 0);
}
if (val == '4') // синий
{
strip.show();
strip.setPixelColor(0, 0, 0, 255);
strip.setPixelColor(1, 0, 0, 255);
strip.setPixelColor(2, 0, 0, 255);
}
if (val == '5') // красный
{
strip.show();
strip.setPixelColor(0, 255, 0, 0);
strip.setPixelColor(1, 255, 0, 0);
strip.setPixelColor(2, 255, 0, 0);
}
motorPower = constrain(motorPower, 0, 255);
analogWrite(IN1, motorPower);
delay(50);
}