Salvare numeri in array?

Buonasera a tutti, avrei bisogno di una bella delucidazione per il progetto che sto portando avanti del cronotermostato di casa.

In poche parole ho un arduino mega e con questo regolo la temperatura delle zone dell'appartamento di casa tramite una scheda relè.

Adesso avrei aggiunto la parte di sketch che mi dice quanti secondi resta acceso il relè una volta eccitato. Il mio problema è quello di andare a salvare i vari numeri da qualche parte e per questo pensavo agli array però non riesco a capire se possano essere la soluzione migliore che mi serve oppure no.

Per esempio, se io dichiaro l'array devo dargli una dimensione, ma io non sò a priori quante volte i miei relè si ecciteranno durante il giorno.

Grazie per l'aiuto.

Spiega meglio cosa vorresti fare esattamente.
Credo che tu voglia creare una sorta di archivio storico che conserva i tempi di accensione dell'impianto nelle varie stanze, è così?
Per prima cosa, dovresti allora stabilire per quanti giorni vuoi conservare i dati.
Potresti conservare una settimana e poi fare la media settimanale e conservare quella, così per 12 mesi avrai solo 52 dati per ogni stanza... vedi tu.
Spiega anche cosa vuoi conservare, le ore di accensione o tutti gli eventi di accensione e spegnimento con l'orario annesso.

paulus1969, grazie per l'aiuto.

La mia idea è proprio come hai scritto te, conservare i dati per averli come archivio temporaneo, più che altro per capire se i vari valori che imposto (isteresi o modifiche del setpoint durante le varie fasce orarie per esempio) vanno bene oppure cosa è più opportuno modificare per trovare un giusto equilibrio.

Se salvassi i dati la mia idea sarebbe quella di caricarli su un grafico e capire l'andamento della temperatura durante la giornata però effettivamente per quello che vorrei fare io dovrei avere molti più dati alla mano e forse sarebbe meglio a questo punto che mi studiassi fuori come usare lo slot SD della ethernet shield.

In questo modo non sarei vincolato da nulla e potrei salvare facilmente qualsiasi cosa o sbaglio?

Intanto un primo link:
http://arduino.cc/en/Reference/Array
In rete si trova tanta roba, basta cercare "c array".

Gli array sono comodi ma: devi dichiararli con una dimensione predefinita, e ti occupano memoria SRAM.
Inoltre, tolta l'alimentazione alla scheda, tutti i dati vanno persi.
L'alternativa è usare la EEPROM interna, ma: hai un numero di scritture non infinite, e la dimensione della EEPROM è ridotta. Potresti pensare ad una EEPROM esterna, ma dovresti modificare il circuito per aggiungere il chippino. Poi avresti comunque il problema di come accedere a quei dati.

Suggerisco, soprattutto se vuoi gestire poi i dati da un computer, di sviluppare la tua ultima idea, ossia l'uso di una SD su cui riversare i dati man mano che li elabori.

Se hai la scheda SD e la ethernet direi che hai risolto.
Memorizzi i dati sulla SD in file di testo (direi in CSV) e quando ti servono li invii al PC e puoi fare tutti i grafici e le statistiche che ti servono.
Su una SD puoi memorizzare secoli di dati e rimangono anche se togli l'alimentazione.

Vi ringrazio per le risposte, il mio dubbio era proprio quello, non capivo se dovevo preventivamente dichiarare la lunghezza dell'array oppure se potessi aggiungere dati continuamente.

Ho provato a fare qualche prova con una SD e funziona benone, e fin qui ci siamo, adesso provo ad aprire un altro post per chiarirmi una cosa sulla creazione di un website.

Grazie ancora,
buona giornata

Riagganciandomi a questo topic, ho implementato l'uso della SD per il salvataggio dei dati, con il controllo iniziale se la sd e il file dove vado a scrivere è presente o meno.

Al momento durante la fase di test sto salvando:

Luminosità stanza Ora:minuto:secondo

il tutto ad un intervallo fisso. Mi piacerebbe fare in modo di poter pescare gli ultimi valori di "Ora:minuto:secondo" salvati.

Al momento riesco a leggere tutti i dati salvati sulla SD tramite SD.open, qualche consiglio su come andare a leggere solo l'ultimo?

Vi ringrazio ancora!

Devi formattare i tuoi dati in modo che ogni blocco che salvi sia di lunghezza fissa. In questo modo puoi usare la funzione seek() e posizionarti nel punto da cui vuoi leggere i dati.

Faccio un esempio. Mettiamo che il tuo blocco dati sia di 10 byte. Se vuoi leggere il 3° blocco non devi fare altro che posizionarti alla posizione 10*(3-1)=20. Difatti da 0 a 9 hai il 1° blocco, da 10 a 19 hai il 2° blocco e da 20 a 29 hai il 3° blocco (la numerazione parte da 0).

Prova così.

Spettacolo! Dopo provo così, i dati saranno formattati sempre allo stesso modo con data e ora salvati negli ultimi byte.

L'unica cosa è che non conosco mica quale sia l'ultimo blocco che scrivo visto che ne scrivo uno ogni 15 minuti..potrei incrementare un contatore ad ogni salvataggio così da sapere a che blocco sono..

Grazie!

Stai solo attento a non andare a leggere oltre la fine del file, non so se ti si pianta il programma o ti restituisce dati inservibili. Io ho fatto un esempio un pò semplicistico, valuta tutte le possibili condizioni di errore.

Ho capito, più tardi se riesco provo e ti faccio sapere!

Buona giornata