Hallo in die Runde,
ich habe bei meinem Sketch auf einem Teensy 3.6) ein Problem, dass adjustTime() die Uhrzeit ohne Probleme zurück stellt (um 3600 Sekunden), aber nicht vorstellt, bzw. wenn dann nur sporadisch und nur kleinere Werte (bis ca. 300 Sekunden).
Um das ganze einfacher eingrenzen zu können, habe ich die entsprechende Funktion ins Beispiel "TimeTeensy3" kopiert- das Problem ist identisch geblieben.
Vielleicht kann mir jemand hier in der Runde erklären was ich falsch mache...
/*
* TimeRTC.pde
* example code illustrating Time library with Real Time Clock.
*
*/
#include <TimeLib.h>
void setup() {
// set the Time library to use Teensy 3.0's RTC to keep time
setSyncProvider(getTeensy3Time);
Serial.begin(115200);
while (!Serial); // Wait for Arduino Serial Monitor to open
delay(100);
if (timeStatus()!= timeSet) {
Serial.println("Unable to sync with the RTC");
} else {
Serial.println("RTC has set the system time");
}
adjustTime(3600);
}
byte SekundeAlt;
byte Sekunde;
void loop() {
if (Serial.available()) {
time_t t = processSyncMessage();
if (t != 0) {
Teensy3Clock.set(t); // set the RTC
setTime(t);
}
}
digitalClockDisplay();
delay(1000);
Sekunde = second();
if ( second() == 10 && SekundeAlt != Sekunde )
{ SekundeAlt = second();
adjustTime(3600); }
if ( second() == 50 && SekundeAlt != second() )
{ SekundeAlt = second();
adjustTime(-3600); }
}
void digitalClockDisplay() {
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}
time_t getTeensy3Time()
{
return Teensy3Clock.get();
}
/* code to process time sync messages from the serial port */
#define TIME_HEADER "T" // Header tag for serial time sync message
unsigned long processSyncMessage() {
unsigned long pctime = 0L;
const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013
if(Serial.find(TIME_HEADER)) {
pctime = Serial.parseInt();
return pctime;
if( pctime < DEFAULT_TIME) { // check the value is a valid time (greater than Jan 1 2013)
pctime = 0L; // return 0 to indicate that the time is not valid
}
}
return pctime;
}
void printDigits(int digits){
// utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}