Режимы свечения светодиода с помощью потенциометра
- Войдите на сайт для отправки комментариев
Пнд, 18/05/2020 - 19:55
#define potent_pin 0 // сюда подключена средняя нога потенциометра
int val; // переменная для хранения значения с потенциометра
const int btn = 2; // присваиваю переменую btn к ножке 2
int led_pin=3; // присваиваю переменую Led_pin к ножке 3
void setup() {
pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
pinMode(btn, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
Serial.begin(9600);
pinMode(led_pin, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.
pinMode(btn, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
}
void loop() {
val = analogRead(potent_pin); // запомнить показания с потенциометра
val = map(val, 0, 1023, 0, 20); // перевести в диапазон 0.. 20
val = constrain(val, 0, 20); // ограничить диапазон 0.. 20
delay(10); // задержка в 1 секунду
if (digitalRead(btn) == HIGH) { // Если кнопка нажата
if (val == 19 || val == 20) {
digitalWrite(led_pin, HIGH);// зажигаем светодиод
delay(1000);
digitalWrite(led_pin, LOW); // выключаем светодиод
}
}
}
Принцип работы.
1. Потенциометром выбираем режим от 1 до 10(В данном случае их 20, но для точности я выбрал по 2, т.е . два значения отвечают за 1 режим ).
2.В зависимости от режима условием загорается светодиод на определенный период ( 1 режим 0.1 секунда ... 10 режим 1 секунда)
Проблема: Если зажать кнопку светодиод работает мерцанием светодиода с частотой заданной функцией delay. А мне нужно чтобы после зажатия кнопки он отработал режим(загорание на 1 секунду) и потух. Добрые люди подскажите что не так. xD
p.s Условия режимов загорания светодиодов нет. В коде только 10 режим.
воспользоваться переменной-флагом. Как только кнопка нажата - поднимаем флаг, включаем и выключаем светодиод с нужной задежкой и пока флаг не опустится - больше на кнопку не реагируем.
Флаг опускам только тогда, когда кнопка отжата.
Задержку на светодиоде лучше переписать на миллис, на delay() будет работать не совсем корректно
Почему строки 7 и 10, 8 и 11 одинаковые ?
Верно подметили ;)
Уже исправил
boolean butt_flag = 0; boolean butt; boolean led_flag = 0; unsigned long last_press; void setup() { pinMode(2, INPUT_PULLUP); Serial.begin(9600); pinMode(3, OUTPUT); } void loop() { butt = !digitalRead(2); // считать текущее положение кнопки if (butt == 1 && butt_flag == 0 && millis() - last_press > 100) { butt_flag = 1; Serial.println("Вкл"); led_flag = !led_flag; digitalWrite(3, led_flag); last_press = millis(); } if (butt == 0 && butt_flag == 1) { butt_flag = 0; Serial.println("Выкл"); } }Ну вот что удалось. Но оно работает не корректно. По началу когда нажимаешь на кнопку все верно. Включает - Выключает. А потом может работать как обычно нажал на кнопку загорелось, еще раз нажал выключило.