交通灯这个实践课基本没有什么新的知识要介绍,仍然是我们的LED灯的使用,不同的是我们使用的LED灯是一个共阳极(共正极)的三色LED灯。而且我们知道路口两边同一直线上的红绿灯是同步的,同时亮起红灯同时亮起绿灯,所以,在连接的时候四个路口的三色灯一共只需要使用6个端口的信号即可。
一、电路连接图
如下图:
二、代码及说明
int ledCode[6]={0x84,0x82,0x89,0x48,0x28,0x98};
int timeDelay[6]={300,50,100,300,50,100};
void setup () {
for(int i=2;i<10;i++)
{
pinMode(i,OUTPUT);
digitalWrite(i,HIGH);
}
}
void loop() {
for(int i=0; i<6;i++)
{
for(int k=0; k<8;k++)
{
tempLed=bitRead(ledCode[i],7-k);
digitalWrite(k+2,!tempLed);
}
delay(timeDelay[i]);
}
}
实际我们知道,交通灯同一条路上的灯的亮灭是统一的。所以我们实际只是控制了8个灯,用到的是8个端口,刚好我们可以将其编辑为真值表来表达灯的亮灭情况:
上述真值表我们可以用一个16进制数组来表示,这样我们就省去了用二位数组去表示的麻烦。
有关bitRead的用法,请参考《arduino中bitRead详细用法》。
三、运行效果
我们在proteus下的仿真效果如下:
如果,我们在上述基础上配上两位数码管的倒计时功能,那么这个交通灯就可以拿到现实中去用了。有时间我会把配上了数码管的交通灯程序做出来,请有兴趣的童鞋继续关注。