Написал такую программку Код (Text): void setup() { int gre = 13; int yel = 11; int whi = 9; int red = 7; int bla = 5; int whi1 = 2; int gre1 = 4; int yel1 = 6; int red1 = 8; pinMode (gre, OUTPUT); pinMode (yel, OUTPUT); pinMode (whi, OUTPUT); pinMode (red, OUTPUT); pinMode (bla, OUTPUT); pinMode (gre1, OUTPUT); pinMode (yel1, OUTPUT); pinMode (whi1, OUTPUT); pinMode (red1, OUTPUT); Serial.begin (9600); } void loop() { int gre = 13; int yel = 11; int whi = 9; int red = 7; int bla = 5; int a, b = 0; //min, hour int whi1 = 2; int gre1 = 4; int yel1 = 6; int wait = 25; int red1 = 8; start: a = a + 1; if (a == 1) { Serial.println ("check1"); digitalWrite (gre, HIGH); Serial.println ("check2"); goto start; } else if (a == 2) { delay (1000); digitalWrite (yel, HIGH); goto start; } else if (a == 3) { delay (1000); digitalWrite (whi, HIGH); goto start; } else if (a == 4) { delay (1000); digitalWrite (red, HIGH); goto start; } else if (a == 5) { Serial.println (a); Serial.println (b); a=0; b = b + 1; delay (1000); digitalWrite (bla, HIGH); } delay (2000); pinMode (bla, LOW); delay(wait); pinMode (red, LOW); delay(wait); pinMode (whi, LOW); delay(wait); pinMode (yel, LOW); delay(wait); pinMode (gre, LOW); if (b == 1) { digitalWrite (yel1, HIGH); goto start; } else if (b == 2) { digitalWrite (gre1, HIGH); goto start; } else if (b == 3) { digitalWrite (whi1, HIGH); goto start; } } Спойлер: Фото По идее должен последовательно загораться дальний ряд светодиодов, те гаснут, загорается один из трех, опять загораются те пять и опять загорается еще один из трех. НО первый раз с дальним рядом все ок, но когда загорается один из трех, те пять не начинают гореть снова, хотя переменная b, отвечающая за ближних увеличивается и a, когда доходит до 5 обнуляется и начинает заново. Даже в мониторе порта check 1 и 2 пишутся несколько раз, то есть по идее строка digitalWrite (gre, HIGH); должна работать несколько раз, но срабатывает всего один. Что не так?
ну вроде мне это и надо. Разве когда a становится 5, она становится 0 и мои if перестают работать? как?) Без goto не работает совсем
у вас в коде выключения диодов Код (C++): pinMode (bla, LOW); delay(wait); pinMode (red, LOW); delay(wait); pinMode (whi, LOW); delay(wait); pinMode (yel, LOW); delay(wait); pinMode (gre, LOW); используется. видимо по ошибке - функция pinMode, которая совсем не для этого Дальше, наверно, сами догадаетесь...
Э...там не надо специальных выходов оно и так будет крутиться в loop.Период "прокрутки" можно задать delay в конце loop.Если это надо.
MNXALbI4 Попробуй так: Код (C++): int leds_line1[5] = {13, 11, 9, 7, 5}; int leds_line2[3] = {6, 4, 2}; void setup() { Serial.begin (9600); for (int a = 0, a < 5, a++) { pinMode (leds_line1[a], OUTPUT); digitalWrite(leds_line1[a], LOW); } for (int b = 0, b < 3, b++) { pinMode (leds_line2[b], OUTPUT); digitalWrite(leds_line2[b], LOW); } } void loop() { for (int b = 0, b < 3, b++) { for (int a = 0, a < 5, a++) { digitalWrite(leds_line1[a], HIGH); if (a == 0) { Serial.println("check1"); Serial.println("check2"); } delay(1000); } Serial.println(a); Serial.println(b); delay(2000); while (a >= 0) { digitalWrite(leds_line1[a], LOW); delay(25); a--; } digitalWrite(leds_line2[b], HIGH); } delay(2000); while (b >= 0) { digitalWrite(leds_line2[b], LOW); delay(wait_off); b--; } } В конце добавил гашение 3-х светодиодов.
на самом деле пока можно оставить и goto. Автор приложил кучу усилий. чтобы нейтрализовать свои же собственные ошибки, вызванные незнаеим области видимости и принципов работы loop(). Если поправить описку с pinMode - думаю, что код заработает так, как хотел автор.