experiments with Pylontech/GroWatt PV tech
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*
* TimeSerialDateStrings.pde * example code illustrating Time library date strings * * This sketch adds date string functionality to TimeSerial sketch * Also shows how to handle different messages * * A message starting with a time header sets the time * A Processing example sketch to automatically send the messages is inclided in the download * On Linux, you can use "date +T%s\n > /dev/ttyACM0" (UTC time zone) * * A message starting with a format header sets the date format
* send: Fs\n for short date format * send: Fl\n for long date format */ #include <TimeLib.h>
// single character message tags
#define TIME_HEADER 'T' // Header tag for serial time sync message
#define FORMAT_HEADER 'F' // Header tag indicating a date format message
#define FORMAT_SHORT 's' // short month and day strings
#define FORMAT_LONG 'l' // (lower case l) long month and day strings
#define TIME_REQUEST 7 // ASCII bell character requests a time sync message
static boolean isLongFormat = true;
void setup() { Serial.begin(9600); while (!Serial) ; // Needed for Leonardo only
setSyncProvider( requestSync); //set function to call when sync required
Serial.println("Waiting for sync message"); }
void loop(){ if (Serial.available() > 1) { // wait for at least two characters
char c = Serial.read(); if( c == TIME_HEADER) { processSyncMessage(); } else if( c== FORMAT_HEADER) { processFormatMessage(); } } if (timeStatus()!= timeNotSet) { digitalClockDisplay(); } delay(1000); }
void digitalClockDisplay() { // digital clock display of the time
Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.print(" "); if(isLongFormat) Serial.print(dayStr(weekday())); else Serial.print(dayShortStr(weekday())); Serial.print(" "); Serial.print(day()); Serial.print(" "); if(isLongFormat) Serial.print(monthStr(month())); else Serial.print(monthShortStr(month())); Serial.print(" "); Serial.print(year()); Serial.println(); }
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); }
void processFormatMessage() { char c = Serial.read(); if( c == FORMAT_LONG){ isLongFormat = true; Serial.println(F("Setting long format")); } else if( c == FORMAT_SHORT) { isLongFormat = false; Serial.println(F("Setting short format")); } }
void processSyncMessage() { unsigned long pctime; const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013 - paul, perhaps we define in time.h?
pctime = Serial.parseInt(); if( pctime >= DEFAULT_TIME) { // check the integer is a valid time (greater than Jan 1 2013)
setTime(pctime); // Sync Arduino clock to the time received on the serial port
} }
time_t requestSync() { Serial.write(TIME_REQUEST); return 0; // the time will be sent later in response to serial mesg
}
|