Go Down

Topic: memorizzazione eventi con data e ora (Read 1 time) previous topic - next topic

vittorio68

ciao peppe91,

da quello che dici dovresti scrivere 12 byte per ogni accesso. I primi 6 contengono (giorno, mese, anno, ora, minuti, secondi - un byte per ciascuno); i secondi 6 contengono l'ID del chip RFID.

Mantieni una variabile che ti indica quanti accessi hai già memorizzato. A questo punto troverai i dati del primo accesso tra i bytes 0-11, quello del secondo tra i bytes 12-23... e genericamente, quelli dell'n-esimo tra i bytes [i*12, i*12 + 11] dove la i parte da 0 (il primo accesso ha indice 0).

Ti ribadisco però quello che ti hanno già suggerito. La EEPROM ha un numero di cicli di scrittura "limitato" e rischi di esaurirli in breve tempo. Inoltre, tale memoria non è grandissima (1KB per arduino UNO e 4KB per arduino MEGA). Nel primo caso riesci a memorizzare circa 85 accessi, nel secondo circa 341 che in 48 ore potrebbero essere pochi.

Oltre alla FRAM potresti anche considerare l'uso di una SD.

leo72


quanto spazio ho in ogni cella della eeprom?

1 byte, 8 bit.

Quote

come riesco a salvare i 6 byte se ogni cella contiene massimo 1 byte?

Usi 6 byte. Usi cioè un "taglio" consono al quantitativo di dati da salvare.

Quote

come faccio a memorizzare l'identificativo sopra con ora e data e poi a richiamarli??...

Organizzi i dati secondo uno schema come ti ha spiegato vittorio68.

Quote

l'unica cosa che so è che si usa EEPROM.write per scrivere e EEPROM.read per leggere....penso che per la lettura non ci sia problema...mi è sembrata facile...è la scrittura che non riesco a comprendere...


Ad EEPROM.write passi l'indirizzo ed il valore da scrivere.
Ovviamente dovendo scrivere più byte, userai un puntatore al blocco di byte. Ogni blocco sarà composto da n byte.
Mettiamo che il tuo blocco sia di 12 byte, il 1° blocco parte da 0 e termina ad 11. Il 2° blocco parte da 12 e termina a 23 ecc..

peppe91

Grazie a tutti per le risposte....per la eeprom esterna dispongo di alcune 24c64 che sono i2c da 64Kb...per quanto riguarda i byte sono riuscito a capire....quello che ancora non capisco è la tecnica di memorizzazione....mettiamo caso che il programma legga la carta RFID con il comando readCard, e per l'orario ho dichiarato ora, minuti, secondi, giorno, mese, anno, per scrivere i dati sulla eeprom cosa dovrei fare?
EEPROM.write(readCard, ora, minuti, secondi, giorno, mese, anno)????
se li dispone in automatico oppure devo dividerli io e specificare le celle in cui vanno inseriti?
se non chiedo troppo mi fareste vedere un esempio di codice?...

leo72


Grazie a tutti per le risposte....per la eeprom esterna dispongo di alcune 24c64 che sono i2c da 64Kb...

Attento che sono 64 kbit, non kbyte. Siccome di solito sono memorie da 64k X 8bit, hai un taglio di 8 kB (kbyte).

Quote

per quanto riguarda i byte sono riuscito a capire....quello che ancora non capisco è la tecnica di memorizzazione....mettiamo caso che il programma legga la carta RFID con il comando readCard, e per l'orario ho dichiarato ora, minuti, secondi, giorno, mese, anno, per scrivere i dati sulla eeprom cosa dovrei fare?
EEPROM.write(readCard, ora, minuti, secondi, giorno, mese, anno)????
se li dispone in automatico oppure devo dividerli io e specificare le celle in cui vanno inseriti?
se non chiedo troppo mi fareste vedere un esempio di codice?...

Devi usare un indice, vale a dire una variabile che contenga l'indirizzo al primo byte del BLOCCO di byte che contiene i valori.
Siccome abbiamo appurato che ti servono 12 byte, ammettendo che indice = n, il 1° byte del blocco puntato da indice è dato da:
Code: [Select]
EEPROM.write((indice*12+0), ora);
EEPROM.write((indice*12+1), minuti);
EEPROM.write(ecc.......
indice++;

peppe91

emh... :) non ho capito la questione dell'indice..l'indice a che servirebbe?

Go Up