#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 5
#define Button 6
bool isLED1_On=false;
bool isLED2_On=false;
bool isLED3_On=false;
bool isLED4_On=false;
long lastTurnOn = millis();
long lastPatternChange=millis();
unsigned int CurrentState = 1;
unsigned int LEDPattern=1;
bool isStateChanged=false;
bool ButtonStateLast;
bool ButtonStateActual=digitalRead(Button);
void LED1_TurnOn() {
digitalWrite(LED1, HIGH);
isLED1_On=true;
Serial.println("LED1 turned on!");
}
void LED2_TurnOn() {
digitalWrite(LED2, HIGH);
isLED2_On=true;
Serial.println("LED2 turned on!");
}
void LED3_TurnOn() {
digitalWrite(LED3, HIGH);
isLED3_On=true;
Serial.println("LED3 turned on!");
}
void LED4_TurnOn() {
digitalWrite(LED4, HIGH);
isLED4_On=true;
Serial.println("LED4 turned on!");
}
void LED1_TurnOff(){
digitalWrite(LED1, LOW);
isLED1_On=false;
Serial.println("LED1 turned off!");
}
void LED2_TurnOff(){
digitalWrite(LED2, LOW);
isLED2_On=false;
Serial.println("LED2 turned off!");
}
void LED3_TurnOff(){
digitalWrite(LED3, LOW);
isLED3_On=false;
Serial.println("LED3 turned off!");
}
void LED4_TurnOff(){
digitalWrite(LED4, LOW);
isLED4_On=false;
Serial.println("LED4 turned off!");
}
void setup() {
// put your setup code here, to run once:
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(Button, INPUT_PULLUP);
Serial.begin(115200); // Any baud rate should work
Serial.println("Start\n");
ButtonStateLast=digitalRead(Button);
}
void loop() {
// put your main code here, to run repeatedly:
switch (CurrentState){
case 1:
LED1_TurnOn();
LED2_TurnOn();
LED3_TurnOn();
LED4_TurnOn();
if (isStateChanged){
CurrentState=2;
isStateChanged = false;
LEDPattern=1;}
break;
case 2:
if (lastPatternChange<=(millis()-200)){
LEDPattern++;
lastPatternChange=millis();
if (LEDPattern > 8){
LEDPattern=1;}
}
switch (LEDPattern){
case 1:
LED1_TurnOff();
LED2_TurnOff();
LED3_TurnOff();
LED4_TurnOff();
break;
case 2:
LED1_TurnOff();
LED2_TurnOff();
LED3_TurnOff();
LED4_TurnOn();
break;
case 3:
LED1_TurnOff();
LED2_TurnOff();
LED3_TurnOn();
LED4_TurnOn();
break;
case 4:
LED1_TurnOff();
LED2_TurnOn();
LED3_TurnOn();
LED4_TurnOn();
break;
case 5:
LED1_TurnOn();
LED2_TurnOn();
LED3_TurnOn();
LED4_TurnOn();
break;
case 6:
LED1_TurnOn();
LED2_TurnOn();
LED3_TurnOn();
LED4_TurnOff();
break;
case 7:
LED1_TurnOn();
LED2_TurnOn();
LED3_TurnOff();
LED4_TurnOff();
break;
case 8:
LED1_TurnOn();
LED2_TurnOff();
LED3_TurnOff();
LED4_TurnOff();
break;
}
if (isStateChanged){
CurrentState=3;
isStateChanged = false;
LEDPattern=1;}
break;
case 3:
if (lastPatternChange<=(millis()-500)){
LEDPattern++;
lastPatternChange=millis();
if (LEDPattern > 2){
LEDPattern=1;}
}
switch (LEDPattern){
case 1:
LED1_TurnOn();
LED2_TurnOn();
LED3_TurnOn();
LED4_TurnOn();
break;
case 2:
LED1_TurnOff();
LED2_TurnOff();
LED3_TurnOff();
LED4_TurnOff();
break;
}
if (isStateChanged){
CurrentState=4;
isStateChanged = false;
LEDPattern=1;}
break;
case 4:
LED1_TurnOff();
LED2_TurnOff();
LED3_TurnOff();
LED4_TurnOff();
if (isStateChanged){
CurrentState=1;
isStateChanged = false;
LEDPattern=1;}
break;
}
ButtonStateActual=digitalRead(Button);
if(ButtonStateActual != ButtonStateLast){
// then save the state change
ButtonStateLast = ButtonStateActual;
// button pressed not released
if(LOW == ButtonStateActual){
// switch state
// use ?: operand to read and toggle LED1 state
isStateChanged = true; // toggle LedState
delay(50); // simple debouncing
}
}
//delay(500);
//Serial.println("Utolsó elsütés:" + String(lastTurnOn));
//Serial.println(millis());
}