Приветствую всех. После решенной проблемы с переменой и кнопкой следующая не заставила себя долго ждать. if (millis() - last_time > x ) { digitalWrite(red,1); Необходимо сделать так, чтобы при включении светодиода проходило 5 секунд, после чего он выключался совсем, а вместо него включался другой пин
Ничего не произошло. Светодиод тупо все время горит Код (C++): int blue = 12; int green = 11; // настройка портов int red = 10; int motor = 7; int buzzer = 6; const int start = 9; // работа с кнопками const int choice = 8; int choice_status = 0; unsigned long last_time; // работа с таймером int x = 5000; void setup() { pinMode(blue, OUTPUT); // установка режима работы портов pinMode(green, OUTPUT); pinMode(red, OUTPUT); pinMode(start, INPUT); pinMode(choice, INPUT); pinMode(motor, OUTPUT); pinMode(buzzer, OUTPUT); int x = 5000; // установка времени } void loop() { choice_status = digitalRead(choice); if (choice_status == HIGH) { digitalWrite(green, 0); digitalWrite(buzzer, 0); } else { digitalWrite(green,1); digitalWrite(buzzer, 1); x = 10000; } if (millis() - last_time > x ) { digitalWrite(red,1); } delay(5000); digitalWrite(red,0); }
Решение в лоб: Код (C++): bool isOn = false; uint32_t onTimer = 0; void diodeOn() { if(isOn) { onTimer = millis(); return; } isOn = true; digitalWrite(LED_BUILTIN,HIGH); } void diodeCheck() { if(!isOn) return; if(millis() - onTimer > 5000) { isOn = false; digitalWrite(LED_BUILTIN,LOW); digitalWrite(OTHER_PIN,HIGH); } } void setup() { pinMode(LED_BUILTIN,OUTPUT); pinMode(OTHER_PIN,OUTPUT); } void loop() { if(buttonClicked) diodeOn(); diodeCheck(); }
Чудилы, решается всё на таймере без задействования процессора вообще. Процессор вообще можно загнать в IDLE режим, а светодиод сам выключится. ДвоеШники.