// 定义LED灯的引脚
const int red1 = 2;
const int yellow1 = 3;
const int green1 = 4;
const int red2 = 5;
const int yellow2 = 6;
const int green2 = 7;
// 定义按钮的引脚
#define button1 8
#define button2 9
// 定义状态
enum State {
RED_GREEN,
YELLOW_RED,
GREEN_RED,
RED_YELLOW
};
// 定义当前状态和上一个状态
State currentState = RED_GREEN;
State previousState = RED_GREEN;
void setup() {
// 设置LED灯为输出模式
pinMode(red1, OUTPUT);
pinMode(yellow1, OUTPUT);
pinMode(green1, OUTPUT);
pinMode(red2, OUTPUT);
pinMode(yellow2, OUTPUT);
pinMode(green2, OUTPUT);
// 设置按钮为输入模式
pinMode(button1, INPUT);
pinMode(button2, INPUT);
// 初始化LED灯为关闭状态
digitalWrite(red1, LOW);
digitalWrite(yellow1, LOW);
digitalWrite(green1, LOW);
digitalWrite(red2, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(green2, LOW);
}
void loop() {
// 检测按钮状态
int buttonState1 = digitalRead(button1);
int buttonState2 = digitalRead(button2);
// 更新状态
if (buttonState1 == HIGH) {
currentState = RED_GREEN;
} else if (buttonState2 == HIGH) {
currentState = GREEN_RED;
} else {
switch (previousState) {
case RED_GREEN:
currentState = RED_YELLOW;
break;
case YELLOW_RED:
currentState = RED_GREEN;
break;
case GREEN_RED:
currentState = YELLOW_RED;
break;
case RED_YELLOW:
currentState =GREEN_RED;
break;
}
}
// 更新LED灯状态
switch (currentState) {
case RED_GREEN:
digitalWrite(red1, HIGH);
digitalWrite(yellow1, LOW);
digitalWrite(green1, LOW);
digitalWrite(red2, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(green2, HIGH);
delay(3000);
break;
case YELLOW_RED:
digitalWrite(red1, LOW);
digitalWrite(yellow1, HIGH);
digitalWrite(green1, LOW);
digitalWrite(red2, HIGH);
digitalWrite(yellow2,LOW);
digitalWrite(green2, LOW);
delay(500);
break;
case GREEN_RED:
digitalWrite(red1, LOW);
digitalWrite(yellow1, LOW);
digitalWrite(green1, HIGH);
digitalWrite(red2, HIGH);
digitalWrite(yellow2, LOW);
digitalWrite(green2, LOW);
delay(3000);
break;
case RED_YELLOW:
digitalWrite(red1, HIGH);
digitalWrite(yellow1, LOW);
digitalWrite(green1, LOW);
digitalWrite(red2, LOW);
digitalWrite(yellow2, HIGH);
digitalWrite(green2, LOW);
delay(500);
break;
}
// 更新上一个状态
previousState = currentState;
}