#define LED_GREEN_PIN 12 #define LED_RED_PIN 11 #define LED_ORANGE_PIN 13 #define BUTTON_PIN 10 #define LED_ZGAS() do { digitalWrite(LED_GREEN_PIN, LOW); digitalWrite(LED_RED_PIN, LOW); digitalWrite(LED_ORANGE_PIN, LOW); } while(0) #define LED_ZAPAL_ZIELONY() digitalWrite(LED_GREEN_PIN, HIGH) #define LED_ZAPAL_CZERWONY() digitalWrite(LED_RED_PIN, HIGH) #define LED_ZAPAL_POMARANCZOWY() digitalWrite(LED_ORANGE_PIN, HIGH) void setup() { pinMode(LED_GREEN_PIN, OUTPUT); pinMode(LED_RED_PIN, OUTPUT); pinMode(LED_ORANGE_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT); LED_ZGAS(); } void SterowanieSwiatlami(bool przyciskPieszych) { static uint8_t state = 4; static uint32_t czasPrzelaczenia = 0; switch (state) { case 0: // FUNKCJA PRZEJSCIA DO CZERWONE LED_ZGAS(); LED_ZAPAL_CZERWONY(); czasPrzelaczenia = millis(); state++; break; case 1: // POCZEKAJ AZ PRZEJDA PIESI - CZERWONE if ( millis() - czasPrzelaczenia > 5000 ) state++; break; case 2: // FUNKCJA PRZEJSCIA DO CZERWONE + POMARANCZOWE LED_ZAPAL_POMARANCZOWY(); czasPrzelaczenia = millis(); state++; break; case 3: // PRZYGOTUJ SIE: CZERWONE + POMARANCZOWE if ( millis() - czasPrzelaczenia > 1000 ) state++; break; case 4: // FUNKCJA PRZEJSCIA DO ZIELONE LED_ZGAS(); LED_ZAPAL_ZIELONY(); czasPrzelaczenia = millis(); state++; break; case 5: // CZEKAJ NA WCISNIETY PRZYCISK lub przełącz co 30 sekund if( true == przyciskPieszych ) state++; else if(millis() - czasPrzelaczenia > 30000 ) state += 2; break; case 6: if ( millis() - czasPrzelaczenia > 5000 ) state++; break; case 7: // POMARANCZOWE LED_ZGAS(); LED_ZAPAL_POMARANCZOWY(); czasPrzelaczenia = millis(); state++; break; case 8: // HAMUJ, ZARAZ CZERWONE: POMARANCZOWE if ( millis() - czasPrzelaczenia > 1000 ) state = 0; break; } } void loop() { SterowanieSwiatlami( 0 == digitalRead(BUTTON_PIN) ); }