boolean butt_flag = 0; boolean butt; boolean led_flag = 0; unsigned long last_press; byte LEDcounter = 4; void setup() { pinMode(2, INPUT_PULLUP); // сюда подключена кнопка Serial.begin(9600); pinMode(4, OUTPUT); // сюда подключен светодиод pinMode(5, OUTPUT); // сюда подключен светодиод pinMode(6, OUTPUT); // сюда подключен светодиод pinMode(7, OUTPUT); // сюда подключен светодиод pinMode(8, OUTPUT); // сюда подключен светодиод pinMode(9, OUTPUT); // сюда подключен светодиод digitalWrite(4, 0); digitalWrite(5, 0); digitalWrite(6, 0); digitalWrite(7, 0); digitalWrite(8, 0); digitalWrite(9, 0); } void loop() { butt = !digitalRead(2); // считать текущее положение кнопки if (digitalRead(9) == LOW && butt == 1 && butt_flag == 0 && millis() - last_press > 100) { butt_flag = 1; Serial.println("Button pressed"); digitalWrite(LEDcounter, 1); // включить светодиод с текущим номером LEDcounter++; // увеличить номер для следующего включения last_press = millis(); } else if (digitalRead(9) == HIGH && butt == 1 && butt_flag == 0 && millis() - last_press > 100) { digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); digitalWrite(8, LOW); digitalWrite(9, LOW); last_press = millis(); } if (butt == 0 && butt_flag == 1) { butt_flag = 0; Serial.println("Button released"); last_press = millis(); } } Данным кодом запускаю светодиоды нажатием кнопки. Затем одним нажатием кнопки все светодиоды гаснут. Далее необходимо, чтобы процесс запустился с начала. Но запустить с начала не получается. Может кто-нубидь помочь в этом деле?
digitalWrite(4, LOW); .. digitalWrite(4, 0); А где же 1? всё 0 и 0, чему ж тут зажигаться? Прошу прощения... digitalWrite(LEDcounter, 1); не сразу увидел
Там где вы выключаете светодиоды сбросьте счетчик светодиодов (LedCounter). Оформите код в теги, чтобы было легче читать. Поясните что означают переменные butt и but_flag? Если я правильно понял, то алгоритм такой: У вас включается программа - LedCounter=4. Нажимаете на кнопку светодиоды выключаются по очереди - LedCounter увеличивается до 9. Потом, если условие продолжает выполняется, "светодиоды" продолжают включаться - LedCounter растёт и более 9(хотя мы знаем, что на пинах более 9ого нет светодиодов). Когда вы отпускаете кнопку, то LedCounter уже равен Y, (т.к. он всё ещё рос и выполнялись операции блока включения светодиодов), и теперь выполняется блок выключения светодиодов, там вы выключаете их прямо указывая пины со светодиодами. Потом нажимаете на кнопку опять и ждёте, что светодиоды начнут включаться, но LedCounter=Y и этот Y не соответствует номеру пина со светодиодом (больше 9). (В принципе, если подождать, то переменная LedCounter должна переполниться и после 255 стать 0, а там и 4 не далеко...)
в чем сакральный смысл двух взаимоисключающих переменных? И переменные надо обзывать более осмысленно.