NTPClient has now a method `boolean isTimeValid()` which indicates whether the last update was successful or not. Clock will blink if it wasn't successful.

This commit is contained in:
Fabian Schlenz 2019-05-30 11:36:13 +02:00
parent 0d3896ca0d
commit adb03d486b
3 changed files with 15 additions and 2 deletions

View File

@ -26,6 +26,8 @@ class NTPClient {
void sendNTPPacket();
boolean _timeValid = false;
public:
NTPClient(UDP& udp);
NTPClient(UDP& udp, long timeOffset);
@ -69,6 +71,7 @@ class NTPClient {
int getHours() const;
int getMinutes() const;
int getSeconds() const;
boolean getTimeValid() const;
/**
* Changes the time offset. Useful for changing timezones dynamically

View File

@ -66,6 +66,9 @@ bool NTPClient::forceUpdate() {
Serial.println("Update from NTP Server");
#endif
while(this->_udp->parsePacket() != 0)
this->_udp->flush();
this->sendNTPPacket();
// Wait till data is there or timeout...
@ -74,10 +77,13 @@ bool NTPClient::forceUpdate() {
do {
delay ( 10 );
cb = this->_udp->parsePacket();
if (timeout > 100) return false; // timeout after 1000 ms
if (timeout > 100) {
this->_timeValid = false;
return false; // timeout after 1000 ms
}
timeout++;
} while (cb == 0);
this->_timeValid = true;
this->_lastUpdate = millis() - (10 * (timeout + 1)); // Account for delay in reading the time
this->_udp->read(this->_packetBuffer, NTP_PACKET_SIZE);

View File

@ -24,6 +24,10 @@ void ClockEffect::loop(boolean invert, CRGB fg_color, CRGB bg_color) {
}
fg_color = bg_color;
}
if (ntpClient.getTimeValid()==false && ntpClient.getSeconds() & 1==0) {
clear(window, bg_color);
return;
}
int h = ntpClient.getHours();
drawDigit(window, numbers3x5, 3, 5, 0, 1, h / 10, fg_color, invert);
drawDigit(window, numbers3x5, 3, 5, 4, 1, h % 10, fg_color, invert);