#define redLed 4
#define orangeLed 5
#define greenLed 6
#define redBtn 13
#define orangeBtn 12
#define greenBtn 11
int redLedState = LOW;
int orangeLedState = LOW;
int greenLedState = LOW;
int lastRedBtnState = LOW;
int lastOrangeBtnState = LOW;
int lastGreenBtnState = LOW;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(orangeLed, OUTPUT);
pinMode(greenLed, OUTPUT);
// use plain INPUT because we have external pull-down resistors
pinMode(redBtn, INPUT);
pinMode(orangeBtn, INPUT);
pinMode(greenBtn, INPUT);
}
void loop() {
int redBtnState = digitalRead(redBtn);
int orangeBtnState = digitalRead(orangeBtn);
int greenBtnState = digitalRead(greenBtn);
// if red LED and orange LED are same state, turn green LED on
if (redLedState == orangeLedState && greenLedState == HIGH) {
greenLedState = HIGH;
digitalWrite(greenLed, HIGH);
} else {
greenLedState = LOW;
digitalWrite(greenLed, LOW);
}
// red button: toggle red LED
if (redBtnState == HIGH && lastRedBtnState == LOW) {
redLedState = !redLedState;
digitalWrite(redLed, redLedState);
}
// orange button: blink sequence
if (orangeBtnState == HIGH && lastOrangeBtnState == LOW) {
digitalWrite(greenLed, LOW);
digitalWrite(redLed, LOW);
delay(500);
for (int i = 1; i <= 3; i++) {
digitalWrite(redLed, HIGH);
delay(1000);
digitalWrite(redLed, LOW);
delay(1000);
}
for (int i = 1; i <= 10; i++) {
digitalWrite(orangeLed, HIGH);
delay(1000);
digitalWrite(orangeLed, LOW);
delay(1000);
}
// restore LEDs to previous states
digitalWrite(redLed, redLedState);
digitalWrite(greenLed, greenLedState);
}
// green button: toggle green LED and turn off red LED
if (greenBtnState == HIGH && lastGreenBtnState == LOW) {
greenLedState = !greenLedState;
digitalWrite(greenLed, greenLedState);
redLedState = LOW;
digitalWrite(redLed, LOW);
}
// save last button states
lastRedBtnState = redBtnState;
lastOrangeBtnState = orangeBtnState;
lastGreenBtnState = greenBtnState;
}