#include #include "application.h" #include int pos = 0; LiquidCrystal lcd(D3, D1, D2, D4, D5, D6); Servo myservo; SparkTime rtc; UDP UDPClient; unsigned long currentTime; int alarmhour = 0; int alarmmin = 0; int alarmsec = 0; bool alarm = false; void setup() { myservo.attach(D0); myservo.write(0); Particle.function("Timer", tim); Particle.function("Set", gong); Particle.function("Preset", clk); rtc.begin(&UDPClient, "time.nist.gov"); rtc.setTimeZone(-6); // gmt offset pinMode(D7, OUTPUT); lcd.begin(16,2); } ////////////////////////////////Command for custom timer times//////////////////////// int tim(String pTim) { const char* str = pTim; int myNr; if(sscanf(str, "%d", &myNr) == EOF ) { /* error */ } alarm = true; currentTime = rtc.now(); int min = rtc.minute(currentTime); //sets time int hour = rtc.hour(currentTime); int sec = rtc.second(currentTime); alarmhour = (hour + myNr/100); alarmmin = (min + myNr % 100); if(alarmmin > 60) { alarmhour+=1; alarmmin-=60; } if(alarmhour >= 24) { alarmhour = 0; } } //////////////////////////////Command for custom alarm times/////////////////////////// int set(String pTime) // when "gong" is called from the cloud, it will { const char* str = pTime; int myNr; if(sscanf(str, "%d", &myNr) == EOF ) { /* error */ } int pHour = myNr / 100; int pMin = myNr % 100; alarm = true; alarmhour = pHour; alarmmin = pMin; } /////////////////////////////////Command for pre set alarm times////////////////////////// int clk(String comand) { if(comand == "School") { alarm = true; alarmhour = 6; alarmmin = 0; } if(comand == "Weekend") { alarm = true; alarmhour = 9; alarmmin = 0; } if(comand == "Off") { alarm = false; alarmhour = 0; alarmmin = 0; lcd.clear(); } } void loop() { currentTime = rtc.now(); int min = rtc.minute(currentTime); //sets time int hour = rtc.hour(currentTime); int sec = rtc.second(currentTime); int day = rtc.day(currentTime); int month = rtc.month(currentTime); int year = rtc.year(currentTime); ///////////////////////////////Print Time//////////////////////////////////// if(hour < 10) { lcd.setCursor(0,0); lcd.print("0"); lcd.setCursor(1,0); lcd.print(hour); } if(hour >= 10) { lcd.setCursor(0,0); lcd.print(hour); } lcd.setCursor(2,0); lcd.print(":"); if(min < 10) { lcd.setCursor(3,0); lcd.print("0"); lcd.setCursor(4,0); lcd.print(min); } if(min >= 10) { lcd.setCursor(3,0); lcd.print(min); } lcd.setCursor(5,0); lcd.print(":"); if(sec < 10) { lcd.setCursor(6,0); lcd.print("0"); lcd.setCursor(7,0); lcd.print(sec); } if(sec >= 10) { lcd.setCursor(6,0); lcd.print(sec); } lcd.setCursor(0,1); lcd.print(month); lcd.print("/"); lcd.print(day); lcd.print("/"); lcd.print(year); ////////////////////////////Alarm print///////////////////////////// if(alarm == false) { lcd.setCursor(11,0); lcd.print("A:No "); } else { lcd.setCursor(11,0); lcd.print("A:Set"); if(alarmhour < 10) { lcd.setCursor(11,1); lcd.print("0"); lcd.setCursor(12,1); lcd.print(alarmhour); } if(alarmhour >= 10) { lcd.setCursor(11,1); lcd.print(alarmhour); } lcd.setCursor(13,1); lcd.print(":"); if(alarmmin < 10) { lcd.setCursor(14,1); lcd.print("0"); lcd.setCursor(15,1); lcd.print(alarmmin); } if(alarmmin >= 10) { lcd.setCursor(14,1); lcd.print(alarmmin); } } if(alarmhour == hour) { if(alarmmin == min) { while(sec<5) { buzzer(); sec+=5; } } } } void buzzer() { for(int i = 0; i < 5; i++) { delay(50); myservo.write(150); delay(50); digitalWrite(D7, HIGH); delay(450); digitalWrite(D7, LOW); delay(500); } myservo.write(0); }