话说好久没玩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);
- }
复制代码
第一次发这样的详细的帖子,有不好的还有程序的有不对的,请各位大大们海涵和指正;
话说我做了这么久,又写了这么久,你们看到这是不是应该顶一下!!!
|