Ciao a tutti,
ho implementato in un piccolo progettino la libreria in oggetto "MsTimer2.h" con il relativo codice di contorno:
#include <MsTimer2.h> // Include files for MsTimer2 library
unsigned long timer=3600000; // Log file is written every 60 minutes (3600000)
int writeLog=0;
void setup(void)
{
// Initialize timer
MsTimer2::set(timer, flushCounter);
MsTimer2::start();
}
void loop(){
// Write the log file if interrupt has been called
if (writeLog==1)
{
String logStr = "";
logStr = String(RTC_TimeStamp) + ";";
logStr += String(flash) + ";";
write_log(logStr);
writeLog=0;
flash=0;
}
}
// Routine executed by the timer interrupt. This flush the
// data to the log file
void flushCounter(void)
{
Serial.println("flushCounter");
writeLog = 1;
}
tralasciando parti di codice già testato e funzionante (gestione bus I2C, uSD, ecc..), ho notato che il timestamp proveniente da RTC non è allineato con il periodo di "timer" (60min), esempio:
timestamp | watt | data ora
1377129227 638 mercoledì 21/08/2013 23:53:47
1377132835 308 giovedì 22/08/2013 00:53:55
1377136443 211 giovedì 22/08/2013 01:54:03
1377140051 207 giovedì 22/08/2013 02:54:11
1377143659 195 giovedì 22/08/2013 03:54:19
1377147267 200 giovedì 22/08/2013 04:54:27
1377150875 188 giovedì 22/08/2013 05:54:35
1377154483 223 giovedì 22/08/2013 06:54:43
1377158090 953 giovedì 22/08/2013 07:54:50
1377161698 900 giovedì 22/08/2013 08:54:58
1377165306 366 giovedì 22/08/2013 09:55:06
1377168914 207 giovedì 22/08/2013 10:55:14
1377172522 177 giovedì 22/08/2013 11:55:22
1377176130 180 giovedì 22/08/2013 12:55:30
1377179738 204 giovedì 22/08/2013 13:55:38
1377183346 217 giovedì 22/08/2013 14:55:46
1377186954 341 giovedì 22/08/2013 15:55:54
1377190562 352 giovedì 22/08/2013 16:56:02
1377194170 334 giovedì 22/08/2013 17:56:10
1377197778 323 giovedì 22/08/2013 18:56:18
1377201386 334 giovedì 22/08/2013 19:56:26
io mi aspetterei una registrazione ogni ora, con un ragionevole ritardo dovuto alla composizione della stringa da scrivere su SD + la scrittura su SD... ed inoltre mi aspetterei che l'interrupt funzioni come tale... invece sembra che ritardi ogni volta che viene reinizializzato il timer...
facendo la differenza tra il primo timestamp ed il successivo e cosi via, ho un ritardo fisso di 3608ms di conseguenza lo slittamento delle registrazioni orarie come si vede dalla tabella qui sopra...
Hardware utilizzato:
- ArduinoUno
- Ethernet shield uSD
- RTC DS1307
avete qualche idea?
saluti
kattivik76
p.s.: dimenticavo il link della libreria -> Arduino Playground - MsTimer2