极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5332|回复: 3

有關Arduino自訂控制重覆的次數

[复制链接]
发表于 2012-4-13 11:05:13 | 显示全部楼层 |阅读模式
這一個程式是可以不斷地重覆的,
但希望可以自訂控制重覆的次數,
請問各位大大有沒有方法?
謝謝了! (_ _)
  1. // these arrays store timer data
  2. // on hour, on minute, off hour, off minute, day of week [1-7 Sun>Sat, 8 = daily, 9 = weekends, 10 = weekdays], on/off (0 off 1 on)
  3. int t1224 = 0; // set later on in function mset1224()
  4. int alarmon = 0; // 0 for off, 1 for on
  5. int alarmh = 12; // alarm hour
  6. int alarmm = 00; // alarm minute

  7. int t1[7]= {
  8.   0,0,0,0,0,0,0};
  9. int d1[7]= {
  10.   0,0,0,0,0,0,0};
  11. int t2[7]= {
  12.   0,0,0,0,0,0,0};
  13. int d2[7]= {
  14.   0,0,0,0,0,0,0};
  15. int dd=1000; // used for delay in show timer data

  16. #include "Wire.h"
  17. #define DS1307_I2C_ADDRESS 0x68
  18. #include <LiquidCrystal.h> // we need this library for the LCD commands
  19. LiquidCrystal lcd(12,11,5,4,3,2);

  20. // Convert normal decimal numbers to binary coded decimal
  21. byte decToBcd(byte val)
  22. {
  23.   return ( (val/10*16) + (val%10) );
  24. }

  25. // Convert binary coded decimal to normal decimal numbers
  26. byte bcdToDec(byte val)
  27. {
  28.   return ( (val/16*10) + (val%16) );
  29. }

  30. // 1) Sets the date and time on the ds1307
  31. // 2) Starts the clock
  32. // 3) Sets hour mode to 24 hour clock

  33. // Assumes you're passing in valid numbers

  34. void setDateDs1307(byte second,        // 0-59
  35. byte minute,        // 0-59
  36. byte hour,          // 1-23
  37. byte dayOfWeek,     // 1-7
  38. byte dayOfMonth,    // 1-28/29/30/31
  39. byte month,         // 1-12
  40. byte year)          // 0-99
  41. {
  42.   Wire.beginTransmission(DS1307_I2C_ADDRESS);
  43.   Wire.send(0);
  44.   Wire.send(decToBcd(second));    // 0 to bit 7 starts the clock
  45.   Wire.send(decToBcd(minute));
  46.   Wire.send(decToBcd(hour));     
  47.   Wire.send(decToBcd(dayOfWeek));
  48.   Wire.send(decToBcd(dayOfMonth));
  49.   Wire.send(decToBcd(month));
  50.   Wire.send(decToBcd(year));
  51.   Wire.send(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
  52.   Wire.endTransmission();
  53. }

  54. // Gets the date and time from the ds1307
  55. void getDateDs1307(byte *second,
  56. byte *minute,
  57. byte *hour,
  58. byte *dayOfWeek,
  59. byte *dayOfMonth,
  60. byte *month,
  61. byte *year)
  62. {
  63.   // Reset the register pointer
  64.   Wire.beginTransmission(DS1307_I2C_ADDRESS);
  65.   Wire.send(0);
  66.   Wire.endTransmission();

  67.   Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  68.   // A few of these need masks because certain bits are control bits
  69.   *second     = bcdToDec(Wire.receive() & 0x7f);
  70.   *minute     = bcdToDec(Wire.receive());
  71.   *hour       = bcdToDec(Wire.receive() & 0x3f);  // Need to change this if 12 hour am/pm
  72.   *dayOfWeek  = bcdToDec(Wire.receive());
  73.   *dayOfMonth = bcdToDec(Wire.receive());
  74.   *month      = bcdToDec(Wire.receive());
  75.   *year       = bcdToDec(Wire.receive());
  76. }

  77. int readdial(int rangemax, int dialpin)
  78. // rangemax is the number of values in your range, e.g. if you want 0~9, set rangemax to be '10'
  79. // dialpin is the analog pin number connected to the potentiometer to read
  80. {
  81.   int kv=0;
  82.   int kr=0;
  83.   int kb=0;
  84.   float a=0;
  85.   float rd=0;
  86.   rd=1023/rangemax;
  87.   kb=analogRead(dialpin); // read potentiometer connected to analog pin 1
  88.   a=kb/rd;
  89.   kr=int(a);
  90.   if (kr>rangemax)
  91.   {
  92.     kr=rangemax;
  93.   }
  94.   return kr;
  95. }

  96. void displaymenu()
  97. // display the menu options, selectable by using the knob
  98. {
  99.   delay(300); // for debounce
  100.   lcd.clear();  
  101.   lcd.setCursor(0,0);
  102.   lcd.print("Turn knob slowly");
  103.   lcd.setCursor(0,1);
  104.   lcd.print("to select option");
  105.   while (digitalRead(8)==LOW)
  106.   {
  107.     if      (readdial(6,0)==0) {
  108.       lcd.clear();  
  109.       lcd.setCursor(0,0);
  110.       lcd.print("Show timer data");
  111.     }
  112.         else if (readdial(6,0)==1) {
  113.       lcd.clear();  
  114.       lcd.setCursor(0,0);
  115.       lcd.print("Set timer 1");
  116.     }
  117.         else if (readdial(6,0)==2) {
  118.       lcd.clear();  
  119.       lcd.setCursor(0,0);
  120.       lcd.print("Set timer 2");
  121.     }
  122.     else if (readdial(6,0)==3) {
  123.       lcd.clear();  
  124.       lcd.setCursor(0,0);
  125.       lcd.print("Timers on/off");
  126.     }
  127.     else if (readdial(6,0)==4) {
  128.       lcd.clear();  
  129.       lcd.setCursor(0,0);
  130.       lcd.print(" 12 or 24h time?");
  131.     }
  132.     else if (readdial(6,0)==5) {
  133.       lcd.clear();  
  134.       lcd.setCursor(0,0);
  135.       lcd.print("Set time and day");
  136.     }
  137.     else if (readdial(6,0)==6) {
  138.       lcd.clear();  
  139.       lcd.setCursor(0,0);
  140.       lcd.print("exit menu");
  141.     }
  142.     delay(100); // stop screen flicker
  143.   }

  144.   switch(readdial(6,0))
  145.   {
  146.   case 0:
  147.     displaytimerdata();  // done, untested
  148.     break;
  149.   case 1:
  150.     msetalarm1();
  151.     break;
  152.   case 2:
  153.     msetalarm2();
  154.     break;
  155.   case 3:
  156.     timeronoff(); // done, untested
  157.     break;
  158.   case 4:
  159.     mset1224();
  160.     break;
  161.   case 5:
  162.     settimeday(); // done, untested
  163.     break;
  164.   }
  165.   // if the knob is 5, that is for return to clock display. function will end and return to clock by default
  166. }

  167. void mset1224()
  168. //  allows user to select between displaying 12 and 24 hour time
  169. {
  170.   delay(300); // for debounce
  171.   lcd.clear();  
  172.   lcd.setCursor(0,0);
  173.   lcd.print("Turn knob slowly");
  174.   lcd.setCursor(0,1);
  175.   lcd.print("to select option");
  176.   while (digitalRead(8)==LOW)
  177.   {
  178.     if      (readdial(2,0)==0) {
  179.       lcd.clear();  
  180.       lcd.setCursor(0,0);
  181.       lcd.print("  12-hour time  ");
  182.     }
  183.     else if (readdial(2,0)==1) {
  184.       lcd.clear();  
  185.       lcd.setCursor(0,0);
  186.       lcd.print("  24-hour time  ");
  187.     }
  188.     delay(100); // stop screen flicker
  189.   }
  190.   switch(readdial(2,0))
  191.   {
  192.   case 0:
  193.     t1224=0;
  194.     break;
  195.   case 1:
  196.     t1224=1;
  197.     break;
  198.   }
  199. }

  200. void displaytimerdata()
  201. // scrolls through settings for the timers
  202. {
  203.   lcd.clear(); // clear LCD screen
  204.   lcd.setCursor(0,0);
  205.   lcd.print(" Timer One: ");
  206.   if (t1[5]==0)
  207.   {
  208.     lcd.print("Off");
  209.   }
  210.   else if (t1[5]==1)
  211.   {
  212.     lcd.print("On");
  213.   }
  214.   lcd.setCursor(0,1);
  215.   lcd.print("On: ");
  216.   if (t1[0]<10)
  217.   {
  218.     lcd.print("0");
  219.   }
  220.   lcd.print(t1[0]);
  221.   if (t1[1]<10)
  222.   {
  223.     lcd.print("0");
  224.   }
  225.   lcd.print(d1[1]);
  226.   lcd.print("h");
  227.   delay(dd);
  228.   lcd.setCursor(0,1);
  229.   lcd.print("                ");
  230.   lcd.setCursor(0,1);
  231.   lcd.print("Off: ");
  232.   if (t1[2]<10)
  233.   {
  234.     lcd.print("0");
  235.   }
  236.   lcd.print(t1[2]);
  237.   if (t1[3]<10)
  238.   {
  239.     lcd.print("0");
  240.   }
  241.   lcd.print(t1[3]);
  242.   lcd.print("h");
  243.   delay(dd);
  244.   lcd.setCursor(0,1);
  245.   lcd.print("                ");
  246.   lcd.setCursor(0,1);  
  247.   lcd.print("Freq: ");
  248.   switch(t1[4])
  249.   {
  250.   case 1:
  251.     lcd.print("Sundays");
  252.     break;
  253.   case 2:
  254.     lcd.print("Mondays");
  255.     break;
  256.   case 3:
  257.     lcd.print("Tuesdays");
  258.     break;
  259.   case 4:
  260.     lcd.print("Wed'days");
  261.     break;
  262.   case 5:
  263.     lcd.print("Thursdays");
  264.     break;
  265.   case 6:
  266.     lcd.print("Fridays");
  267.     break;
  268.   case 7:
  269.     lcd.print("Saturdays");
  270.     break;
  271.   case 8:
  272.     lcd.print("Daily");
  273.     break;
  274.   case 9:
  275.     lcd.print("Weekends");
  276.     break;
  277.   case 10:
  278.     lcd.print("Weekdays");
  279.     break;
  280.   }
  281.   delay(dd);
  282.   lcd.clear(); // clear LCD screen
  283.   lcd.setCursor(0,0);
  284.   lcd.print(" Timer Two: ");
  285.   if (t2[5]==0)
  286.   {
  287.     lcd.print("Off");
  288.   }
  289.   else if (t2[5]==1)
  290.   {
  291.     lcd.print("On");
  292.   }
  293.   lcd.setCursor(0,1);
  294.   lcd.print("On: ");
  295.   if (t2[0]<10)
  296.   {
  297.     lcd.print("0");
  298.   }
  299.   lcd.print(t2[0]);
  300.   if (t2[1]<10)
  301.   {
  302.     lcd.print("0");
  303.   }
  304.   lcd.print(d2[1]);
  305.   lcd.print("h");
  306.   delay(dd);
  307.   lcd.setCursor(0,1);
  308.   lcd.print("                ");
  309.   lcd.setCursor(0,1);
  310.   lcd.print("Off: ");
  311.   if (t2[2]<10)
  312.   {
  313.     lcd.print("0");
  314.   }
  315.   lcd.print(t2[2]);
  316.   if (t2[3]<10)
  317.   {
  318.     lcd.print("0");
  319.   }
  320.   lcd.print(t2[3]);
  321.   lcd.print("h");
  322.   delay(dd);
  323.   lcd.setCursor(0,1);
  324.   lcd.print("                ");
  325.   lcd.setCursor(0,1);  
  326.   lcd.print("Freq: ");
  327.   switch(t2[4])
  328.   {
  329.   case 1:
  330.     lcd.print("Sundays");
  331.     break;
  332.   case 2:
  333.     lcd.print("Mondays");
  334.     break;
  335.   case 3:
  336.     lcd.print("Tuesdays");
  337.     break;
  338.   case 4:
  339.     lcd.print("Wed'days");
  340.     break;
  341.   case 5:
  342.     lcd.print("Thursdays");
  343.     break;
  344.   case 6:
  345.     lcd.print("Fridays");
  346.     break;
  347.   case 7:
  348.     lcd.print("Saturdays");
  349.     break;
  350.   case 8:
  351.     lcd.print("Daily");
  352.     break;
  353.   case 9:
  354.     lcd.print("Weekends");
  355.     break;
  356.   case 10:
  357.     lcd.print("Weekdays");
  358.     break;
  359.   }
  360.   delay(dd);

  361. }

  362. void timeronoff()
  363. //  allows user to turn timers on or off
  364. {
  365.   delay(300); // for debounce
  366.   lcd.clear();  
  367.   lcd.setCursor(0,0);
  368.   lcd.print("Turn knob slowly");
  369.   lcd.setCursor(0,1);
  370.   lcd.print("to select option");
  371.   while (digitalRead(8)==LOW)
  372.   {
  373.     if      (readdial(2,0)==0) {
  374.       lcd.clear();  
  375.       lcd.setCursor(0,0);
  376.       lcd.print(" Timer 1: Off    ");
  377.     }
  378.     else if (readdial(2,0)==1) {
  379.       lcd.clear();  
  380.       lcd.setCursor(0,0);
  381.       lcd.print(" Timer 1: On     ");
  382.     }
  383.     delay(100); // stop screen flicker
  384.   }
  385.   switch(readdial(2,0))
  386.   {
  387.   case 0:
  388.     t1[5]=0;
  389.     break;
  390.   case 1:
  391.     t1[5]=1;
  392.     break;
  393.   }
  394.   delay(300); // for debounce
  395.   while (digitalRead(8)==LOW)
  396.   {
  397.     if      (readdial(2,0)==0) {
  398.       lcd.clear();  
  399.       lcd.setCursor(0,0);
  400.       lcd.print(" Timer 2: Off    ");
  401.     }
  402.     else if (readdial(2,0)==1) {
  403.       lcd.clear();  
  404.       lcd.setCursor(0,0);
  405.       lcd.print(" Timer 2: On     ");
  406.     }
  407.     delay(100); // stop screen flicker
  408.   }
  409.   switch(readdial(2,0))
  410.   {
  411.   case 0:
  412.     t2[5]=0;
  413.     break;
  414.   case 1:
  415.     t2[5]=1;
  416.     break;
  417.   }

  418. }

  419. void settimeday()
  420. // allows user to set current time and day of week, e.g. 1234h, Sunday
  421. {
  422.   msethours();
  423.   delay(300); // for debounce
  424.   msetminutes();
  425.   delay(300); // for debounce
  426.   msetdayofweek();
  427.   delay(300); // for debounce  
  428. }

  429. void msethours()
  430. //  allows user to select hour value
  431. {
  432.   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  433.   delay(300); // for debounce
  434.   lcd.clear();  
  435.   lcd.setCursor(0,0);
  436.   lcd.print("Select hour:0~23");
  437.   while (digitalRead(8)==LOW)
  438.   {
  439.     lcd.setCursor(8,1);
  440.     lcd.print("     ");   
  441.     lcd.setCursor(8,1);
  442.     lcd.print(readdial(24,0));
  443.     delay(100);
  444.   }
  445.   getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  446.   hour=readdial(24,0);
  447.   setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
  448.   d1[0]=hour;
  449.   d2[0]=hour;
  450. }

  451. void msetminutes()
  452. //  allows user to select minute value
  453. {
  454.   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  455.   delay(300); // for debounce
  456.   lcd.clear();  
  457.   lcd.setCursor(0,0);
  458.   lcd.print("Set minute:0~59");
  459.   while (digitalRead(8)==LOW)
  460.   {
  461.     lcd.setCursor(8,1);
  462.     lcd.print("     ");   
  463.     lcd.setCursor(8,1);
  464.     lcd.print(readdial(60,0));
  465.     delay(100);
  466.   }
  467.   getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  468.   minute=readdial(60,0);
  469.   setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
  470.   d1[1]=minute;
  471.   d2[1]=minute;
  472. }

  473. void msetdayofweek()
  474. //  allows user to set day of week
  475. {
  476.   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  477.   delay(300); // for debounce
  478.   lcd.clear();  
  479.   lcd.setCursor(0,0);
  480.   lcd.print(" Set day of week");
  481.   while (digitalRead(8)==LOW)
  482.   {
  483.     lcd.setCursor(0,1);
  484.     lcd.print("                ");   
  485.     lcd.setCursor(0,1);
  486.     switch(readdial(7,0))
  487.     {
  488.     case 1:
  489.       lcd.print("Sunday");
  490.       break;
  491.     case 2:
  492.       lcd.print("Monday");
  493.       break;
  494.     case 3:
  495.       lcd.print("Tuesday");
  496.       break;
  497.     case 4:
  498.       lcd.print("Wednesday");
  499.       break;
  500.     case 5:
  501.       lcd.print("Thursday");
  502.       break;
  503.     case 6:
  504.       lcd.print("Friday");
  505.       break;
  506.     case 7:
  507.       lcd.print("Saturday");
  508.       break;
  509.     }
  510.     delay(100);
  511.   }
  512.   getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  513.   dayOfWeek=readdial(7,0);
  514.   setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
  515. }

  516. void msetalarm1()
  517. //  allows user to select timer one on/off times and calendar options
  518. {
  519.   // set on hour
  520.   delay(300); // for debounce
  521.   lcd.clear();  
  522.   lcd.setCursor(0,0);
  523.   lcd.print("d1 eat every hour: 0~23");
  524.   while (digitalRead(8)==LOW)
  525.   {
  526.     lcd.setCursor(8,1);
  527.     lcd.print("     ");   
  528.     lcd.setCursor(8,1);
  529.     lcd.print(readdial(24,0));
  530.     delay(100);
  531.   }
  532.   t1[0]=readdial(24,0);
  533.   d1[0]=d1[0]+t1[0];
  534.   // set on minute
  535.   delay(300); // for debounce
  536.   lcd.clear();  
  537.   lcd.setCursor(0,0);
  538.   lcd.print("D1 eat every mins: 0~59");
  539.   while (digitalRead(8)==LOW)
  540.   {
  541.     lcd.setCursor(8,1);
  542.     lcd.print("     ");   
  543.     lcd.setCursor(8,1);
  544.     lcd.print(readdial(60,0));
  545.     delay(100);
  546.   }
  547.   t1[1]=readdial(60,0);
  548.   d1[1]=d1[1]+t1[1];
  549.   if
  550.   (d1[1]>60)
  551.     {
  552.       d1[1]=d1[1]-60;
  553.     d1[0]=d1[0]+1;
  554.   }
  555.   // set off hour
  556.   delay(300); // for debounce
  557.   lcd.clear();  
  558.   lcd.setCursor(0,0);
  559.   lcd.print("D1 Off hour:0~23");
  560.   while (digitalRead(8)==LOW)
  561.   {
  562.     lcd.setCursor(8,1);
  563.     lcd.print("     ");   
  564.     lcd.setCursor(8,1);
  565.     lcd.print(readdial(24,0));
  566.     delay(100);
  567.   }
  568.   t1[2]=readdial(24,0);
  569.   d1[2]=d1[0]+t1[2];
  570.   // set off minute
  571.   delay(300); // for debounce
  572.   lcd.clear();  
  573.   lcd.setCursor(0,0);
  574.   lcd.print("D1 Off min: 0~59");
  575.   while (digitalRead(8)==LOW)
  576.   {
  577.     lcd.setCursor(8,1);
  578.     lcd.print("     ");   
  579.     lcd.setCursor(8,1);
  580.     lcd.print(readdial(60,0));
  581.     delay(100);
  582.   }
  583.   t1[3]=readdial(60,0);
  584.   d1[3]=d1[1]+t1[3];
  585.   if
  586.   (d1[3]>60)
  587.     {
  588.     d1[3]=d1[3]-60;
  589.     d1[2]=d1[2]+1;
  590.   }
  591.   // set calendar options
  592.   // daily?
  593.   delay(300); // for debounce
  594.   lcd.clear();  
  595.   lcd.setCursor(0,0);
  596.   lcd.print("Daily? ");
  597.   while (digitalRead(8)==LOW)
  598.   {
  599.     lcd.setCursor(1,1);
  600.     lcd.print("          ");   
  601.     lcd.setCursor(1,1);
  602.     if (readdial(2,0)==0)
  603.     {
  604.       lcd.print("Yes");
  605.     }
  606.     else if (readdial(2,0)==1)
  607.     {
  608.       lcd.print("No");
  609.     }
  610.     delay(100);
  611.   }
  612.   if (readdial(2,0)==0)
  613.   {
  614.     t1[4]=8;
  615.   }
  616.   delay(300); // for debounce
  617.   // weekend only?
  618.   }

  619. void msetalarm2()
  620. //  allows user to select timer two on/off times and calendar options
  621. {
  622.   // set on hour
  623.   delay(300); // for debounce
  624.   lcd.clear();  
  625.   lcd.setCursor(0,0);
  626.   lcd.print("d2 eat every hour: 0~23");
  627.   while (digitalRead(8)==LOW)
  628.   {
  629.     lcd.setCursor(8,1);
  630.     lcd.print("     ");   
  631.     lcd.setCursor(8,1);
  632.     lcd.print(readdial(24,0));
  633.     delay(100);
  634.   }
  635.   t2[0]=readdial(24,0);
  636.   d2[0]=d2[0]+t2[0];
  637.   // set on minute
  638.   delay(300); // for debounce
  639.   lcd.clear();  
  640.   lcd.setCursor(0,0);
  641.   lcd.print("D2 eat every mins: 0~59");
  642.   while (digitalRead(8)==LOW)
  643.   {
  644.     lcd.setCursor(8,1);
  645.     lcd.print("     ");   
  646.     lcd.setCursor(8,1);
  647.     lcd.print(readdial(60,0));
  648.     delay(100);
  649.   }
  650.   t2[1]=readdial(60,0);
  651.   d2[1]=d2[1]+t2[1];
  652.   if
  653.   (d2[1]>60)
  654.     {
  655.       d2[1]=d2[1]-60;
  656.     d2[0]=d2[0]+1;
  657.   }
  658.   // set off hour
  659.   delay(300); // for debounce
  660.   lcd.clear();  
  661.   lcd.setCursor(0,0);
  662.   lcd.print("D2 Off hour:0~23");
  663.   while (digitalRead(8)==LOW)
  664.   {
  665.     lcd.setCursor(8,1);
  666.     lcd.print("     ");   
  667.     lcd.setCursor(8,1);
  668.     lcd.print(readdial(24,0));
  669.     delay(100);
  670.   }
  671.   t2[2]=readdial(24,0);
  672.   d2[2]=d2[0]+t2[2];
  673.   // set off minute
  674.   delay(300); // for debounce
  675.   lcd.clear();  
  676.   lcd.setCursor(0,0);
  677.   lcd.print("D2 Off min: 0~59");
  678.   while (digitalRead(8)==LOW)
  679.   {
  680.     lcd.setCursor(8,1);
  681.     lcd.print("     ");   
  682.     lcd.setCursor(8,1);
  683.     lcd.print(readdial(60,0));
  684.     delay(100);
  685.   }
  686.   t2[3]=readdial(60,0);
  687.   d2[3]=d2[1]+t2[3];
  688.   if
  689.   (d2[3]>60)
  690.     {
  691.     d2[3]=d2[3]-60;
  692.     d2[2]=d2[2]+1;
  693.   }
  694.   // set calendar options
  695.   // daily?
  696.   delay(300); // for debounce
  697.   lcd.clear();  
  698.   lcd.setCursor(0,0);
  699.   lcd.print("Daily? ");
  700.   while (digitalRead(8)==LOW)
  701.   {
  702.     lcd.setCursor(1,1);
  703.     lcd.print("          ");   
  704.     lcd.setCursor(1,1);
  705.     if (readdial(2,0)==0)
  706.     {
  707.       lcd.print("Yes");
  708.     }
  709.     else if (readdial(2,0)==1)
  710.     {
  711.       lcd.print("No");
  712.     }
  713.     delay(100);
  714.   }
  715.   if (readdial(2,0)==0)
  716.   {
  717.     t2[4]=8;
  718.   }
  719.   delay(300); // for debounce
  720.   // weekend only?
  721.   }
  722. void checktimer1()
  723. // checks to see if need to turn timer 1 on or off
  724. {
  725.   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  726.   getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  727.   // if daily check on or off
  728.   if (t1[4]==8)
  729.   {
  730.     if (hour==d1[0] && minute==d1[1])
  731.     {
  732.       digitalWrite(9, HIGH);
  733.       t1[6]=1;
  734.       d1[1]=d1[1]+t1[1];
  735.       if
  736.   (d1[1]>60)
  737.     {
  738.       d1[1]=d1[1]-60;
  739.     d1[0]=d1[0]+1;
  740.   }
  741.       Serial.println(d1[1], DEC);
  742.       delay(1000);      
  743.     }
  744.     if (hour==d1[2] && minute==d1[3])
  745.     {
  746.       digitalWrite(9, LOW);
  747.       t1[6]=0;
  748.       d1[3]=d1[3]+t1[1];
  749.       Serial.println(d1[3], DEC);
  750.       delay(1000);
  751.     }
  752.   }
  753. }

  754. void checktimer2()
  755. // checks to see if need to turn timer 2 on or off
  756. {
  757.   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  758.   getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  759.   // if daily check on or off
  760.   if (t2[4]==8)
  761.   {
  762.     if (hour==d2[0] && minute==d2[1])
  763.   {
  764.       digitalWrite(10, HIGH);
  765.       t2[6]=1;
  766.       d2[1]=d2[1]+t2[1];
  767.       if
  768.   (d2[1]>60)
  769.     {
  770.     d2[1]=d2[1]-60;
  771.     d2[0]=d2[0]+1;
  772.   }
  773.       Serial.println(d2[1], DEC);
  774.       delay(1000);      
  775.     }
  776.     if (hour==d2[2] && minute==d2[3])
  777.     {
  778.       digitalWrite(10, LOW);
  779.       t2[6]=0;
  780.       d2[3]=d2[3]+t2[1];
  781.       Serial.println(d2[3], DEC);
  782.       delay(1000);
  783.     }
  784.   }
  785. }

  786. void setup()
  787. {
  788.   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  789.   Wire.begin();
  790.   Serial.begin(9600);
  791.   second = 0;
  792.   minute = 27;
  793.   hour = 9;
  794.   dayOfWeek = 4;
  795.   dayOfMonth = 21;
  796.   month = 3;
  797.   year = 12;
  798.   //setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); // only do this once on first use
  799.   lcd.begin(16, 2); // tells Arduino the LCD dimensions
  800.   lcd.setCursor(0,0);
  801.   lcd.print("2timer"); // print text and move cursor to start of next line
  802.   lcd.setCursor(0,1);
  803.   lcd.print("*hi*");
  804.   delay(1500);
  805.   lcd.clear(); // clear LCD screen
  806.   lcd.setCursor(0,0);
  807.   lcd.print("alarm1"); // print text and move cursor to start of next line
  808.   lcd.setCursor(0,1);
  809.   lcd.print("alarm2");
  810.   delay(1500);
  811.   lcd.clear(); // clear LCD screen
  812.   pinMode(8, INPUT); // for button
  813.   pinMode(9, OUTPUT); // to circuit 1
  814.   pinMode(10, OUTPUT); // to circuit 2
  815. }

  816. void loop()
  817. {
  818.   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  819.   getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  820.   lcd.clear(); // clear LCD screen
  821.   lcd.setCursor(0,0);
  822.   lcd.print("");
  823. if (t1224==0)
  824.   {
  825.     if (hour==0)
  826.     {
  827.       lcd.print("12");
  828.     }
  829.     else
  830.       if (hour>0 && hour<13)
  831.       {
  832.         lcd.print(hour, DEC);
  833.       }
  834.       else
  835.         if (hour>=13)
  836.       {
  837.         lcd.print((hour-12), DEC);
  838.       }
  839.   }
  840.   else if (t1224==1)
  841.   {
  842.     lcd.print(hour, DEC);
  843.   }
  844.   lcd.print(":");
  845.   if (minute<10)
  846.   {
  847.     lcd.print("0");
  848.   }
  849.   lcd.print(minute, DEC);
  850.   lcd.print(":");
  851.   if (second<10)
  852.   {
  853.     lcd.print("0");
  854.   }
  855.   lcd.print(second, DEC);
  856.   if (t1224==1)
  857.   {
  858.     lcd.print("h");
  859.   }
  860.   else if (t1224==0)
  861.   {
  862.     if ((23-hour)>11)
  863.     {
  864.       lcd.print("am");
  865.     }
  866.     if ((23-hour)<12)
  867.     {
  868.       lcd.print("pm");
  869.     }
  870.   }
  871.   lcd.print(" ");
  872.   switch(dayOfWeek){
  873.   case 1:
  874.     lcd.print("Sun");
  875.     break;
  876.   case 2:
  877.     lcd.print("Mon");
  878.     break;
  879.   case 3:
  880.     lcd.print("Tue");
  881.     break;
  882.   case 4:
  883.     lcd.print("Wed");
  884.     break;
  885.   case 5:
  886.     lcd.print("Thu");
  887.     break;
  888.   case 6:
  889.     lcd.print("Fri");
  890.     break;
  891.   case 7:
  892.     lcd.print("Sat");
  893.     break;
  894.   }  
  895.   lcd.setCursor(0,1);
  896.   lcd.print("drug 1[");
  897.   if (t1[6]==0)
  898.   {
  899.     lcd.print("_] 2[");
  900.   }
  901.   else if (t1[6]==1)
  902.   {
  903.     lcd.print("!] 2[");
  904.   }


  905.   if (t2[6]==0)
  906.   {
  907.     lcd.print("_]");
  908.   }
  909.   else if (t2[6]==1)
  910.   {
  911.     lcd.print("!]");
  912.   }


  913.   if (digitalRead(8)==HIGH)
  914.     // has the user pressed the button? If so, display the menu
  915.   {
  916.     delay(200); // for debounce
  917.     displaymenu();
  918.   }
  919.    Serial.print(d1[1], DEC);
  920.    Serial.print("-->");
  921.    Serial.println(d1[2], DEC);
  922.    Serial.println(":");
  923.    Serial.println(d1[3], DEC);
  924.    Serial.print(d2[1], DEC);
  925.    Serial.print("-->");
  926.    Serial.println(d2[2], DEC);
  927.    Serial.println(":");
  928.    Serial.println(d2[3], DEC);
  929.   // check for on/off
  930.   checktimer1();
  931.   checktimer2();
  932.   delay(200); // to stop screen flicker
  933. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-4-23 21:14:01 | 显示全部楼层
沒有人知道嗎?@@
回复 支持 反对

使用道具 举报

发表于 2012-4-27 09:16:20 | 显示全部楼层
不是很明白你的问题。应该再具体一些。
我想:1、定义一个全局变量,赋初值0。
      2、在LOOP()中检测这个变量是否到你想要的重复次数了,是则去完成你要做的事情。
      3、在某个函数(就是处理重复的那个函数)中让变量加一,需要具体读一下程序。
回复 支持 反对

使用道具 举报

发表于 2012-10-15 10:11:49 | 显示全部楼层
这个程序都写出了了自定控制次数搞不定?
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 07:49 , Processed in 0.045327 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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