Allora ragazzi vi espongo il problema, cercavo di risolverlo nell'altro topic delle porte A4 e A5, ma voglio chiederlo a tutti! Praticamente devo memorizzare nella eeprom di arduino i valori massimi e minimi di temperatura e la raffica massima per ora... quando stacco la corrente devono essere memorizzati, però non riesco a far funzionare il programma che ho usato, perché la massima la memorizza ma la minima mi segna ovf e la raffica nan... Oltre questo volevo sapere se quando stacco la corrente alle 10 di sera per esempio e siccome ho l rtc l'orario rimane, poi se rimetto la corrente il giorno dopo, vorrei che le massime e minime si resettassero, e non che mi segnassero quelle del giorno dopo soltanto perché l'if lo legge quando c'è la corrente...magari devo salvare anche il giorno prima nella eeprom e confrontarlo con il giorno attuale?
Lo sketch in allegato...
Comunque non centra niente questo... Mi fa solo mettendo gli address in quel modo, sto cercando di capire perché ma è impossibile... poi sarà un problema se fa così quando devo memorizzare anche il pluviometro tipo...
Rimetto lo sketch aggiornato
Allora riprendo questo topic, tempo fa guglielmo mi aveva detto di guardare l avr, però ci ho capito poco... Ho da poco arduino mega e sto cercando di far funzionare la memorizzazione dei dati, qualcuno sa darmi una mano? Pubblico tutto lo sketch che per ora utilizzo
Il tuo sbaglio e di voler fare tutto assieme ...
... se devi usare una cosa che NON consci, prendi gli esempi dell'IDE dove usa SOLO la EEPROM e ti studi quelli così da vedere il suo uso isolato da tutto il resto.
Capito come funziona, applicarla poi in un programma di maggior dimensioni non dovrebbe essere un problema.
Guglielmo
P.S.: Non ricordo se te l'ho già dato, comunque, in allegato un documento sull'uso della EEPROM.
Che poi il problema si è presentato con il put e get, con il read e write non avevo avuto problemi... comunque proverò a memorizzare da soli dei dati, perché adesso con la mega qualsiasi indirizzo che metto mi dà "nam"... ti farò sapere grazie
Francamente in questo caso non ne vedo il motivo, la libreria EEPROM funziona molto bene ed è molto comoda per salvare oggetti di dimensioni arbitrarie.
Non vedo perché usare funzioni di più basso livello per reimplementare quelle di alto già esistenti e debuggate.
SukkoPera:
Non vedo perché usare funzioni di più basso livello per reimplementare quelle di alto già esistenti e debuggate.
... sarà il caso che te la vai a leggere ... potresti avere delle sorprese ... e prova a vedere la classe EEPROM cosa usa al suo interno ... creando solo un inutile passaggio in più (... ed un appesantimento del codice) !
Comunque utilizzando sempre la eeprom.h, ho utilizzato lo sketch clear e poi rimesso quello che ho postato e adesso me li segna i valori ! Non so nemmeno perché, l'unica è la minima eeprom che non so perché ma mi segna sempre 0
Comunque devo impararmi per forza quella che dici... anche se non ci sono abituato al C xd perché poi dovrò praticamente memorizzare nella eeprom una trentina di valori e passa... e potrei avere problemi con la h
@gpb: Nella libc c'è eeprom_write_block() (ed eeprom_write_float() che forse in questo caso basterebbe, oltre alle relative funzioni di lettura ed aggiornamento) che è sicuramente sufficiente a fare quel che serve, siamo d'accordo. Ma richiede che si abbia un po' di dimestichezza con i puntatori e sizeof(), che non tutti hanno. Inoltre c'è il discorso di fare update() invece di write(). Sono d'accordo con te che ad un certo punto si debba andare "oltre", ma per il livello a cui si trova As_Needed (senza offesa ), mi sembra un po' precoce, per cui credo che EEPROM.h sia più adatta a lui.
@As_Needed: Come suggerito, fai uno sketch in cui fai solo letture e scritture. Se ancora non va, postalo per intero, non c'è motivo per cui non debba funzionare, ti garantisco che si possono leggere e scrivere cose ben più complesse in EEPROM :).
@gpb: Mi duole ma no, a me non sembra più facile, mettendomi nei panni di uno che non hai mai visto quella '&' prima! E poi, voglio dire, credi che nessuno abbia la tentazione di fare semplicemente:
EEnoOfTel = 100;
? Ti ricordo che 9 arduinisti su 10 non riescono ad afferrare la complicatissima logica dietro all'utilizzo di millis()...
Infine, Arduino non è solo AVR! Se dovessi portare quel codice su una Due, su una Zero, su una Teensy, su un ESP8266... compilerebbe?
gpb01:
... non compilerebbe neanche la EEPROM.h (che usa avr/eeprom.h) ... quindi ...
Oh .. volete complicarvi la vita ed appesantire il codice con delle inutili classi ? fate pure ...
... a me non cambia nulla eh !
Guglielmo
Veramente io il codice vero voglio farlo con l'altra quindi vedrò di provarci e riuscirci xd onestamente anche se non ci sono abituato mi pare un lavoro più pulito quello della avr!
In ogni caso oltre questo problema devo aprire un altro topic per un problema che è insorto con l sd....
gpb01:
... non compilerebbe neanche la EEPROM.h (che usa avr/eeprom.h) ... quindi ...
Forse non ci siamo capiti. Se usi un core per una diversa piattaforma col supporto EEPROM, puoi attenderti che EEPROM.get() e compagnia siano state portate e funzionino. Se includi manualmente avr/eeprom.h invece dovrai farti il porting da solo.
gpb01:
Oh .. volete complicarvi la vita ed appesantire il codice con delle inutili classi ? fate pure ...
... a me non cambia nulla eh !
Ma allora buttiamo via tutta la libreria di funzioni di Arduino e usiamo solo la AVR libc, no? Io condivido il tuo punto di vista in parte, solo sono convinto che una scelta del genere vada fatta da chi è già ad un certo livello, conscio di cosa guadagna (velocità, risparmio RAM/flash, ecc) e di cosa perde (semplicità, portabilità).
Sono d'accordo sukko con quello che dici. Alla fine come hai detto prima per il mio livello è più comoda la eeprom h, ma una volta capiti i meccanismi della avr è una cosa in più che è meglio fare Io voglio provare per ora con la h e se proprio non riesco allora mi cimento nell avr che penso che questo lo farò comunque!