riscrivo per togliermi un dubbio (enorme)... davvero non capisco il perché...
allora intanto il codice scritto è questo:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Bridge.h>
#define intervalLcd 100
unsigned long previousLcd = 0;
// Dichiaro i pin del display
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup() {
//Definisco la porta seriale per leggere dati dal monitor seriale.
Serial.begin(9600);
//Inizializzo il display
lcd.begin(20, 4);
//Inizializzo l'interfaccia Bridge per la comunicazione con Linux
Bridge.begin();
}
void loop() {
Process uptime;
uptime.runShellCommand("cat /proc/uptime | cut -d. -f1");
unsigned long uptimeSec = 0;
while (uptime.available() > 0) {
char c = uptime.read();
if (c != '\n') {
uptimeSec *= 10;
uptimeSec += c - '0';
}
}
//Serial.flush();
//Serial.print(uptimeSec);
if (millis() - previousLcd > intervalLcd) {
previousLcd = millis();
lcd.setCursor(0, 0);
lcd.print(uptimeSec);
unsigned long uptimeDay = uptimeSec / 86400;
uptimeSec -= uptimeDay * 86400;
unsigned long uptimeHour = uptimeSec / 3600;
uptimeSec -= uptimeHour * 3600;
unsigned long uptimeMin = uptimeSec / 60;
uptimeSec -= uptimeMin * 60;
lcd.setCursor(0, 1);
lcd.print("Uptime:");
lcd.setCursor(0, 2);
lcd.print(uptimeDay);
lcd.print("d ");
if (uptimeHour < 10) lcd.print("0");
lcd.print(uptimeHour);
lcd.print("h ");
if (uptimeMin < 10) lcd.print("0");
lcd.print(uptimeMin);
lcd.print("m ");
if (uptimeSec < 10) lcd.print("0");
lcd.print(uptimeSec);
lcd.print("s");
}
}
inizialmente però, visto che le variabili uptimeDay, uptimeHour e uptimeMin dovrebbero contenere rispettivamente, meno di 32000 quella dei giorni (sicuramente morirebbe prima l'hardware
), solo da 0 a 23 quella delle ore e da 0 a 59 quella dei minuti, avevo impostato queste variabili come int al posto di unsigned long...
Per buona parte della giornata funziona tutto regolarmente, la sera intorno alle 20:30 tornando davanti all'arduino mi trovo davanti a un output sull lcd di questo genere:
218845
2d 12h 1139m 65577s !!!! (che continua ad incrementare in modo anomalo il num. dei secondi e dei minuti)
Mi chiedo come sia possibile !? Ho rifatto i calcoli mille volte ma non capisco xkè proprio intorno a quell'ora la stampa dei minuti e dei secondi viene fuori errata...se al volo senza riavviare yun, trasformo in UNSIGNED LONG le var, si aggiusta tutto...
Perchè?