查看: 287|回复: 7

[教程] Arduino——之仿红绿灯

[复制链接]
  • TA的每日心情
    开心
    2019-7-27 17:17
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2019-7-20 12:00 | 显示全部楼层 |阅读模式
    本帖最后由 ZTOP 于 2019-7-21 14:43 编辑

    初试Arduino—仿红绿灯升级加上倒计时
    使用硬件:Arduino Uno        *1
    4位共阴数码管       *1
    面包板                   *1
    红绿灯                   *1
    电阻 220K Ω         *4
    跳线若干




    代码如下:
    //定义 4位阴极数码管

    #define COM4 13 // 面包板空间有限只定义一个管组

    #define d_a 11  //定义数码管a 接引脚 11
    #define d_b 10
    #define d_c 4
    #define d_d 5
    #define d_e 6
    #define d_f 7
    #define d_g 8
    #define d_h 9


    // 定义引脚
    const int ledRad = 1;
    const int ledYellow = 2;
    const int ledGreen = 3;

    char flag = '1'; // 标志

    void setup() {
      // 初始化将红绿灯设为输出状态
      pinMode(ledRad,OUTPUT);
      pinMode(ledYellow,OUTPUT);
      pinMode(ledGreen,OUTPUT);

      pinMode(d_a,OUTPUT);    //设置为输出引脚
      pinMode(d_b,OUTPUT);
      pinMode(d_c,OUTPUT);
      pinMode(d_d,OUTPUT);
      pinMode(d_e,OUTPUT);
      pinMode(d_f,OUTPUT);
      pinMode(d_g,OUTPUT);
      pinMode(d_h,OUTPUT);
      pinMode(COM4,OUTPUT);
    }
    unsigned char num[17][8] =
    {
    //a  b  c  d  e  f  g  h
      {1, 1, 1, 1, 1, 1, 0, 0},     //0
      {0, 1, 1, 0, 0, 0, 0, 0},     //1
      {1, 1, 0, 1, 1, 0, 1, 0},     //2
      {1, 1, 1, 1, 0, 0, 1, 0},     //3
      {0, 1, 1, 0, 0, 1, 1, 0},     //4
      {1, 0, 1, 1, 0, 1, 1, 0},     //5
      {1, 0, 1, 1, 1, 1, 1, 0},     //6
      {1, 1, 1, 0, 0, 0, 0, 0},     //7
      {1, 1, 1, 1, 1, 1, 1, 0},     //8
      {1, 1, 1, 1, 0, 1, 1, 0},     //9
      {1, 1, 1, 0, 1, 1, 1, 1},     //A
      {1, 1, 1, 1, 1, 1, 1, 1},     //B
      {1, 0, 0, 1, 1, 1, 0, 1},     //C
      {1, 1, 1, 1, 1, 1, 0, 1},     //D
      {1, 0, 0, 1, 1, 1, 1, 1},     //E
      {1, 0, 0, 0, 1, 1, 1, 1},     //F
      {0, 0, 0, 0, 0, 0, 0, 1},     //.
    };

    void loop() {

          switch(flag){
            case '1' :
              digitalWrite(ledRad,LOW);
              delay(1000);//等待1秒
              digitalWrite(ledYellow,HIGH);
              delay(3000);
              getFor();
              flag = '2';
            case '2' :
              digitalWrite(ledYellow,LOW);
              delay(1000);
              digitalWrite(ledGreen,HIGH);
              delay(3000);
              getFor();
              flag = '3';
             case '3' :
              digitalWrite(ledGreen,LOW);
              delay(1000);
              digitalWrite(ledRad,HIGH);
              delay(3000);
              getFor();
              flag = '1';
          }
    }

    void Display(unsigned char com,unsigned char n)      //显示函数,com值 = 4,num可选数值范围0-9
    {


      if(com == 4)//选通位选
      {           
          digitalWrite(COM4,LOW);   //选择位4
      }
      digitalWrite(d_a,num[n][0]);      //a查询码值表
      digitalWrite(d_b,num[n][1]);
      digitalWrite(d_c,num[n][2]);
      digitalWrite(d_d,num[n][3]);
      digitalWrite(d_e,num[n][4]);
      digitalWrite(d_f,num[n][5]);
      digitalWrite(d_g,num[n][6]);
      digitalWrite(d_h,num[n][7]);
      if(n == 0){
        delay(1000);
        digitalWrite(COM4,HIGH);  
      }
    }

    void getFor(){
      for(int i = 9;i >= 0;i-- )
      {
                Display(4,i);
                delay(1000);
        }
      }



    代码借鉴:https://blog.csdn.net/ling3ye/article/details/52973365     Arduino 用4位共阴数码管造一个计数器

  • TA的每日心情
    难过
    2019-8-24 00:33
  • 签到天数: 68 天

    [LV.6]常住居民II

    发表于 2019-7-20 18:17 | 显示全部楼层
    厉害厉害,顶!!!
  • TA的每日心情
    开心
    2015-5-9 10:01
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    发表于 2019-7-20 19:43 | 显示全部楼层
    好,我也贴一个我写的红绿灯例子。
    #define EWRed 2; //PD2
    #define EWYew 3; //PD3
    #define EWGrn 4; //PD4
    #define SNRed 5; //PD5
    #define SNYew 6; //PD6
    #define SNGrn 7; //PD7
    const byte runBit[] PROGMEM = {0x24, 0x0c,0x04,0x0c,0x04,0x0c,0x04,0x0c,0x14,0x24, 0x21,0x20,0x21,0x20,0x21,0x20,0x21,0x22};
    long runTim[] =               {2000,45000, 500, 500, 500, 500, 500, 500,2000,2000,35000, 500, 500, 500, 500, 500, 500, 500};
    unsigned long time;
    unsigned long spt;
    int runStep = 0;
    void setup() {
      int i;
      for(i=0;i<8;i++) pinMode(i,OUTPUT);
      Serial.begin(9600);
    }
    void loop() {
      time = millis();
      if ((time - spt)>=runTim[runStep]) {
        if (++runStep == sizeof(runBit)) runStep = 0;
        PORTD = runBit[runStep];
        spt = time;
        Serial.print(runStep);
      } else {
        PORTD = runBit[runStep];
      }
    }
  • TA的每日心情
    无聊
    2019-8-23 07:40
  • 签到天数: 115 天

    [LV.6]常住居民II

    发表于 2019-7-20 20:53 | 显示全部楼层
    也贴个

    kittenblock中小学创客名师推荐的图形化编程软件

    /*
    【Arduino】37种传感器模块系列实验(34)
    实验三十四:三色LED交通灯模块(红绿黄灯)
    */
    
    int redled =11; 
    int yellowled =12; 
    int greenled =13; 
    void setup()
    {
    pinMode(redled, OUTPUT);
    pinMode(yellowled, OUTPUT); 
    pinMode(greenled, OUTPUT); 
    }
    void loop()
    {
    digitalWrite(redled, HIGH);
    delay(1000);
    digitalWrite(redled, LOW); 
    digitalWrite(yellowled, HIGH);
    delay(200);
    digitalWrite(yellowled, LOW);
    digitalWrite(greenled, HIGH);
    delay(1000);
    digitalWrite(greenled, LOW);
    }
    

  • TA的每日心情
    无聊
    2019-8-23 07:40
  • 签到天数: 115 天

    [LV.6]常住居民II

    发表于 2019-7-20 20:54 | 显示全部楼层
    10.jpg
  • TA的每日心情
    奋斗
    2019-8-24 00:02
  • 签到天数: 86 天

    [LV.6]常住居民II

    发表于 2019-7-20 22:04 | 显示全部楼层
    xiansr 发表于 2019-7-20 19:43
    好,我也贴一个我写的红绿灯例子。
    #define EWRed 2; //PD2
    #define EWYew 3; //PD3

    这种最好,使用定时器,程序效率高。
    觉得好就打赏一下吧!!让我有动力继续写教程
  • TA的每日心情
    开心
    2019-7-27 17:17
  • 签到天数: 9 天

    [LV.3]偶尔看看II

     楼主| 发表于 2019-7-23 10:04 | 显示全部楼层
    xiansr 发表于 2019-7-20 19:43
    好,我也贴一个我写的红绿灯例子。
    #define EWRed 2; //PD2
    #define EWYew 3; //PD3

    这个厉害
  • TA的每日心情
    奋斗
    2019-8-21 12:28
  • 签到天数: 340 天

    [LV.8]以坛为家I

    发表于 2019-7-23 10:35 | 显示全部楼层
    程序写的很不错,赞一个
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Arduino lcd屏幕亮了但是不显示字符
    Arduino lcd屏幕亮了但是
    Arduino的lcd屏亮了但是上面没有字符显示,串进去的滑动变阻器也旋过了,但是还是没有
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【Arduino】108种传感器模块系列实验(98)---L298N电机驱动板
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    两个ESP8266通过云端实现远程数据交互
    两个ESP8266通过云端实现
    原理简述:利用发布订阅模式。一个ESP8266作为消息发布者,另一个ESP8266作为消息订阅
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表