//定义整形时间 单位毫秒 可根据需求自由设置每个灯的时间和黄灯的间隔时间
int rtime=10000;
int ytime=6000;
int gtime=15000;
int blink=500;
//定义针脚名为颜色名 便于后期修改引脚也增加代码可读性
int red=32;
int yellow=33;
int green=25;
void setup() {
// 设置引脚输出模式
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
//初始设置关闭所有灯光 避免状态污染
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);
digitalWrite(green, LOW);
//显示时间信息
Serial.begin(115200);
Serial.println("ESP32红绿灯模拟程序");
Serial.print("绿灯时间:");
Serial.print(gtime/1000);
Serial.println("秒");
Serial.print("黄灯时间:");
Serial.print(ytime/1000);
Serial.println("秒");
Serial.print("红灯时间:");
Serial.print(rtime/1000);
Serial.println("秒");
}
void loop() {
delay(10); // this speeds up the simulation
//根据黄灯亮的时间与闪烁间隔计算黄灯闪烁次数
int blinkcnt=ytime/(blink*2);
//如果总时间小于时间间隔 也保证闪烁一次达成闪烁效果
if (blinkcnt==0) blinkcnt=1;
//红灯亮
Serial.println("红灯亮");
digitalWrite(red,HIGH);
delay(rtime);
Serial.println("红灯熄");
digitalWrite(red, LOW);
//黄灯闪烁for循环
Serial.println("黄灯闪");
for (int i=0;i<blinkcnt;i++)
{
digitalWrite(yellow,HIGH);
delay(blink);
digitalWrite(yellow, LOW);
delay(blink);
}
Serial.println("黄灯熄");
digitalWrite(yellow, LOW);
//绿灯亮
Serial.println("绿灯亮");
digitalWrite(green, HIGH);
delay(gtime);
Serial.println("绿灯熄");
digitalWrite(green, LOW);
}