diff --git a/NTPClient.cpp b/NTPClient.cpp index 87b7a53..6dcb148 100644 --- a/NTPClient.cpp +++ b/NTPClient.cpp @@ -101,6 +101,10 @@ bool NTPClient::update() { return true; } +bool NTPClient::isTimeSet() const { + return (this->_lastUpdate != 0); // returns true if the time has been set, else false +} + unsigned long NTPClient::getEpochTime() const { return this->_timeOffset + // User offset this->_currentEpoc + // Epoc returned by the NTP server diff --git a/NTPClient.h b/NTPClient.h index 02d8752..d5363b1 100644 --- a/NTPClient.h +++ b/NTPClient.h @@ -65,6 +65,13 @@ class NTPClient { */ bool forceUpdate(); + /** + * This allows to check if the NTPClient successfully received a NTP packet and set the time. + * + * @return true if time has been set, else false + */ + bool isTimeSet() const; + int getDay() const; int getHours() const; int getMinutes() const; diff --git a/examples/IsTimeSet/IsTimeSet.ino b/examples/IsTimeSet/IsTimeSet.ino new file mode 100644 index 0000000..765372b --- /dev/null +++ b/examples/IsTimeSet/IsTimeSet.ino @@ -0,0 +1,53 @@ +#include +// change next line to use with another board/shield +#include +//#include // for WiFi shield +//#include // for WiFi 101 shield or MKR1000 +#include + +const char *ssid = ""; +const char *password = ""; + +WiFiUDP ntpUDP; +// initialized to a time offset of 10 hours +NTPClient timeClient(ntpUDP,"pool.ntp.org", 36000,); +// HH:MM:SS +// timeClient initializes to 10:00:00 if it does not receive an NTP packet +// before the 100ms timeout. +// Without isTimeSet() the LED would be switched on, although the time +// was not yet set correctly. + +// blue led on ESP12F +const int led = 2; +const int hour = 10; +const int minute = 0; + +void setup(){ + Serial.begin(115200); + + pinMode(led, OUTPUT); + // led is off when pin is high + digitalWrite(led, 1); + + WiFi.begin(ssid, password); + + while ( WiFi.status() != WL_CONNECTED ) { + delay ( 500 ); + Serial.print ( "." ); + } + + timeClient.begin(); +} + +void loop() { + timeClient.update(); + + Serial.println(timeClient.getFormattedTime()); + if(timeClient.isTimeSet()) { + if (hour == timeClient.getHours() && minute == timeClient.getMinutes()) { + digitalWrite(led, 0); + } + } + + delay(1000); +} diff --git a/keywords.txt b/keywords.txt index 6f7bc6f..b6876c1 100644 --- a/keywords.txt +++ b/keywords.txt @@ -12,6 +12,7 @@ begin KEYWORD2 end KEYWORD2 update KEYWORD2 forceUpdate KEYWORD2 +isTimeSet KEYWORD2 getDay KEYWORD2 getHours KEYWORD2 getMinutes KEYWORD2