@docdoc ti posto un estratto del codice, dovrei avere implementato correttamente la macchina a stati, sono ancora dubbioso anche perchè di 3 stati usato praticamente è solo 1.........
rimane ancora come impostare l'allarme, non riesco a caricare nel oggetto DateTime le funzioni matematiche...... se non ci riesco passo al tempo in unix tanto indipendentemente dal orario a me serve avere misurazioni ogni ora
#define S_Start 0 //stato di inizializazione
#define S_Wait 1 //stato di attesa interupt
#define S_Save 2 //stato di salvataggio dati
void loop() {
switch(Status){
case 0:
digitalWrite(RELAY, HIGH); //eccito il relè/chiudo il contatto NO
Status = S_Save;
break;
case 1:
break;
case 2:
detachInterrupt(digitalPinToInterrupt(PIN_Int));
DateTime now = rtc.now(); //carica in now data e ora attuali
voltage0 = readChannel(ADS1115_COMP_0_GND); //Avvia lettura canale 0
voltage1 = readChannel(ADS1115_COMP_1_GND); //Avvia lettura canale 1
voltage2 = readChannel(ADS1115_COMP_2_GND); //Avvia lettura canale 2
voltage3 = readChannel(ADS1115_COMP_3_GND); //Avvia lettura canale 3
dataFile = SD.open("datalog.csv", FILE_WRITE); //apre file csv
if (dataFile) {
noInterrupts(); //disabilita gli interupts per evitare strane cose durante la scrittura
dataFile.print(now.day(), DEC);
dataFile.print('/');
dataFile.print(now.month(), DEC);
dataFile.print('/');
dataFile.print(now.year(), DEC);
dataFile.print(" ");
dataFile.print(now.hour(), DEC);
dataFile.print(':');
dataFile.print(now.minute(), DEC);
dataFile.print(':');
dataFile.print(now.second(), DEC);
dataFile.print(" ");
dataFile.print(voltage0);
dataFile.print(" ");
dataFile.print(voltage1);
dataFile.print(" ");
dataFile.print(voltage2);
dataFile.print(" ");
dataFile.print(voltage3);
dataFile.close(); //chiude file CSV
interrupts(); //riabilita gli interrupts per il normale funzionamento
Serial.println("scrittura file completata");
}
else {
Serial.println("Impossibile apreire datalog.txt");// if the file isn't open, pop up an error:
}
attachInterrupt(digitalPinToInterrupt(PIN_Int),AllarmISR, FALLING);
rtc.setAlarm1(DateTime(now.year(),now.month(),now.day(), 0, 0, 0), DS3231_A1_Hour);
Status = S_Wait;
break;
}
}
void AllarmISR() {
Status=S_Save;
}
Ciao ThEnGI