arduino多种思路实现单路交通灯控制

arduino小实验

刚好最近学东西有用到arduino,所以把平常的小实验做成实验,有兴趣的朋友可以看看。

一 、功能实现

交通灯程序,有红绿黄三个led灯,依次亮4,2,1秒
我用了多个方法实现了这个效果,首先是用平铺的写法,直接定义管脚,然后通过高低电平和延时来实现功能。

char red1= 7;

char green1=6;

char yellow1=5;

void setup() {

pinMode(red1, OUTPUT);

pinMode(green1,OUTPUT);

pinMode(yellow1,OUTPUT);

}

void loop() {

   digitalWrite(red1, LOW);

   digitalWrite(green1, HIGH);

   digitalWrite(yellow1,HIGH);

   delay(4000);

   digitalWrite(red1, HIGH);

   digitalWrite(yellow1,HIGH);

   digitalWrite(green1,LOW);

   delay(2000);

   digitalWrite(yellow1,LOW);

   digitalWrite(red1, HIGH);

   digitalWrite(green1, HIGH);

   delay(1000);

   digitalWrite(green1, HIGH);

   digitalWrite(yellow1,HIGH);

   digitalWrite(red1, HIGH);

   delay(2000);//全灭两秒,区分程序是否运行

但是这样子来实现效果,感觉代码很臃肿,所以试着用for循环和数组实现功能

char hong=2;

char hongled[3]={0,1,1};//定义红灯亮灭数组

char yellow=3;

char yellowled[3]={1,0,1};

char red=4;

char redled[3]={1,1,0};

int i;

void setup() 

{

   

   pinMode(hong, OUTPUT); //定义9号引脚为输出口

   pinMode(yellow, OUTPUT);

    pinMode(red, OUTPUT);

}



void loop() 

{

  for(i=0;i<3;i++){

    if(i<1)

    {

      digitalWrite(hong, hongled[0]);

      digitalWrite(yellow, yellowled[0]);

      digitalWrite(red, redled[0]);

       delay(4000);

      }

       else  if(i==1)

      {

      digitalWrite(hong, hongled[1]);

      digitalWrite(yellow, yellowled[1]);

      digitalWrite(red, redled[1]);

       delay(2000);

         }

       else if(i>1){

      digitalWrite(hong, hongled[2]);

      digitalWrite(yellow, yellowled[2]);

      digitalWrite(red, redled[2]);

       delay(1000);

        }

    }

}

通过for循环和数组实现功能后,感觉多个数组也很麻烦,其实可以简化成一个多维数组,通过一个多维数组实现功能。

char hong=2;
char yellow=3;
char red=4;
int led[3][3]={{0,1,1},{1,0,1},{1,1,0}};
int i;
void setup() 
{
   
   pinMode(hong, OUTPUT); //定义9号引脚为输出口
   pinMode(yellow, OUTPUT);
    pinMode(red, OUTPUT);
}

void loop() 
{
  for(i=0;i<3;i++){
    if(i<1)
    {
      digitalWrite(hong, led[0][0]);
      digitalWrite(yellow, led[0][1]);
      digitalWrite(red, led[0][2]);
       delay(4000);
      }
       else  if(i==1)
      {
      digitalWrite(hong, led[1][0]);
      digitalWrite(yellow, led[1][1]);
      digitalWrite(red, led[1][2]);
       delay(2000);
         }
       else if(i>1){
      digitalWrite(hong, led[2][0]);
      digitalWrite(yellow, led[2][1]);
      digitalWrite(red,led[2][2]);
       delay(1000);
        }
    }
}

最后发现其实用单个数组也是可以实现的,也更简便。

char hong=2;
char yellow=3;
char red=4;
int led[]={0,1,1,1,0,1,1,1,0};
int i;

void setup()
 {
    pinMode(hong, OUTPUT); //定义9号引脚为输出口
    pinMode(yellow, OUTPUT);
    pinMode(red, OUTPUT);
 }



void loop()
{
for(i=0;i<3;i++){
if(i<1)
  {
    digitalWrite(hong, led[0]);
    digitalWrite(yellow, led[1]);
    digitalWrite(red, led[2]);
    delay(4000);
  }
else if(i==1)
  {
    digitalWrite(hong, led[3]);
    digitalWrite(yellow, led[4]);
    digitalWrite(red, led[5]);
    delay(2000);
  }
else if(i>1)
  {
    digitalWrite(hong, led[6]);
    digitalWrite(yellow, led[7]);
    digitalWrite(red, led[8]);
    delay(1000);
  }
}
}

下面是接线图,我用的是uno开发板,模块用的是led条,换成交通灯模块同理。
在这里插入图片描述

二 、总结

以上就是我对arduino单路交通灯控制的一些学习笔记吧,我感觉我的思路还有很大的优化空间,要使用还需要调试,但是通过这个方法可以定义一个多维数组,来实现四路交通灯功能。
到这里就结束了,谢谢各位的观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值