Arduino 互动交通灯
1、准备实验需要用到的硬件,如图所示:

2、如下图所示进行硬件的连接,此步我们先不连接发光二极管,只需将Arduino UNO控制器连接到电脑

3、将下列程序复制到Arduino IDE中,如下图所示:
int carRed = 12;
int carYellow = 11;
int carGreen = 10;
int pedRed = 9;
int pedGreen = 8;
int button = 2;
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(carGreen, HIGH);
digitalWrite(pedRed, HIGH);
}
void loop() {
int state = digitalRead(button);
if (state == HIGH && (millis() - changeTime) > 5000) {
changeLights();
}
}
void changeLights() {
digitalWrite(carGreen, LOW);
digitalWrite(carYellow, HIGH);
delay(2000);
digitalWrite(carYellow, LOW);
digitalWrite(carRed, HIGH);
delay(1000);
digitalWrite(pedRed, LOW);
digitalWrite(pedGreen, HIGH);
delay(crossTime);
for (int x=0; x<10; x++) {
digitalWrite(pedGreen, HIGH);
delay(250);
digitalWrite(pedGreen, LOW);
delay(250);
}
digitalWrite(pedRed, HIGH);
delay(500);
digitalWrite(carYellow, HIGH);
digitalWrite(carRed, LOW);
delay(1000);
digitalWrite(carGreen, HIGH);
digitalWrite(carYellow, LOW);
changeTime = millis();
}

4、如图所示,选择正确的板卡型号和端口,将程序上传到控制器中。


5、如图所示,程序上传无误的情况下 Arduino IDE 软件会显示如下结果,在上传过程中,Arduino 控制器板载的 TX RX 灯会频闪

6、按照下图中的电路,进行实验硬件的连接

7、实验效果如图所示,当按钮被按下时,Arduino将会做出反应,它改变交通灯的状态,让车停止,允许行人通过


8、代码回顾:
unsigned long changetime;
这是一个新的变量数据类型为 long 的数,可以存储一个从 -2 147 483 648 到
2 147 483 647之间的数。指定unsigned long 数据类型,它不存在负数,所以它的存储范围是从 0 到 4 294 967 295。使用这个变量存储信号灯状态变化的间隔,最大能存储的时间间隔为32秒,是整型变量能存储数据的上限。
if (state == HIGH && (millis() - changeTime) > 5000)
本句含义是当按键被按下,并且距离最后一次按下的时间间隔大于5秒,则再次调用 changeLights()。
代码位置如下图所示:

9、为了方便大家实验,防止在复制代码的时候出现错误,特将代码和电路图
Fritzing源文件上传至网盘供大家下载学习。下载地址:
http://pan.baidu.com/s/1mhBmIgw,打开链接后,如图所示,点击下载即可
