|
发表于 2018-3-26 19:02:33
|
显示全部楼层
大神 第一个闹钟有用 连的led 可以亮
我尝试增加第二闹钟 但是第二个闹钟貌似没用 LCD 可以显示 也可以设置 但是第二个闹钟 LED 没反应- #include <Wire.h>
- #include <DS3231.h>
- #include <LiquidCrystal.h>
- DS3231 Clock;
- bool h12, PM, Century=false;
- byte year, month, date, DoW, hour, minute, second;
- bool A1Dy, A1h12, A1pm, A2Dy, A2h12, A2pm;
- byte A1Day, A1Hour, A1Minute, A1Second, ABits, A2Day, A2Hour, A2Minute, A2Second;
- const byte Set=2;
- const byte New=3;
- byte button[2] = {Set, New};
- LiquidCrystal lcd(A0, A1, A2, A3, 7, 8);
- void setup()
- {
- Wire.begin();
- lcd.begin(16, 2);
- pinMode(Set,INPUT); // button for set
- pinMode(New,INPUT);
- pinMode(4,OUTPUT); // output
- }
- void loop()
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500) // 0.5s
- {
- Pritime();
- }
- SetTime();
- Alarm1();
- Alarm2();
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Time display ~~~~~~~~~~~~~~~~~~~~~~~ */
- void Pritime()
- {
- int second,minute,hour,date,month,year,dow,temperature;
- second=Clock.getSecond();
- minute=Clock.getMinute();
- hour=Clock.getHour(h12, PM);
- date=Clock.getDate();
- month=Clock.getMonth(Century);
- year=Clock.getYear();
- dow=Clock.getDoW();
- temperature=Clock.getTemperature();
- lcd.setCursor(0, 0);
- lcd.print("20"); // 20 Century
- if (year>=10) // print year
- {
- lcd.print(year,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(year,DEC);
- }
- lcd.print('-');
- lcd.setCursor(5, 0);
- if (month>=10) // print month
- {
- lcd.print(month,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(month,DEC);
- }
- lcd.print('-');
- lcd.setCursor(8, 0);
- if (date>=10) // print data
- {
- lcd.print(date,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(date,DEC);
- }
- lcd.setCursor(11, 0);
- switch (dow) // week
- {
- case 1: // dow = 1
- lcd.print("Mon");
- break;
- case 2: // dow =2
- lcd.print("Tue");
- break;
- case 3:
- lcd.print("Wed");
- break;
- case 4:
- lcd.print("Thu");
- break;
- case 5:
- lcd.print("Fri");
- break;
- case 6:
- lcd.print("Sat");
- break;
- case 7:
- lcd.print("Sun");
- break;
- }
- lcd.setCursor(0, 1);
- if (hour>=10) // print hour
- {
- lcd.print(hour,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(hour,DEC);
- }
- lcd.print(':');
- lcd.setCursor(3, 1);
- if (minute>=10) // print minute
- {
- lcd.print(minute,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(minute,DEC);
- }
- lcd.print(':');
- lcd.setCursor(6, 1);
- if (second>=10) // print second
- {
- lcd.print(second,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(second,DEC);
- }
- lcd.setCursor(9, 1);
- if (Clock.checkAlarmEnabled(1)) // alarm enable
- {
- lcd.write("on");
- }
- else
- {
- lcd.print(' ');
- }
- lcd.setCursor(12, 1);
- lcd.print(temperature); // show temperature
- lcd.write(0xdf); // symbol
- lcd.print("C");
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~Display set Data Week Time ~~~~~~~~~~~~~~~~~~~~~~~ */
- void PritimeSet(byte syear,byte smonth,byte sdate,byte sdow,byte shour,byte sminute,byte ssecond)
- {
- lcd.setCursor(0, 0);
- lcd.print("20"); // 20 Century
- if (syear>=10) // print year
- {
- lcd.print(syear,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(syear,DEC);
- }
- lcd.print('-');
- lcd.setCursor(5, 0);
- if (smonth>=10) // print month
- {
- lcd.print(smonth,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(smonth,DEC);
- }
- lcd.print('-');
- lcd.setCursor(8, 0);
- if (sdate>=10) // print date
- {
- lcd.print(sdate,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(sdate,DEC);
- }
- lcd.setCursor(11, 0);
- switch (sdow) // print week
- {
- case 1: // dow = 1
- lcd.print("Mon");
- break;
- case 2: // dow = 2
- lcd.print("Tue");
- break;
- case 3:
- lcd.print("Wed");
- break;
- case 4:
- lcd.print("Thu");
- break;
- case 5:
- lcd.print("Fri");
- break;
- case 6:
- lcd.print("Sat");
- break;
- case 7:
- lcd.print("Sun");
- break;
- }
- lcd.setCursor(0, 1);
- if (shour>=10) // print hour
- {
- lcd.print(shour,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(shour,DEC);
- }
- lcd.print(':');
- lcd.setCursor(3, 1);
- if (sminute>=10) // print minute
- {
- lcd.print(sminute,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(sminute,DEC);
- }
- lcd.print(':');
- lcd.setCursor(6, 1);
- if (ssecond>=10) // print second
- {
- lcd.print(ssecond,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(ssecond,DEC);
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ flash set location ~~~~~~~~~~~~~~~~~~~~~~~ */
- void TicSet(byte a,byte b)
- {
- lcd.setCursor(a,b);
- lcd.print(" ");
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ display alarm1 ~~~~~~~~~~~~~~~~~~~~~~~ */
- void PriA1()
- {
- lcd.setCursor(0, 0);
- lcd.print("Alarm1 ");
- if (Clock.checkAlarmEnabled(1)) // alarm status
- {
- lcd.print("On");
- }
- else
- {
- lcd.print("Off");
- }
- Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
- lcd.setCursor(0, 1); //second line on lcd
- if (A1Hour>=10) // print hour
- {
- lcd.print(A1Hour,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(A1Hour,DEC);
- }
- lcd.print(':');
- lcd.setCursor(3, 1);
- if (A1Minute>=10) //print minute
- {
- lcd.print(A1Minute,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(A1Minute,DEC);
- }
- }
- /*~~~~~~~~~~~~~~~~~~~~~~~display alarm2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
- void PriA2()
- {
- lcd.setCursor(0, 0);
- lcd.print("Alarm2 ");
- if (Clock.checkAlarmEnabled(2)) // alarm status
- {
- lcd.print("On");
- }
- else
- {
- lcd.print("Off");
- }
- Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
- lcd.setCursor(0, 1); //second line on lcd
- if (A2Hour>=10) // print hour
- {
- lcd.print(A2Hour,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(A2Hour,DEC);
- }
- lcd.print(':');
- lcd.setCursor(3, 1);
- if (A2Minute>=10) //print minute
- {
- lcd.print(A2Minute,DEC);
- }
- else
- {
- lcd.print("0");
- lcd.print(A2Minute,DEC);
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ switch debounce~~~~~~~~~~~~~~~~~~~~~~~ */
- unsigned long LastP;
- boolean buttonPress(byte button)
- {
- if(digitalRead(button)==HIGH) // button press?
- {
- unsigned long NowP = millis();
- unsigned long buttonChange=NowP-LastP; // debounce function
- if (buttonChange>500)
- {
- LastP = millis();
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return false;
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ set time ~~~~~~~~~~~~~~~~~~~~~~~ */
- void SetTime()
- {
- bool h12, PM, Century=false;
- byte syear, smonth, sdate, sdow, shour, sminute, ssecond;
- if(buttonPress(Set))
- {
- lcd.clear();
- delay(200);
- Clock.getTime(syear, smonth, sdate, sdow, shour, sminute, ssecond);
- bool SetY=true;
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter year set ~~~~~~~~~~~~~~~~~~~~~~~ */
- while(SetY)
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500) // flash every 0.5s
- {
- PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
- }
- else
- {
- lcd.setCursor(0,0);
- lcd.print(" ");
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set year ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- syear=syear+1;
- if(syear>50)
- {
- syear = 0;
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter month set ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- bool SetMon=true;
- while(SetMon)
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500)
- {
- PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
- }
- else
- {
- TicSet(5,0);
- }
-
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set month ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- smonth=smonth+1;
- if(smonth>12)
- {
- smonth=1;
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter data set ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- bool SetD=true;
- while(SetD)
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500)
- {
- PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
- }
- else
- {
- TicSet(8,0);
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set data ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- sdate=sdate+1;
- if(sdate>31)
- {
- sdate=1;
- }
- }
-
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter week set ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- bool SetW=true;
- while(SetW)
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500)
- {
- PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
- }
- else
- {
- lcd.setCursor(11,0);
- lcd.print(" ");
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set week ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- sdow=sdow+1;
- if(sdow>7)
- {
- sdow=1;
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter hour set ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- long NewP=0;
- bool SetH=true;
- while(SetH)
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500)
- {
- PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
- }
- else
- {
- TicSet(0,1);
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set hour ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- NewP=NewP+1;
- shour=shour+1;
- if(shour>23)
- {
- shour=0;
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter minute set ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- bool SetMin=true;
- while(SetMin)
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500)
- {
- PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
- }
- else
- {
- TicSet(3,1);
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set minute ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- NewP=NewP+1;
- sminute=sminute+1;
- if(sminute>59)
- {
- sminute=0;
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter second set ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- bool SetS=true;
- while(SetS)
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500)
- {
- PritimeSet(syear, smonth, sdate, sdow, shour, sminute, ssecond);
- }
- else
- {
- TicSet(6,1);
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set second ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- NewP=NewP+1;
- ssecond=ssecond+1;
- if(ssecond>59)
- {
- ssecond=0;
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ exit and save ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- Clock.setYear(syear);
- Clock.setMonth(smonth);
- Clock.setDate(sdate);
- Clock.setDoW(sdow);
- if (NewP>0)
- {
- Clock.setHour(shour);
- Clock.setMinute(sminute);
- Clock.setSecond(ssecond);
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm1 hour set ~~~~~~~~~~~~~~~~~~~~~~~ */
- lcd.clear();
- delay(200);
- bool SetA1H=true;
- while(SetA1H)
- {
- unsigned long RA1=millis()%1000;
- if(RA1<500) // flash every 0.5s
- {
- PriA1();
- }
- else
- {
- TicSet(0,1);
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set hour ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
- A1Hour=A1Hour+1;
- if(A1Hour<24)
- {
- Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm); // set alarm for every day
- }
- else
- {
- A1Hour=0;
- Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm1 minute set ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- bool SetA1M=true;
- while(SetA1M)
- {
- unsigned long RA1=millis()%1000;
- if(RA1<500)
- {
- PriA1();
- }
- else
- {
- TicSet(3,1);
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set minute ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
- A1Minute=A1Minute+1;
- if(A1Minute<60)
- {
- Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);
- }
- else
- {
- A1Minute=0;
- Clock.setA1Time(A1Day, A1Hour, A1Minute, A1Second, B1000, A1Dy, false, A1pm);
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Alarm1 on or off ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- bool SetA1R=true;
- while(SetA1R)
- {
- unsigned long RA1=millis()%1000;
- if(RA1<500)
- {
- lcd.setCursor(0, 0);
- PriA1();
- }
- else
- {
- lcd.setCursor(7, 0);
- lcd.print(" ");
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set alarm on or off ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- digitalWrite(New,LOW);
-
- if(Clock.checkAlarmEnabled(1))
- {
- Clock.turnOffAlarm(1);
- }
- else
- {
- Clock.turnOnAlarm(1);
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm2 hour set ~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- delay(200);
- bool SetA2H=true;
- while(SetA2H)
- {
- unsigned long RA2=millis()%1000;
- if(RA2<500) // flash every 0.5s
- {
- PriA2();
- }
- else
- {
- TicSet(0,1);
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set hour ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
- A2Hour=A2Hour+1;
- if(A2Hour<24)
- {
- Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm); // set alarm for every day
- }
- else
- {
- A2Hour=0;
- Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Enter alarm minute set ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- bool SetA2M=true;
- while(SetA2M)
- {
- unsigned long RA2=millis()%1000;
- if(RA2<500)
- {
- PriA2();
- }
- else
- {
- TicSet(3,1);
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set minute ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
- A2Minute=A2Minute+1;
- if(A2Minute<60)
- {
- Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);
- }
- else
- {
- A2Minute=0;
- Clock.setA2Time(A2Day, A2Hour, A2Minute, B100, A2Dy, false, A2pm);
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Alarm1 on or off ~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- bool SetA2R=true;
- while(SetA2R)
- {
- unsigned long RA2=millis()%1000;
- if(RA2<500)
- {
- lcd.setCursor(0, 0);
- PriA2();
- }
- else
- {
- lcd.setCursor(7, 0);
- lcd.print(" ");
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ set alarm on or off ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(New))
- {
- digitalWrite(New,LOW);
-
- if(Clock.checkAlarmEnabled(2))
- {
- Clock.turnOffAlarm(2);
- }
- else
- {
- Clock.turnOnAlarm(2);
- }
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~~~~ exit ~~~~~~~~~~~~~~~~~~~~~~~~~~ */
- if(buttonPress(Set))
- {
- lcd.clear();
- delay(200);
- goto exit;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- exit: ;
- }
- /* ~~~~~~~~~~~~~~~~~~~~~~ Alarm1 on ~~~~~~~~~~~~~~~~~~~~~ */
- void Alarm1()
- {
- if(Clock.checkIfAlarm(1))
- {
- long Rdt;
- do
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500) // flash every 0.5s
- {
- Pritime();
- delay(100);
- digitalWrite(4,HIGH);
- }
- Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, ABits, A1Dy, A1h12, A1pm);
- Clock.getTime(year, month, date, DoW, hour, minute, second);
- if (hour==0)
- {
- hour=24;
- }
- Rdt=hour*60+minute*1-A1Hour*60-A1Minute*1;
- }
- while(Rdt>=0&&Rdt<1); // continu 30s
- }
- else
- {
- digitalWrite(4,LOW);
- }
- }
- void Alarm2()
- {
- if(Clock.checkIfAlarm(2))
- {
- long Rdt;
- do
- {
- unsigned long Rt=millis()%1000;
- if(Rt<500) // flash every 0.5s
- {
- Pritime();
- delay(100);
- digitalWrite(4,HIGH);
- }
- Clock.getA2Time(A2Day, A2Hour, A2Minute, ABits, A2Dy, A2h12, A2pm);
- Clock.getTime(year, month, date, DoW, hour, minute, second);
- if (hour==0)
- {
- hour=24;
- }
- Rdt=hour*60+minute*1-A2Hour*60-A2Minute*1;
- }
- while(Rdt>=0&&Rdt<1); // continu 30s
- }
- else
- {
- digitalWrite(4,LOW);
- }
- }
复制代码
|
|