ToniPropeller
Member
Hello everyone,
I'm having problems with the T3.6 RTC in combination with the Snooze library. The RTC works fine with the "TimeTeensy3" sketch and keeps the time even when unplugged from power using the battery.
But when I'm trying to retain the time when the Teensy is waking up from hibernation, it continues with the time it went to sleep (see screenshot).
What am I missing?
My final goals is to put the Teensy into sleep over night and wake him up in the morning. For this I'm using the TimeAlarm-Lib for setting a repeating alarm and the "alarm.setRtcTimer" function from the Snooze library to set the sleeping time.
In the example code you'll find the current test settings as well as the settings that will be used in production mode.
Thank you for your help,
Martin
I'm having problems with the T3.6 RTC in combination with the Snooze library. The RTC works fine with the "TimeTeensy3" sketch and keeps the time even when unplugged from power using the battery.
But when I'm trying to retain the time when the Teensy is waking up from hibernation, it continues with the time it went to sleep (see screenshot).
What am I missing?
My final goals is to put the Teensy into sleep over night and wake him up in the morning. For this I'm using the TimeAlarm-Lib for setting a repeating alarm and the "alarm.setRtcTimer" function from the Snooze library to set the sleeping time.
In the example code you'll find the current test settings as well as the settings that will be used in production mode.
Thank you for your help,
Martin
Code:
#include <Snooze.h>
#include <TimeLib.h>
#include <TimeAlarms.h>
// Load drivers
SnoozeAlarm alarm;
SnoozeTimer timer;
// install drivers to a SnoozeBlock
SnoozeBlock config_teensy36(alarm, timer);
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");
}
// Set timer for tes mode
Alarm.timerRepeat(30,GoToSleep);
// Set timer For productive mode
//Alarm.alarmRepeat(22,00,00,GoToSleep);
}
void loop() {
if (Serial.available()) {
time_t t = processSyncMessage();
if (t != 0) {
Teensy3Clock.set(t); // set the RTC
setTime(t);
}
}
digitalClockDisplay();
Alarm.delay(1000);
}
void GoToSleep(){
// Set RtcTimer for test mode (Teensy should wake up in one minute)
alarm.setRtcTimer(0, 1, 0);// hour, min, sec
// Set RtcTimer for productive mode (Teensy should wake up at 7:00am )
//alarm.setRtcTimer(9, 0, 0);// hour, min, sec
Snooze.hibernate( config_teensy36 );
}
time_t getTeensy3Time()
{
return Teensy3Clock.get();
}
void digitalClockDisplay() {
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(year());
Serial.print("-");
Serial.print(month());
Serial.print("-");
Serial.print(day());
Serial.println();
}
/* 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);
}
Attachments
Last edited: