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