教你做 智能交通灯,一下午的成果!
话说好久没玩arduino, 最近在玩stm32和四级考试。前几天朋友叫我帮他做一个智能交通灯,用振动传感器来检测有没有车辆,然后如果有车辆的话就60s换灯,没有车的话就50s 换灯。
我一开始想了想好简单,但下午做的时候,还遇到了一些没有想到的麻烦,一个是我要用三位数码管 (别问为什么不用两位的,告诉你我现在手头没有),我不想用寄存器,但是他这个数码管又是共阴又是三个abcddefg在一起,所以就看了网上一些人的倒计时程序,发现也不好使,还是自己来写吧, 所以就用开始刷的方法,然后加数的话就用定时器2。(具体的看程序),然后就是红黄绿 三个灯的逻辑关系也搞了一会才好。
振动传感器就是振动是输出高低电平的那种。(不想给他们打广告)
说一下引脚的连法,2脚是振动传感器的D0;
a=3; b=4; c=5; d=6;
e=7; f=8; g=9;p=10;
d4=13;d3=12;d2=11;//这几个是那个数码管的位选
A0,A1,A2是红黄绿三个灯(我只有红色的LED灯,所以三个都是红色的)
#include <MsTimer2.h>
#define SensorLED 13
#define SensorINPUT 2
unsigned char state = 0;
int a=3;
int b=4;
int c=5;
int d=6;
int e=7;
int f=8;
int g=9;
int p=10;
int d4=13;
int d3=12;
int d2=11;
long n=60;
int x=100;
int del=1;
int h=0;
int m=1;
void setup()
{
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(p,OUTPUT);
pinMode(d4,OUTPUT);
pinMode(d3,OUTPUT);
pinMode(d2,OUTPUT);
pinMode(A0,OUTPUT);
pinMode(A1,OUTPUT);
pinMode(A2,OUTPUT);
pinMode(SensorLED, OUTPUT);
pinMode(SensorINPUT, INPUT);
attachInterrupt(0, blink, FALLING);//D2口为外部中断0,当有下降沿触发的时候调用blink函数
MsTimer2::set(1000, flash); // 中断设置函数,每 500ms 进入一次中断
MsTimer2::start();//开始计时
}
void loop()
{
clearLEDs();
pickDigit(2);
pickNumber(n%10);
delay(del);
clearLEDs();
pickDigit(3);
pickNumber(n/10);
delay(del);
if(n>=4)
{
digitalWrite(A2,0);
digitalWrite(A0,h);
digitalWrite(A1,~h);
}
else
{
digitalWrite(A2 loooooo,1);
digitalWrite(A0,0);
digitalWrite(A1,0);
}
if(n==0)
{
h=~h;
if(state!=0)
{
state=0;
n=60;
}
else n=50;
}
}
void flash() //中断处理函数
{
n--;
}
void blink()//数字输入传感器下降沿触发中断服务函数
{
state++;
}
void pickDigit(int x)
{
digitalWrite(d2,HIGH);
digitalWrite(d3,HIGH);
digitalWrite(d4,HIGH);
switch(x)
{
case 2:
digitalWrite(d2,LOW);
break;
case 3:
digitalWrite(d3,LOW);
break;
default:
digitalWrite(d4,LOW);
break;
}
}
void pickNumber(int x)
{
switch(x)
{
default:
zero();
break;
case 1:
one();
break;
case 2:
two();
break;
case 3:
three();
break;
case 4:
four();
break;
case 5:
five();
break;
case 6:
six();
break;
case 7:
seven();
break;
case 8:
eight();
break;
case 9:
nine();
break;
}
}
void dispDec(int x)
{
digitalWrite(p,HIGH);
}
void clearLEDs()
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
digitalWrite(p,LOW);
}
void zero()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
}
void one()
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void two()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
}
void three()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
}
void four()
{
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void five()
{
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void six()
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void seven()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
void eight()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
void nine()
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
第一次发这样的详细的帖子,有不好的还有程序的有不对的,请各位大大们海涵和指正;
话说我做了这么久,又写了这么久,你们看到这是不是应该顶一下!!!
为什么选副图片是拍下44数字的?
话说这一两年见得最多的就是连续的4字:L 代码讲解的不错
页:
[1]