极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10767|回复: 0

arduino多路倒计时多路输出带暂停,应用控制跑步机键盘KEEP13组时间5组速度变速跑

[复制链接]
发表于 2016-9-6 23:17:18 | 显示全部楼层 |阅读模式
本帖最后由 偶是谁 于 2016-9-18 20:21 编辑


程序根据Malc【红绿灯】 程序修改,开关置低进中断暂停,置高退出中断循环

该倒计时器特点是可以根据自己设备要求随意添加更改多组时间和输出,(更改时间组和输出组就OK)
应用范围非常广泛。

  1. #define Duration 5 //数码管扫描时间,间隔
  2. #define SegNum 3 //3位数码管
  3. #define LEDNum 13  //13个输出
  4. #define SensorINPUT   2  //低电平进入中断程序,暂停计时
  5. int val;
  6. int Light_time[13]={12,13,7,134,73,133,73,134,104,194,194,134,74};//13组时间  
  7. char number[10][7]={  //共阳0~9编码
  8.   0,0,0,0,0,0,1,
  9.   1,0,0,1,1,1,1,
  10.   0,0,1,0,0,1,0,
  11.   0,0,0,0,1,1,0,
  12.   1,0,0,1,1,0,0,
  13.   0,1,0,0,1,0,0,
  14.   1,1,0,0,0,0,0,
  15.   0,0,0,1,1,1,1,
  16.   0,0,0,0,0,0,0,
  17.   0,0,0,0,1,0,0,
  18. };
  19. /*
  20. arduino引脚   3 4 5 6 7 8 9
  21. 数码管引脚    a b c d e f g
  22. */
  23. char seg[7]={3,4,5,6,7,8,9};//arduino引脚

  24. char DS[SegNum]={10,11,12};//arduino位选引脚
  25. char LED[LEDNum]={A0,A1,A2,A1,A2,A1,A3,A1,A2,A1,A0,A0,A4};
  26. /*arduino13组输出a0=5km,a1=7km,a2=9km,a3=11km,A4=3km*/
  27. unsigned long timer=0,ptimer=0;
  28. void setup()
  29. {
  30.   pinMode(2, INPUT_PULLUP);
  31.   attachInterrupt(0, keyInt, LOW); //当D2脚0电平时,触发中断函数
  32.   Serial.begin(9600);//串口显示
  33.   int i;
  34.   for(i=0;i<7;i++)
  35.   {
  36.     pinMode(seg[i],OUTPUT);
  37.     digitalWrite(seg[i],HIGH);
  38.     }

  39.   for(i=0;i<SegNum;i++)//段选
  40.   {
  41.     pinMode(DS[i],OUTPUT);
  42.     digitalWrite(DS[i],HIGH);
  43.     }


  44.   for(i=0;i<LEDNum;i++)//位选
  45.   {
  46.     pinMode(LED[i],OUTPUT);
  47.     digitalWrite(LED[i],HIGH);
  48.     }
  49.   timer=millis();/*millis()返回arduino从启动到当前所经过的毫秒数,大约42天
  50.   后溢出。如果将当前的时间记录下来(时间戳),记为timeStamp,然后在之后某一
  51.   时间进行一次(millis()-timeStamp)计算,就可以得出两次读数的时间差。一旦算出
  52.   超过预定值,就可以执行后续语句什么的。至于串口有没有数据,可以用Serial.
  53.   available()来 判断,它返回的是缓冲区中的字符数。或者直接写一个serialEvent()
  54.   函数,如果串口有数据会在一个loop()执行完之后执行。BTW,用delay会导致loop()
  55.   不能及时结束,即,推迟serialEvent()函数的执行。*/

  56. }
  57. void dis(char num,char _DS)
  58. {
  59.   int i;
  60.   for(i=0;i<7;i++)
  61.     digitalWrite(seg[i],number[num][i]);
  62.   for(i=0;i<SegNum;i++)
  63.     if(i==_DS)
  64.       digitalWrite(DS[i],HIGH);
  65.     else
  66.       digitalWrite(DS[i],LOW);     
  67. delay(Duration);
  68. for(i=0;i<SegNum;i++)//消隐
  69.   {
  70.     digitalWrite(DS[i],LOW);
  71.     }
  72. }
  73. void show(unsigned long timer)
  74. {
  75.     dis((timer/100)%10,2);
  76.     dis((timer/10)%10,1);
  77.     dis(timer%10,0);

  78. }
  79. void loop()
  80. {
  81.   int i;
  82. for(i=0;i<LEDNum;i++)
  83. {
  84.   if(timer==0)
  85.   {
  86.     digitalWrite(LED[i],LOW);
  87.     delay(500);
  88.     digitalWrite(LED[i],HIGH);
  89.   while(timer<=Light_time[i])
  90.   {
  91.    show(Light_time[i]-timer);
  92.    val=(Light_time[i]-timer);
  93.    timer=(millis()-ptimer)/1000;
  94.    Serial.println(Light_time[i]-timer);
  95.   }
  96.   }
  97.    timer=0;
  98.    ptimer=millis();

  99. }
  100. }
  101. void keyInt()
  102. {   
  103.     show(val);//
  104. }
复制代码

视频晚上拍的不好,程序是修改好的:带暂停功能,输出是触发继电器短路键盘按键
控制跑步机按设定13组时间,5组速度运行,经过实验,实现自己想要的功能
有朋友控制其他电器设备的,修改程序加入功能的,保持arduino开源精神,跟贴介绍,一起学习,希望大神多提意见,谢谢

回复

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 14:48 , Processed in 0.046185 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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