Один светодиод управляется двумя кнопками - одна из которых действует как тумблер
Попытка управлять этим светодиодом с помощью этих 2 кнопок - одна кнопка, которая запускает короткую мигающую последовательность, другая кнопка действует как тумблер, одна лампочка нажатия включена, другая лампочка нажатия выключена.
Если я включаю светодиод и затем нажимаю мигающую кнопку, мигание вкл.-выкл. начинается, но затем светодиод выключается, потому что выкл. - последнее состояние мигающей последовательности. Как заставить светодиод вернуться в исходное состояние?
#include <ezButton.h>
const int flashing_pin = 2;
const int switch_pin = 3;
const int led_pin = 8;
ezButton button(switch_pin);
int ledState = LOW;
void setup() {
Serial.begin(9600);
pinMode(led_pin, OUTPUT);
pinMode(switch_pin,INPUT_PULLUP);
pinMode(flashing_pin,INPUT_PULLUP);
button.setDebounceTime(50);
}
void loop() {
button.loop();
if(button.isPressed()) {
Serial.println("Press");
ledState = !ledState;
digitalWrite(led_pin, ledState);
}
if( digitalRead(flashing_pin) == LOW ) {
doFlash(4);
}
}
void doFlash(uint8_t number_of_times) {
while( number_of_times-- > 0 ) {
digitalWrite(led_pin,HIGH);
delay(250);
digitalWrite(led_pin,LOW);
delay(250);
}
}
Чтобы вкратце объяснить чего я хочу;
- если светодиод выключен - последовательность мигания работает как "ВКЛ. ВЫКЛ. ВКЛ. ВЫКЛ.".
- если светодиод включен - последовательность мигания работает как "ВЫКЛ. ВКЛ. ВЫКЛ. ВКЛ.".
@Varonne, 👍2
Обсуждение0
Смотрите также:
- Код Arduino для управления 4 светодиодами с 4 кнопок
- ESP8266, похоже, убивает цикл while
- Светодиод не гаснет полностью с помощью функции digitalWrite(led, LOW);
- Улучшенное циклическое переключение цветов RGB.
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Кнопка с таймером переключения и функцией сброса времени + светодиод обратной связи
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
'digitalWrite(led_pin,HIGH);
является проводным ... 'digitalWrite(led_pin,!ledstate);
противоположно текущему состоянию, @jsotolaЯ заставил его работать! Но меня смущает состояние цикла, в моем исходном коде есть правило doFlash(4); и задержка 250 - но при использовании !ledstate 4 мигания больше не являются 4-мя циклами времени (ВКЛ-ВЫКЛ), это половина его, а задержка 250 вдвое больше времени, это половина цикла. second....so для того чтобы получить желаемую "частоту" 4 мигания за 2 секунды, мне нужно поставить doFlash 8 и задержку 125....не могу понять почему :D но это работает, @Varonne
Моя флэш часть кода теперь такова; void doFlash(uint8_t number_of_times) { while( number_of_times-- > 0 ) { ledState = !ledState; digitalWrite(led_pin, ledState); задержка(125); digitalWrite(led_pin, ledState); задержка(125); }, @Varonne
я думаю, что вы не очень внимательно смотрели на то, что написали, @jsotola
ledState = !ledState
не входит в код мигания, @jsotolaЯ исправлю это - но это действительно работает так, как я намеревался. Но если это плохая практика в программировании, я пересмотрю ее, я учусь., @Varonne
"4 мигания больше не являются 4-мя временными циклами (ВКЛ. - ВЫКЛ.)`... как же это так, как вы намеревались?, @jsotola
О - о, я имел в виду, что после того, как я изменил код, последовательность была правильной и с заданной скоростью. Но когда у меня будет время, я попробую использовать фиксированные значения для цикла., @Varonne