根据本章内容做的,每行都写了备注,有问题请指教,.
// 项目 - 交通信号灯int carRed = 13; // 汽车红灯引脚
int carYellow = 12; // 汽车黄灯引脚
int carGreen = 8;// 汽车绿灯引脚
int button = 2; // 按钮引脚
int pedRed = 7; // 行人红灯引脚
int pedGreen = 4; // 行人绿灯引脚
int crossTime = 5000; // 允许行人通过的时间(毫秒)
unsigned long changeTime; // 按钮按下后的时间
void setup() {
pinMode(carRed, OUTPUT);//灯光设置为输出
pinMode(carYellow, OUTPUT);//灯光设置为输出
pinMode(carGreen, OUTPUT);//灯光设置为输出
pinMode(pedRed, OUTPUT);//灯光设置为输出
pinMode(pedGreen, OUTPUT);//灯光设置为输出
pinMode(button, INPUT); // 按钮设置为输入模式
// 初始状态设置
digitalWrite(carRed, HIGH); // 车行红灯亮
digitalWrite(pedGreen, HIGH); // 人行绿灯亮
}
void loop() {
int state = digitalRead(button);//state状态=digitaLRead函数 读取状态(botton按钮)
// 检测按钮状态及时间间隔
if (state == HIGH && (millis() - changeTime) > 5000) { //if判断(state状态==高电平HIGH 与&& (系统运行时间millis() 减- 按钮按下去的时间chuangeTime) 小于> 5秒 5000
// 调用变灯函数
changeLights();
}
}
void changeLights() { //这里其实我目前还不是很理解.前面那个调用变灯函数和这里的关系.
//给初始化的行人绿灯闪烁
for (int x = 0; x < 3; x++) { //循环指令
digitalWrite(pedGreen, HIGH);//打开行人绿灯
delay(400); //等待0.4秒
digitalWrite(pedGreen, LOW); //关闭行人绿灯
delay(400); //等待0.4秒
} //循环3次结束
digitalWrite(pedGreen,LOW); //关闭行人绿灯
delay(500); //等待0.5秒
digitalWrite(pedRed,HIGH); //开启行人红灯
delay(1000); //等待1秒,显得自然
for (int i = 0; i < 3; i++){ //循环指令
digitalWrite(carRed,LOW); //关闭车辆红灯
delay(400); //等待0.4秒
digitalWrite(carRed,HIGH); //打开车辆红灯
delay(400); //等待0.4秒
} //循环3次结束
digitalWrite(carRed,LOW); //关闭车辆红灯
delay(500); //等待0.5秒
digitalWrite(carYellow,HIGH); //打开车辆黄灯
delay(1000); //等待1秒
for (int o = 0; o < 3; o++){ //循环指令
digitalWrite(carYellow,LOW); //车辆黄灯关闭
delay(400); //等待0.4秒
digitalWrite(carYellow,HIGH);//车辆黄灯打开
delay(400); //等待0.4秒
} //循环3次结束
digitalWrite(carYellow,LOW); //车辆黄灯关闭
delay(500); //等待0.5秒
digitalWrite(carGreen,HIGH); //打开车辆绿灯
delay(10000); //等待10秒
for (int y = 0; y < 3; y++){ //循环指令
digitalWrite(carGreen,LOW); //关闭车辆绿灯
delay(400); //等待0.4秒
digitalWrite(carGreen,HIGH); //打开车辆绿灯
delay(400); //等待0.4秒
} //循环3次结束
digitalWrite(carGreen,LOW); //关闭车辆绿灯
digitalWrite(pedRed,LOW); //关闭行人红灯
delay(500); //等待0.5秒
digitalWrite(carRed,HIGH); //打开车辆红灯,回到初始状态
digitalWrite(pedGreen,HIGH); //打开行人绿灯.回到初始状态
// 更新changeTime
changeTime = millis();
}