- // 项目 - 交通信号灯
- 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();
- }
复制代码
|