Arduino制作实践课程(5)交通灯

交通灯这个实践课基本没有什么新的知识要介绍,仍然是我们的LED灯的使用,不同的是我们使用的LED灯是一个共阳极(共正极)的三色LED灯。而且我们知道路口两边同一直线上的红绿灯是同步的,同时亮起红灯同时亮起绿灯,所以,在连接的时候四个路口的三色灯一共只需要使用6个端口的信号即可。

一、电路连接图
如下图:
Arduino制作实践课程(5)交通灯_第1张图片
Arduino制作实践课程(5)交通灯_第2张图片
二、代码及说明

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个端口,刚好我们可以将其编辑为真值表来表达灯的亮灭情况:
Arduino制作实践课程(5)交通灯_第3张图片
上述真值表我们可以用一个16进制数组来表示,这样我们就省去了用二位数组去表示的麻烦。
有关bitRead的用法,请参考《arduino中bitRead详细用法》。

三、运行效果
我们在proteus下的仿真效果如下:
Arduino制作实践课程(5)交通灯_第4张图片
如果,我们在上述基础上配上两位数码管的倒计时功能,那么这个交通灯就可以拿到现实中去用了。有时间我会把配上了数码管的交通灯程序做出来,请有兴趣的童鞋继续关注。

你可能感兴趣的:(Arduino)