极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12891|回复: 2

教你做 智能交通灯,一下午的成果!

[复制链接]
发表于 2014-12-15 18:18:06 | 显示全部楼层 |阅读模式
       话说好久没玩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灯,所以三个都是红色的)


  1. #include <MsTimer2.h>  

  2. #define SensorLED     13
  3. #define SensorINPUT   2  

  4. unsigned char state = 0;

  5. int a=3;
  6. int b=4;
  7. int c=5;
  8. int d=6;
  9. int e=7;
  10. int f=8;
  11. int g=9;
  12. int p=10;
  13. int d4=13;
  14. int d3=12;
  15. int d2=11;

  16. long n=60;
  17. int x=100;
  18. int del=1;
  19. int h=0;
  20. int m=1;

  21. void setup()
  22. {
  23.   pinMode(a,OUTPUT);
  24.   pinMode(b,OUTPUT);
  25.   pinMode(c,OUTPUT);
  26.   pinMode(d,OUTPUT);
  27.   pinMode(e,OUTPUT);
  28.   pinMode(f,OUTPUT);
  29.   pinMode(g,OUTPUT);
  30.   pinMode(p,OUTPUT);
  31.   pinMode(d4,OUTPUT);
  32.   pinMode(d3,OUTPUT);
  33.   pinMode(d2,OUTPUT);
  34.   pinMode(A0,OUTPUT);
  35.   pinMode(A1,OUTPUT);
  36.   pinMode(A2,OUTPUT);
  37.    pinMode(SensorLED, OUTPUT);
  38.   pinMode(SensorINPUT, INPUT);
  39.   attachInterrupt(0, blink, FALLING);//D2口为外部中断0,当有下降沿触发的时候调用blink函数
  40.   
  41.   MsTimer2::set(1000, flash);        // 中断设置函数,每 500ms 进入一次中断
  42.   MsTimer2::start();  //开始计时

  43. }
  44. void loop()
  45. {
  46.                
  47.   clearLEDs();
  48.   pickDigit(2);
  49.   pickNumber(n%10);
  50.   delay(del);
  51.   
  52.   clearLEDs();
  53.   pickDigit(3);
  54.   pickNumber(n/10);
  55. delay(del);
  56. if(n>=4)
  57. {
  58.    
  59.    digitalWrite(A2,0);
  60.    digitalWrite(A0,h);
  61.    digitalWrite(A1,~h);
  62. }
  63. else
  64. {
  65.   digitalWrite(A2      loooooo,1);
  66.   digitalWrite(A0,0);
  67.   digitalWrite(A1,0);
  68. }

  69. if(n==0)
  70. {
  71.    h=~h;
  72.   
  73.    if(state!=0)
  74.    {
  75.      state=0;
  76.      n=60;
  77.    }
  78.    else n=50;
  79. }

  80. }

  81. void flash()                        //中断处理函数
  82. {                        
  83. n--;
  84. }

  85. void blink()//数字输入传感器下降沿触发中断服务函数
  86. {
  87.   state++;
  88. }

  89. void pickDigit(int x)
  90. {

  91.   digitalWrite(d2,HIGH);
  92.   digitalWrite(d3,HIGH);
  93.   digitalWrite(d4,HIGH);
  94.   
  95.   switch(x)
  96.   {
  97.     case 2:
  98.       digitalWrite(d2,LOW);
  99.       break;
  100.     case 3:
  101.       digitalWrite(d3,LOW);
  102.       break;
  103.     default:
  104.       digitalWrite(d4,LOW);
  105.       break;
  106.   }
  107. }
  108. void pickNumber(int x)
  109. {
  110.   switch(x)
  111.   {
  112.     default:
  113.       zero();
  114.       break;
  115.     case 1:
  116.       one();
  117.       break;
  118.     case 2:
  119.       two();
  120.       break;
  121.     case 3:
  122.       three();
  123.       break;
  124.     case 4:
  125.       four();
  126.       break;
  127.     case 5:
  128.       five();
  129.       break;
  130.     case 6:
  131.       six();
  132.       break;
  133.     case 7:
  134.       seven();
  135.       break;
  136.     case 8:
  137.       eight();
  138.       break;
  139.     case 9:
  140.       nine();
  141.       break;
  142.   }
  143. }
  144. void dispDec(int x)
  145. {
  146.   digitalWrite(p,HIGH);
  147. }
  148. void clearLEDs()
  149. {
  150.   digitalWrite(a,LOW);
  151.   digitalWrite(b,LOW);
  152.   digitalWrite(c,LOW);
  153.   digitalWrite(d,LOW);
  154.   digitalWrite(e,LOW);
  155.   digitalWrite(f,LOW);
  156.   digitalWrite(g,LOW);
  157.   digitalWrite(p,LOW);
  158. }
  159. void zero()
  160. {
  161.   digitalWrite(a,HIGH);
  162.   digitalWrite(b,HIGH);
  163.   digitalWrite(c,HIGH);
  164.   digitalWrite(d,HIGH);
  165.   digitalWrite(e,HIGH);
  166.   digitalWrite(f,HIGH);
  167.   digitalWrite(g,LOW);
  168. }
  169. void one()
  170. {
  171.   digitalWrite(a,LOW);
  172.   digitalWrite(b,HIGH);
  173.   digitalWrite(c,HIGH);
  174.   digitalWrite(d,LOW);
  175.   digitalWrite(e,LOW);
  176.   digitalWrite(f,LOW);
  177.   digitalWrite(g,LOW);
  178. }
  179. void two()
  180. {
  181.   digitalWrite(a,HIGH);
  182.   digitalWrite(b,HIGH);
  183.   digitalWrite(c,LOW);
  184.   digitalWrite(d,HIGH);
  185.   digitalWrite(e,HIGH);
  186.   digitalWrite(f,LOW);
  187.   digitalWrite(g,HIGH);
  188. }
  189. void three()
  190. {
  191.   digitalWrite(a,HIGH);
  192.   digitalWrite(b,HIGH);
  193.   digitalWrite(c,HIGH);
  194.   digitalWrite(d,HIGH);
  195.   digitalWrite(e,LOW);
  196.   digitalWrite(f,LOW);
  197.   digitalWrite(g,HIGH);
  198. }
  199. void four()
  200. {
  201.   digitalWrite(a,LOW);
  202.   digitalWrite(b,HIGH);
  203.   digitalWrite(c,HIGH);
  204.   digitalWrite(d,LOW);
  205.   digitalWrite(e,LOW);
  206.   digitalWrite(f,HIGH);
  207.   digitalWrite(g,HIGH);
  208. }
  209. void five()
  210. {
  211.   digitalWrite(a,HIGH);
  212.   digitalWrite(b,LOW);
  213.   digitalWrite(c,HIGH);
  214.   digitalWrite(d,HIGH);
  215.   digitalWrite(e,LOW);
  216.   digitalWrite(f,HIGH);
  217.   digitalWrite(g,HIGH);
  218. }
  219. void six()
  220. {
  221.   digitalWrite(a,LOW);
  222.   digitalWrite(b,LOW);
  223.   digitalWrite(c,HIGH);
  224.   digitalWrite(d,HIGH);
  225.   digitalWrite(e,HIGH);
  226.   digitalWrite(f,HIGH);
  227.   digitalWrite(g,HIGH);
  228. }
  229. void seven()
  230. {
  231.   digitalWrite(a,HIGH);
  232.   digitalWrite(b,HIGH);
  233.   digitalWrite(c,HIGH);
  234.   digitalWrite(d,LOW);
  235.   digitalWrite(e,LOW);
  236.   digitalWrite(f,LOW);
  237.   digitalWrite(g,LOW);
  238. }
  239. void eight()
  240. {
  241.   digitalWrite(a,HIGH);
  242.   digitalWrite(b,HIGH);
  243.   digitalWrite(c,HIGH);
  244.   digitalWrite(d,HIGH);
  245.   digitalWrite(e,HIGH);
  246.   digitalWrite(f,HIGH);
  247.   digitalWrite(g,HIGH);
  248. }
  249. void nine()
  250. {
  251.   digitalWrite(a,HIGH);
  252.   digitalWrite(b,HIGH);
  253.   digitalWrite(c,HIGH);
  254.   digitalWrite(d,HIGH);
  255.   digitalWrite(e,LOW);
  256.   digitalWrite(f,HIGH);
  257.   digitalWrite(g,HIGH);  
  258. }
复制代码


第一次发这样的详细的帖子,有不好的还有程序的有不对的,请各位大大们海涵和指正;

话说我做了这么久,又写了这么久,你们看到这是不是应该顶一下!!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-12-17 20:59:33 | 显示全部楼层
为什么选副图片是拍下44数字的?

话说这一两年见得最多的就是连续的4字
回复 支持 反对

使用道具 举报

发表于 2015-3-30 22:56:30 来自手机 | 显示全部楼层
代码讲解的不错
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-3 23:12 , Processed in 0.037153 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表