找回密码
 立即注册

QQ登录

小制作:不起床就引爆“炸弹”的闹钟

来源: 创意制作 26wd 2015-1-23 10:49 显示全部楼层 |阅读模式
本帖最后由 26wd 于 2015-1-23 10:47 编辑

项目名字:《不起床就引爆“炸弹”的闹钟》
你可以像普通闹钟一样,设置好闹钟时间。
但时间到后,30秒倒计时开始,你要在这个时间内选择切断三根线中的一条(随机),期间会有灯光闪烁,切错爆炸,切对则成功解除危险!              
还增加简单定时功能,增加了arduino端系统时间的设置,时间设置全靠红外遥控器。



面包板如下:用到了1307时钟模块,1602用来显示,红外遥控




002516vfgf4f8v3jsylb32.png

所用到库在文章最后面
  1. #include <IRremote.h>
  2. #include <LiquidCrystal.h>
  3. #include <OneWire.h>
  4. #include <Wire.h>
  5. #include <DS1307.h>
  6. #include <EEPROM.h>

  7. #define EEPROM_write(address, p) {int i = 0; byte *pp = (byte*)&(p);for(; i < sizeof(p); i++) EEPROM.write(address+i, pp[i]);}
  8. #define EEPROM_read(address, p)  {int i = 0; byte *pp = (byte*)&(p);for(; i < sizeof(p); i++) pp[i]=EEPROM.read(address+i);}
  9. #define DAO 2
  10. #define BONG 4

  11. boolean  C2 = false, C3 = false;                //C2、C3

  12. /*----EEPROM---*/
  13. struct config_type
  14. {
  15.     int EEPROMshi;
  16.     int EEPROMfen;
  17.     int EEPROMmin;
  18.     int EEPROMtem;
  19. };

  20. /*-------time------*/
  21. String comdata = "";  //串口数据缓存
  22. int numdata[7] = {0}, j = 0, mark = 0;
  23. int rtc[7];

  24. int timenian, timeyue, timeri, timeshi, timefen, timemiao, timezhou;        //时钟

  25. int sheNIAN, sheYUE, sheRI, sheSHI, sheFEN, sheMIAO, sheZHOU;
  26. int xuannum = 0;

  27. boolean  she = false, xuan = false, sheDOWN = false, sheUP = false, sheSTA = false;
  28. /*-------timing----*/

  29. boolean BONGshiup = false, BONGshidown = true;                //定时按钮-时
  30. boolean BONGfenup = false, BONGfendown = false;                //定时按钮-分

  31. boolean DAOsetno =  false;                //定时-执行
  32. boolean DAOsetup =  false, DAOsetdown = false;        //定时

  33. boolean DAOtimesta = false;        //计时状态位

  34. int DAOsettime, DAOnomtime;                //所需定时(分钟)
  35. int DAOtimea, DAOtimeb;                //初始时间、时间差

  36. int DAOjishu = 0;                                //总计时间

  37. int DAOTIMEDT = 10;                        //定时

  38. int BONGsetshi, BONGsetfen, BONGnomshi, BONGnomfen;        //闹钟

  39. int TIMEEEP;                //设置检查EEPROM频率

  40. int TIMELCDa = 1, TIMELCDb = 1, TIMELCDc = 1, TIMELCDd = 1;

  41. int TIMEIR = 1;
  42. /*-------LCD------*/
  43. LiquidCrystal lcd(10 , 9, 8, 7, 6, 5);//设置接口

  44. boolean lcda = false;
  45. boolean lcdb = false;
  46. boolean lcdbsta = false;
  47. boolean lcdc = false;
  48. boolean lcdcsta = false;
  49. boolean lcdd = false;

  50. /*-------ir------*/
  51. int RECV_PIN = A0;                //红外输入

  52. int i;

  53. IRrecv irrecv(RECV_PIN);
  54. decode_results results;
  55. /*----BONGsta----*/
  56. boolean BONGsta = false, STARTbong = false, OK = false, BAD = false, STAclear = false,TESTsta = false;
  57. boolean a1, a2, a3;
  58. int TIMEhaha = 30;

  59. int SUIJI;

  60. int STAa, STAb, NUMbong, Clear = 0;

  61. int NUMdao = 9;

  62. int DAOmiao,DAOmin;


  63. void setup()
  64. {
  65.     Serial.begin(9600);

  66.     config_type config_readback;
  67.     EEPROM_read(0, config_readback);

  68.     DAOsettime = config_readback.EEPROMmin;
  69.     DAOnomtime = config_readback.EEPROMmin;
  70.     BONGsetshi = config_readback.EEPROMshi;
  71.     BONGsetfen = config_readback.EEPROMfen;
  72.     BONGnomshi = config_readback.EEPROMshi;
  73.     BONGnomfen = config_readback.EEPROMfen;

  74.     pinMode(DAO, OUTPUT); //C2
  75.     pinMode(BONG, OUTPUT); //C3

  76.     pinMode(A1, INPUT); //C3
  77.     pinMode(A2, INPUT); //C3
  78.     pinMode(A3, INPUT); //C3

  79.     lcd.begin(16, 2);                                 //初始化LCD
  80.     lcd.setCursor(0, 0) ;
  81.     lcd.print("BONG!Alarm Clock");       //显示文字
  82.     lcd.setCursor(0, 1) ;
  83.     lcd.print("-----By PKJ-----");       //显示文字
  84.     delay(2000);                                                 //延时

  85.     irrecv.enableIRIn();                                 //开始采集
  86. }


  87. void loop()
  88. {
  89.     SUIJI = random(1, 4);

  90.     a1 = digitalRead(A1);
  91.     a2 = digitalRead(A2);
  92.     a3 = digitalRead(A3);

  93.     digitalWrite(DAO, C2); //C2
  94.     digitalWrite(BONG, C3); //C3

  95.     xuan = false;
  96.     sheDOWN = false;
  97.     sheUP = false;

  98.     DAOsetno =  false;
  99.     DAOsetup =  false;
  100.     DAOsetdown = false;

  101.     BONGshiup =  false;
  102.     BONGshidown = false;
  103.     BONGfenup =  false;
  104.     BONGfendown = false;

  105.     /*==================Time======================*/
  106.     RTC.get(rtc, true);

  107.     timenian = rtc[6];
  108.     timeyue = rtc[5];
  109.     timeri = rtc[4];
  110.     timezhou = rtc[3];
  111.     timeshi = rtc[2];
  112.     timefen = rtc[1];
  113.     timemiao = rtc[0];


  114.     /*=================红外控制=================*/
  115.     if (irrecv.decode(&results))
  116.     {
  117.         voir();
  118.     }

  119.     /*==============End-红外控制=================*/


  120.         /*===============设置时钟================*/
  121.     /*--------------------时间范围-----------------*/        
  122.     if(sheNIAN <= 2000)
  123.     {
  124.         sheNIAN = 2000;
  125.     }

  126.     if(sheYUE > 12)
  127.     {
  128.         sheYUE = 1;
  129.     }
  130.     if(sheYUE < 1)
  131.     {
  132.         sheYUE = 12;
  133.     }

  134.     if(sheRI > 31)
  135.     {
  136.         sheRI = 1;
  137.     }
  138.     if(sheRI < 1)
  139.     {
  140.         sheRI = 31;
  141.     }

  142.     if (sheSHI > 23)
  143.     {
  144.         sheSHI = 0;
  145.     }
  146.     if (sheSHI < 0)
  147.     {
  148.         sheSHI = 23;
  149.     }

  150.     if (sheFEN > 59)
  151.     {
  152.         sheFEN = 0;
  153.     }
  154.     if (sheFEN < 0)
  155.     {
  156.         sheFEN = 59;
  157.     }

  158.     if (sheZHOU > 7)
  159.     {
  160.         sheZHOU = 1;
  161.     }
  162.     if (sheZHOU < 1)
  163.     {
  164.         sheZHOU = 7;
  165.     }

  166.     /*----------------end-时间范围-----------------*/        

  167.     if (she == true)
  168.     {
  169.         RTC.stop();
  170.         sheSTA = true;

  171.         if(xuan == true)
  172.         {
  173.             xuannum++;
  174.         }

  175.         if(xuannum >= 7)
  176.         {
  177.             xuannum = 1;
  178.         }

  179.         if(xuannum == 1)
  180.         {
  181.             if(sheUP == true)
  182.             {
  183.                 sheNIAN++;
  184.             }
  185.             if(sheDOWN == true)
  186.             {
  187.                 sheNIAN--;
  188.             }
  189.         }

  190.         if(xuannum == 2)
  191.         {
  192.             if(sheUP == true)
  193.             {
  194.                 sheYUE++;
  195.             }
  196.             if(sheDOWN == true)
  197.             {
  198.                 sheYUE--;
  199.             }
  200.         }

  201.         if(xuannum == 3)
  202.         {
  203.             if(sheUP == true)
  204.             {
  205.                 sheRI++;
  206.             }
  207.             if(sheDOWN == true)
  208.             {
  209.                 sheRI--;
  210.             }
  211.         }
  212.         if(xuannum == 4)
  213.         {
  214.             if(sheUP == true)
  215.             {
  216.                 sheSHI++;
  217.             }
  218.             if(sheDOWN == true)
  219.             {
  220.                 sheSHI--;
  221.             }
  222.         }

  223.         if(xuannum == 5)
  224.         {
  225.             if(sheUP == true)
  226.             {
  227.                 sheFEN++;
  228.             }
  229.             if(sheDOWN == true)
  230.             {
  231.                 sheFEN--;
  232.             }
  233.         }

  234.         if(xuannum == 6)
  235.         {
  236.             if(sheUP == true)
  237.             {
  238.                 sheZHOU++;
  239.             }
  240.             if(sheDOWN == true)
  241.             {
  242.                 sheZHOU--;
  243.             }
  244.         }

  245.     }

  246.     else
  247.     {
  248.         if(sheSTA == true)
  249.         {
  250.             Serial.println("--OK--");

  251.             RTC.set(DS1307_YR, sheNIAN);
  252.             RTC.set(DS1307_MTH, sheYUE);
  253.             RTC.set(DS1307_DATE, sheRI);
  254.             RTC.set(DS1307_HR, sheSHI);
  255.             RTC.set(DS1307_MIN, sheFEN);
  256.             RTC.set(DS1307_SEC, sheMIAO);
  257.             RTC.set(DS1307_DOW, sheZHOU);
  258.             RTC.start();
  259.             sheSTA = false;
  260.         }
  261.         xuannum = 0;
  262.     }

  263.         /*===============end-设置时钟============*/


  264.     /*==================BONGsta======================*/

  265.     if(STAclear == true)
  266.     {
  267.         if(timemiao != STAb)
  268.         {
  269.             Clear++;
  270.         }
  271.         if(Clear >= 10)
  272.         {
  273.             C2 = false;
  274.             C3 = false;
  275.             Clear = 0;
  276.             STAclear = false;
  277.         }
  278.     }

  279.     if(BONGsta == true && STARTbong == true)
  280.     {
  281.         if(TIMEhaha == 30)
  282.         {
  283.             NUMbong = SUIJI;
  284.         }

  285.         if(timemiao != STAa)
  286.         {
  287.             TIMEhaha--;
  288.             C2 = !C2;
  289.         }
  290.     }

  291.     if(TIMEhaha <= 0)
  292.     {
  293.         BAD = true;
  294.     }

  295.     if(BONGsta == true)
  296.         switch(NUMbong)
  297.         {
  298.         case 1:
  299.             Serial.print("                                 a1");
  300.             Serial.println("");
  301.             if(a1 == false && a2 == true && a3 == true)
  302.             {
  303.                 OK = true;
  304.                 Serial.print("                                 OK");
  305.                 Serial.println("");
  306.             }
  307.             else
  308.             {
  309.                 if(!(a1 == true && a2 == true && a3 == true))
  310.                 {
  311.                     BAD = true;
  312.                     Serial.print("                                 BONG");
  313.                     Serial.println("");
  314.                 }
  315.             }
  316.             ;
  317.             break;

  318.         case 2:
  319.             Serial.print("                                 a2");
  320.             Serial.println("");
  321.             if(a1 == true && a2 == false && a3 == true)
  322.             {
  323.                 OK = true;
  324.                 Serial.print("                                 OK");
  325.                 Serial.println("");
  326.             }
  327.             else
  328.             {
  329.                 if(!(a1 == true && a2 == true && a3 == true))
  330.                 {
  331.                     BAD = true;
  332.                     Serial.print("                                 BONG");
  333.                     Serial.println("");
  334.                 }
  335.             }
  336.             ;
  337.             break;

  338.         case 3:
  339.             Serial.print("                                 a3");
  340.             Serial.println("");
  341.             if(a1 == true && a2 == true && a3 == false)
  342.             {
  343.                 OK = true;
  344.                 Serial.print("                                 OK");
  345.                 Serial.println("");
  346.             }
  347.             else
  348.             {
  349.                 if(!(a1 == true && a2 == true && a3 == true))
  350.                 {
  351.                     BAD = true;
  352.                     Serial.print("                                 BONG");
  353.                     Serial.println("");
  354.                 }
  355.             }
  356.             ;
  357.             break;
  358.         }

  359.     STARTbong = false;

  360.     if(a1 == true && a2 == true && a3 == true)
  361.     {
  362.         STARTbong = true;
  363.     }

  364.         /*=================执行================*/
  365.     if(OK == true)
  366.     {
  367.         digitalWrite(BONG, 0); //C3
  368.         delay(600);
  369.         digitalWrite(BONG, 1); //C3
  370.         delay(550);
  371.         digitalWrite(BONG, 0); //C3
  372.         delay(500);
  373.         digitalWrite(BONG, 1); //C3
  374.         delay(450);
  375.         digitalWrite(BONG, 0); //C3
  376.         delay(400);
  377.         digitalWrite(BONG, 1); //C3
  378.         delay(350);
  379.         digitalWrite(BONG, 0); //C3
  380.         delay(300);
  381.         digitalWrite(BONG, 1); //C3
  382.         delay(250);
  383.         digitalWrite(BONG, 0); //C3
  384.         delay(200);
  385.         digitalWrite(BONG, 1); //C3
  386.         delay(150);
  387.         digitalWrite(BONG, 0); //C3
  388.         delay(150);
  389.         digitalWrite(BONG, 1); //C3
  390.         delay(150);
  391.         digitalWrite(BONG, 0); //C3
  392.         delay(150);
  393.         digitalWrite(BONG, 1); //C3
  394.         delay(150);
  395.         digitalWrite(BONG, 0); //C3
  396.         delay(150);
  397.         digitalWrite(BONG, 1); //C3
  398.         delay(150);
  399.         digitalWrite(BONG, 0); //C3
  400.         delay(150);
  401.         digitalWrite(BONG, 1); //C3
  402.         delay(150);
  403.         digitalWrite(BONG, 0); //C3

  404.         TIMEhaha = 30;

  405.         C3 = false;
  406.         C2 = false;
  407.         BONGsta = false;

  408.         STAclear = true;

  409.         OK = false;
  410.         Serial.print("                                 [OK]");
  411.         Serial.println("");
  412.     }

  413.     if(BAD == true)
  414.     {
  415.         digitalWrite(BONG, 0); //C3
  416.         delay(600);
  417.         digitalWrite(BONG, 1); //C3
  418.         delay(550);
  419.         digitalWrite(BONG, 0); //C3
  420.         delay(500);
  421.         digitalWrite(BONG, 1); //C3
  422.         delay(450);
  423.         digitalWrite(BONG, 0); //C3
  424.         delay(400);
  425.         digitalWrite(BONG, 1); //C3
  426.         delay(350);
  427.         digitalWrite(BONG, 0); //C3
  428.         delay(300);
  429.         digitalWrite(BONG, 1); //C3
  430.         delay(250);
  431.         digitalWrite(BONG, 0); //C3
  432.         delay(200);
  433.         digitalWrite(BONG, 1); //C3
  434.         delay(150);
  435.         digitalWrite(BONG, 0); //C3
  436.         delay(150);
  437.         digitalWrite(BONG, 1); //C3
  438.         delay(150);
  439.         digitalWrite(BONG, 0); //C3
  440.         delay(150);
  441.         digitalWrite(BONG, 1); //C3
  442.         delay(150);
  443.         digitalWrite(BONG, 0); //C3
  444.         delay(150);
  445.         digitalWrite(BONG, 1); //C3
  446.         delay(150);
  447.         digitalWrite(BONG, 0); //C3
  448.         delay(150);
  449.         digitalWrite(BONG, 1); //C3
  450.         delay(150);
  451.         digitalWrite(BONG, 0); //C3
  452.         delay(150);
  453.         digitalWrite(BONG, 1); //C3

  454.         TIMEhaha = 30;

  455.         BONGsta = false;
  456.         C2 = false;
  457.         C3 = true;

  458.         STAclear = true;

  459.         BAD = false;

  460.         Serial.print("                                 [BAD]");
  461.         Serial.println("");
  462.     }

  463.     delay(80);   

  464.     /*===============end-BONGsta================*/


  465.     /*================定时===================*/

  466.     if (BONGshiup == true)     //控制数值上升
  467.     {
  468.         BONGsetshi++;
  469.     }
  470.     if (BONGshidown == true)           //控制数值下降
  471.     {
  472.         BONGsetshi--;
  473.     }

  474.     if (BONGfenup == true)     //控制数值上升
  475.     {
  476.         BONGsetfen++;
  477.     }
  478.     if (BONGfendown == true)           //控制数值下降
  479.     {
  480.         BONGsetfen--;
  481.     }

  482.     if (BONGsetshi > 23)
  483.     {
  484.         BONGsetshi = 0;
  485.     }
  486.     if (BONGsetshi < 0)
  487.     {
  488.         BONGsetshi = 23;
  489.     }
  490.     if (BONGsetfen > 59)
  491.     {
  492.         BONGsetfen = 0;
  493.     }
  494.     if (BONGsetfen < 0)
  495.     {
  496.         BONGsetfen = 59;
  497.     }

  498.     if(timeshi == BONGsetshi && timefen == (BONGsetfen-1) && timemiao == 30)
  499.     {
  500.         BONGsta = true;
  501.         delay(1000);
  502.     }

  503.     if(TESTsta == true)
  504.     {
  505.         BONGsta = true;
  506.         delay(1000);
  507.         TESTsta = false;
  508.     }

  509.     /*================end-定时===================*/


  510.     /*================倒计时===================*/

  511.     if (DAOsetup == true && DAOtimesta == false)     //控制数值上升
  512.     {
  513.         DAOsettime++;
  514.     }
  515.     if (DAOsetdown == true && DAOtimesta == false)           //控制数值下降
  516.     {
  517.         DAOsettime--;
  518.     }

  519.     if (DAOsettime > 30)
  520.     {
  521.         DAOsettime = 1;
  522.     }
  523.     if (DAOsettime < 1)
  524.     {
  525.         DAOsettime = 30;
  526.     }


  527.     if (DAOsetno == true && (DAOtimesta == false && C2 == false) && STAclear == false && BONGsta == false)          //C2为零时可触发计时
  528.     {
  529.         delay(20);
  530.         C2 = true;                                //开始烧水
  531.         DAOtimea = timemiao;                //计时起始位
  532.         DAOtimeb = 0;                        //十秒清零
  533.         DAOjishu = 0;                        //计数清零
  534.         DAOtimesta = true;                  //开始计时
  535.     }

  536.     else if (DAOsetno == true && (DAOtimesta == true || C2 == true))          //C2为1时或计时开始后,再次触发则停止计时、
  537.     {
  538.         delay(20);
  539.         C2 = false;
  540.         DAOtimesta = false;                  //停止计时
  541.     }

  542.     if(DAOtimesta == true)
  543.     {
  544.         if(DAOtimea >= 49)                  //以十秒为基数统计
  545.         {
  546.             if(timemiao <= 59 && timemiao >= 49)
  547.             {
  548.                 DAOtimeb = timemiao - DAOtimea;
  549.             }
  550.             if(timemiao >= 0 && timemiao <= 9)
  551.             {
  552.                 DAOtimeb = 60 + timemiao - DAOtimea;
  553.             }
  554.         }

  555.         else
  556.         {
  557.             DAOtimeb = timemiao - DAOtimea;        //49秒以下正常计数
  558.         }

  559.     }

  560.     if(DAOtimeb >= 10)                          //十秒计时完毕后
  561.     {
  562.         DAOjishu++;                //以计时值得到总时间
  563.         DAOtimeb = 0;                                //归零
  564.         DAOtimea = timemiao;                //开始新一轮计时
  565.     }

  566.     if(DAOsettime <= DAOjishu/6)          //大于设置值
  567.     {
  568.         DAOtimesta = false;                      //停止计时
  569.         C2 = false;                                //停止
  570.     }

  571.     if(DAOtimesta == false)          //必要的清零
  572.     {
  573.         DAOtimeb = 0;
  574.         DAOjishu = 0;
  575.     }

  576.     DAOmin=((DAOsettime * 6 - DAOjishu)-1) / 6;

  577.     DAOmiao=((DAOsettime * 6 - DAOjishu)-1) % 6;

  578.     if(DAOtimesta == true)
  579.     {
  580.         if(timemiao != STAa)
  581.         {
  582.             C2 = !C2;
  583.             NUMdao--;
  584.         }
  585.         if(NUMdao<0)
  586.         {
  587.         NUMdao=9;
  588.         }
  589.     }
  590.     else
  591.     {
  592.     NUMdao=9;
  593.     }

  594.     /*=============End-倒计时===================*/



  595.     /*==================EEPROM==================*/
  596.     if (TIMEEEP <= 10)                          //设置EEPROM检查刷新频率
  597.     {
  598.         TIMEEEP++;
  599.     }

  600.     else
  601.     {
  602.         if((BONGnomshi != BONGsetshi) || (BONGnomfen != BONGsetfen) || (DAOsettime != DAOnomtime))
  603.         {
  604.             eeprom_test();
  605.             BONGnomshi = BONGsetshi;
  606.             BONGnomfen = BONGsetfen;
  607.             DAOnomtime = DAOsettime;
  608.         }
  609.     }

  610.     /*================endEEPROM================*/


  611.     /*==================显示===================*/

  612.     {
  613.         if(DAOsetup == true || DAOsetdown == true)                  //触发
  614.         {
  615.             TIMELCDa = 1;
  616.             lcda = true;
  617.         }

  618.         if(lcda == true)
  619.         {
  620.             volcda();
  621.         }
  622.         /*--------------------------------------------------------*/


  623.         /*--------------------------------------------------------*/

  624.         if(BONGshiup == true || BONGshidown == true || BONGfendown == true || BONGfenup == true)                  //触发
  625.         {
  626.             TIMELCDd = 1;
  627.             lcdd = true;
  628.         }

  629.         if(lcdd == true)
  630.         {
  631.             volcdd();
  632.         }

  633.         /*--------------------------------------------------------*/

  634.         voLCD();

  635.     }

  636.     STAb = timemiao;
  637.     STAa = timemiao;
  638.     /*===============End-显示===================*/

  639.     Serial.print("                    TIMEhaha:");
  640.     Serial.print(TIMEhaha);
  641.     Serial.println("");

  642.     Serial.print("                    BONGsta:");
  643.     Serial.print(BONGsta);
  644.     Serial.println("");

  645.     Serial.print("                                              Clear: ");
  646.     Serial.print(Clear);
  647.     Serial.println("");

  648.     Serial.print("                                 NUMbong: ");
  649.     Serial.print(NUMbong);
  650.     Serial.println("");

  651.     Serial.print("                                 STARTbong: ");
  652.     Serial.print(STARTbong);
  653.     Serial.println("");

  654.     Serial.print("                                 OK: ");
  655.     Serial.print(OK);
  656.     Serial.println("");

  657.     Serial.print("                                 BAD: ");
  658.     Serial.print(BAD);
  659.     Serial.println("");



  660. }


  661. void volcda()
  662. {
  663.     if (TIMELCDa <= 12 && lcda == true)                          //设置刷新频率
  664.     {
  665.         TIMELCDa++;
  666.     }

  667.     else
  668.     {
  669.         lcda = false;
  670.         TIMELCDa = 1;
  671.     }
  672. }


  673. void volcdd()
  674. {
  675.     if (TIMELCDd <= 20 && lcdd == true)                          //设置刷新频率
  676.     {
  677.         TIMELCDd++;
  678.     }

  679.     else
  680.     {
  681.         lcdd = false;
  682.         TIMELCDd = 1;
  683.     }
  684. }


  685. void voLCD()
  686. {
  687.     lcd.clear();                                                //清屏

  688.     /*-----------------------显示时间---------------------*/
  689.     lcd.setCursor(0, 0) ;
  690.     lcd.print(timenian);
  691.     lcd.print("-");
  692.     if(timeyue <= 9)
  693.     {
  694.         lcd.print("0");
  695.         lcd.print(timeyue);
  696.     }
  697.     else
  698.     {
  699.         lcd.print(timeyue);
  700.     }
  701.     lcd.print("-");
  702.     if(timeri <= 9)
  703.     {
  704.         lcd.print("0");
  705.         lcd.print(timeri);
  706.     }
  707.     else
  708.     {
  709.         lcd.print(timeri);
  710.     }
  711.     lcd.print(" ");

  712.     lcd.setCursor(11, 0) ;
  713.     if(timeshi <= 9)
  714.     {
  715.         lcd.print("0");
  716.         lcd.print(timeshi);
  717.     }
  718.     else
  719.     {
  720.         lcd.print(timeshi);
  721.     }
  722.     lcd.setCursor(13, 0) ;
  723.     if(timemiao % 2 == 0)
  724.     {
  725.         lcd.print(":");
  726.     }
  727.     else
  728.     {
  729.         lcd.print(" ");
  730.     }
  731.     lcd.setCursor(14, 0) ;
  732.     if(timefen <= 9)
  733.     {
  734.         lcd.print("0");
  735.         lcd.print(timefen);
  736.     }
  737.     else
  738.     {
  739.         lcd.print(timefen);
  740.     }


  741.     /*---------------sheTIME----------------*/
  742.     if(she == false)
  743.     {
  744.         lcd.setCursor(0, 1) ;
  745.         lcd.print("Set Time : ");
  746.     }
  747.     else
  748.     {
  749.         switch(xuannum)
  750.         {
  751.         case 0:
  752.             lcd.setCursor(0, 1) ;
  753.             lcd.print("Switch[0]");
  754.             break;
  755.         case 1:
  756.             lcd.setCursor(0, 1) ;
  757.             lcd.print("YEAR:");
  758.             lcd.print(sheNIAN);
  759.             break;
  760.         case 2:
  761.             lcd.setCursor(0, 1) ;
  762.             lcd.print("MON.:");
  763.             lcd.print(sheYUE);
  764.             break;
  765.         case 3:
  766.             lcd.setCursor(0, 1) ;
  767.             lcd.print("DATA:");
  768.             lcd.print(sheRI);
  769.             break;
  770.         case 4:
  771.             lcd.setCursor(0, 1) ;
  772.             lcd.print("HOUR:");
  773.             lcd.print(sheSHI);
  774.             break;
  775.         case 5:
  776.             lcd.setCursor(0, 1) ;
  777.             lcd.print("MIN.:");
  778.             lcd.print(sheFEN);
  779.             break;
  780.         case 6:
  781.             lcd.setCursor(0, 1) ;
  782.             lcd.print("WEEK:");
  783.             lcd.print(sheZHOU);
  784.             break;
  785.         }
  786.     }
  787.     /*--------------------------------------------------------*/
  788.     lcd.setCursor(11, 1) ;
  789.     if(BONGsetshi <= 9)
  790.     {
  791.         lcd.print("0");
  792.         lcd.print(BONGsetshi);
  793.     }
  794.     else
  795.     {
  796.         lcd.print(BONGsetshi);
  797.     }
  798.     lcd.setCursor(13, 1) ;
  799.     lcd.print(":");
  800.     lcd.setCursor(14, 1) ;
  801.     if(BONGsetfen <= 9)
  802.     {
  803.         lcd.print("0");
  804.         lcd.print(BONGsetfen);
  805.     }
  806.     else
  807.     {
  808.         lcd.print(BONGsetfen);
  809.     }

  810.     /*-------------------------STABONG--------------------------------*/

  811.     if(STAclear == true)
  812.     {
  813.         lcd.setCursor(0, 1) ;
  814.         if(timemiao % 2 == 0)
  815.         {
  816.             if(C3 == true)
  817.             {
  818.                 lcd.print("!!!!!!BONG!!!!!!");
  819.             }
  820.             else
  821.             {
  822.                 lcd.print("^_^^_^Clean^_^^_^");
  823.             }
  824.         }
  825.         else
  826.         {
  827.             lcd.print("                ");
  828.         }

  829.     }

  830.     /*------------------------设置二路时间----------------------------*/
  831.     if (lcda == true)
  832.     {
  833.         lcd.setCursor(10, 1) ;
  834.         lcd.print("[");
  835.         if(DAOsettime <= 9)
  836.         {
  837.             lcd.print("0");
  838.             lcd.setCursor(11, 1) ;
  839.         }
  840.         else
  841.         {
  842.             lcd.setCursor(10, 1) ;
  843.         }
  844.         lcd.print(DAOsettime);
  845.         lcd.setCursor(12, 1) ;
  846.         lcd.print("min] ");
  847.     }

  848.     /*----------------------显示设置3路时间--------------------------*/

  849.     if (lcdd == true)
  850.     {
  851.         lcd.setCursor(10, 1) ;
  852.         lcd.print("=");
  853.         lcd.setCursor(11, 1) ;
  854.         if(BONGsetshi <= 9)
  855.         {
  856.             lcd.print("0");
  857.             lcd.print(BONGsetshi);
  858.         }
  859.         else
  860.         {
  861.             lcd.print(BONGsetshi);
  862.         }
  863.         lcd.setCursor(13, 1) ;
  864.         lcd.print(":");
  865.         lcd.setCursor(14, 1) ;
  866.         if(BONGsetfen <= 9)
  867.         {
  868.             lcd.print("0");
  869.             lcd.print(BONGsetfen);
  870.         }
  871.         else
  872.         {
  873.             lcd.print(BONGsetfen);
  874.         }
  875.     }

  876.     /*------------------------二路倒计时---------------------------*/
  877.     if(DAOtimesta == true)
  878.     {
  879.         lcd.setCursor(0, 1) ;
  880.         lcd.print("Remaining: ");
  881.         if(DAOmin <= 9)
  882.         {
  883.             lcd.print("0");
  884.             lcd.setCursor(12, 1) ;
  885.         }
  886.         else
  887.         {
  888.             lcd.setCursor(11, 1) ;
  889.         }
  890.         lcd.print(DAOmin);
  891.         lcd.setCursor(13, 1) ;
  892.         lcd.print(":");

  893.             lcd.setCursor(14, 1) ;
  894.                         lcd.print(DAOmiao);
  895.                         lcd.print(NUMdao);
  896.     }

  897.     if(BONGsta == true)
  898.     {
  899.         if(STARTbong == false && BAD == false && OK == false)
  900.         {
  901.             lcd.setCursor(0, 1) ;
  902.             lcd.print("     NO-READY   ");
  903.             delay(1200);
  904.             BONGsta = false;
  905.         }
  906.         lcd.setCursor(0, 1) ;
  907.         lcd.print("Left:[");
  908.         if(TIMEhaha <= 9)
  909.         {
  910.             lcd.print("0");
  911.             lcd.print(TIMEhaha);
  912.         }
  913.         else
  914.         {
  915.             lcd.print(TIMEhaha);
  916.         }
  917.         lcd.print("s] ");
  918.     }
  919. }


  920. void voir()
  921. {
  922.     unsigned long remote = results.value;                //设红外信号为remote

  923.     if(remote == (-1))          //溢出时
  924.     {
  925.         Serial.print("irCode: ");
  926.         Serial.print(results.value, HEX);   //输出红外线解码结果(十六进制)
  927.         Serial.print(",  bits: ");
  928.         Serial.println(results.bits);
  929.     }
  930.     switch (remote)
  931.     {
  932.     case 0xFF629D:                //CH   -开始定时
  933.         DAOsetno = true;
  934.         delay(10);
  935.         break;

  936.     case 0xFFE21D:                //CH+   -定时设置
  937.         DAOsetup = true;
  938.         delay(10);
  939.         break;

  940.     case 0xFFA25D:                //CH-   -定时设置
  941.         DAOsetdown = true;
  942.         delay(10);
  943.         break;

  944.     case 0xFF02FD:                //NEXT  -闹钟设置
  945.         BONGfenup = true;
  946.         delay(10);
  947.         break;

  948.     case 0xFF22DD:                //PREV  -闹钟设置
  949.         BONGfendown = true;
  950.         delay(10);
  951.         break;

  952.     case 0xFFA857:                //+  -闹钟设置
  953.         BONGshiup = true;
  954.         delay(10);
  955.         break;

  956.     case 0xFFE01F:                //-   -闹钟设置
  957.         BONGshidown = true;
  958.         delay(10);
  959.         break;

  960.     case 0xFF906F:                //EQ   -更改系统时钟
  961.         she = !she;
  962.         if(sheSTA == false)
  963.         {
  964.             sheNIAN = timenian;
  965.             sheYUE = timeyue;
  966.             sheRI = timeri;
  967.             sheSHI = timeshi;
  968.             sheFEN = timefen;
  969.             sheMIAO = timemiao;
  970.             sheZHOU = timezhou;
  971.         }
  972.         delay(10);
  973.         break;

  974.     case 0xFF6897:                //0   -切换时钟设置菜单
  975.         xuan = true;
  976.         delay(10);
  977.         break;
  978.     case 0xFF9867:                //100+   -调整系统时钟
  979.         sheDOWN = true;
  980.         delay(10);
  981.         break;
  982.     case 0xFFB04F:                //200+   -调整系统时钟
  983.         sheUP = true;
  984.         delay(10);
  985.         break;

  986.     case 0xFFC23D:                //PLAY   -用以测试倒计时
  987.         TESTsta = true;
  988.         delay(10);
  989.         break;

  990.     }
  991.     /*--------------------------------*/

  992.     irrecv.resume();                 // 返回值
  993. }


  994. void eeprom_test()
  995. {
  996.     config_type config;                  // 定义结构变量config,并定义config的内容
  997.     config.EEPROMshi = BONGsetshi;
  998.     config.EEPROMfen = BONGsetfen;
  999.     config.EEPROMmin = DAOsettime;

  1000.     EEPROM_write(0, config);         // 变量config存储到EEPROM,地址0写入
  1001. }
复制代码

libraries.rar (69.24 KB, 下载次数: 1)
回复

使用道具 举报

大神点评1

小泥渣 2017-2-16 19:33 显示全部楼层
1181行,厉害了
回复 支持 反对

使用道具 举报

您可能感兴趣的文章

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

关注0

粉丝0

帖子10

发布主题
社区热门 MORE+
    社区热帖 MORE+