Salve a tutti,
mi piacerebbe per diletto realizzare un cronotermostato con arduino mega, e sto facendo un po' di brain storming sulla programmazione delle temperature giornaliere, in quanto è il pensiero maggiore al momento.
L'idea è quella di avere 3 temperature programmabili all'interno della giornata con salti di 30 minuti:
T1 = temperatura della casa a regime (quindi quando si sta a casa, es: 20°)
T2 = temperatura della casa di mantenimento, quando praticamente non c'è nessuno (es: 17°)
T3 = temperatura minima della casa (es: 4°) sotto la quale non deve mai scendere (utilizzabile anche come caldaia spenta)
2 programmazioni settimanali configurabili
per fare ciò, stavo pensando di utilizzare, 3 float per ogni programma dove salvo T1, T2 e T3 ed un array per ogni programma per ogni giorno della settimana di 48 float per contenere le temperature desiderate...
il problema è che l'array, che salverei poi nell'eeprom, sarebbe di 4 byte (float) * 48 (le "mezz'ore" del giorno) * 7 (giorni della settimana) * 2 (programmi) =2688 Byte
a questo dovrei aggiungere qualche libreria che utilizza il progmem che se non sbaglio appoggia i dati nella eeprom (in che posizione? rischio l'accavallassi con i miei dati?), qualche altro dato come t1, t2 e t2 sempre di tipo float, ho timore che inizio a starci un po' stretto...
In primo luogo avevo pensato di farmi una bitfield, ma avendo T1, T2 e T3 starei decisamente stretto, potrei però fare una bitfield per ogni temperatura e per ogni giorno, quindi avrei:
3 (bit per T1, T2 e T3) * 48 (le "mezz'ore" del giorno) * 7(giorni della settimana) * 2 (programmi) = 2016 bit/8 = 252 Byte
Vorrei chiedervi: quale metodo è preferibile secondo voi? Conoscete alternative?
leggilo da sinistra a destra: ogni mezz'ora leggi il bit che ti dice che T1 è attiva o no.
In questo modo ti serve 1 byte per memorizzare la temperatura voluta e 42 byte (6 * 7 giorni) per il programma settimanale.
Moltiplica per 3 temperature possibili e 2 programmi settimanali fanno 258 byte.
leggilo da sinistra a destra: ogni mezz'ora leggi il bit che ti dice che T1 è attiva o no.
In questo modo ti serve 1 byte per memorizzare la temperatura voluta e 42 byte (6 * 7 giorni) per il programma settimanale.
Moltiplica per 3 temperature possibili e 2 programmi settimanali fanno 258 byte.
ciao
pippo72
grazie 1000 pippo72, era quello che avevo provato a spiegare (l'avevo spiegato veramente da cani!!!) nella soluzione a 252 byte però non capisco come salvare una temperatura tipo 20.5 in un byte... siccome come precisione mi basterebbe il mezzo grado, potrei utilizzare il segno - per indicarlo:
char temperatura=20;
if (temperatura>0){
printf("temperatura=%d", temperatura;
}else{
printf("temperatura=%d, temperatura+.5);
}
Ciao
In un byte puoi salvare un nunero da 0 a 255.
Ma se tu quel numero lo dividi per 2.0 ?
La temperatura 22,5 corrisponde all'intero 45 ecc.
Te lo gestisci a livello di sketch
pippo72:
Ciao
In un byte puoi salvare un nunero da 0 a 255.
Ma se tu quel numero lo dividi per 2.0 ?
La temperatura 22,5 corrisponde all'intero 45 ecc.
Te lo gestisci a livello di sketch
Ciao
pippo72
sei un grande! Non c'avevo minimamente pensato! Nel w.e. abbozzo un po' di codice... per salvare sulla eeprom, pensi che potrei utilizzare eeprom.put/eeprom.get e passarli la typedef della bitfield? Non l'ho mai utilizzata...