Buona sera a tutti.
Avrei un piccolo problema con il programma che sto sviluppando!
Uso un array di tipo int: int invio[15][20];
Questa variabile mi serve per creare un buffer per poi inviare i dati che ricevo.
Praticamente la mia "fonte" di dati mi fornisce un array di 15 elementi, questa serie può essere ripetuta al massimo 60 volte.
Come vedete fino ad ora sono riuscito a registrare 20 sequenze, se alzo questo valore dell''array l'arduino smette di fare qualsiasi cosa e si blocca completamente.
Mi basterebbe riuscire a fare int invio[15][60];
per risolvere il problema, ma non ci riesco...
Qualcuno ha qualche idea??
Grazie mille in anticipo per le risposte!!
Ciao!!!
Non puoi farlo semplicemente perché la memoria dell'Atmega328 non reggerebbe questo array.
15*60=900 elementi per 2 byte, tanti ne occupano i dati di tipo int, fanno 1800 byte. Se consideri che la SRAM del chip è di 2048 byte e che dentro ci stanno anche l'heap, lo stack, il buffer seriale e tutte le altre variabili del programma, capisci come non riuscirai mai con questo chip a memorizzare tale matrice.
Ti consiglio l'uso di un altro chip, se proprio hai bisogno di queste dimensioni.
Urca che risposta tempestiva...
Infatti, avevo capito anche io che l'errore poteva essere questo, ma non ho idea di come poter fare per risolverlo, ho proprio la necessità di creare 60 ripetizioni da 15 elementi ciascuna!
Se cambio il tipo di dato e passo a char teoricamente posso farcela?
Altrimenti conoscete altri modi, mi va bene anche salvare il tutto su una memoria esterna, ma poi dovrei richiamare i dati per reinviarli tramite eth.
GRAZIE a tutti!
Con i byte o char dimezzi il consumo di ram, ma se poi stai usando la ethernet shield, devi anche mettere in conto il consumo dello sketch e di tutte le librerie.
L'alternativa è usare una EEPROM esterna I2C, sono chippettini da pochi euri l'uno che possono contenere da qualche centinaio di byte di dati fino a diverse decine. Ad esempio il 24LC512 contiene 64 kB di dati. Hai il problema di dover scrivere e rileggere da una memoria lenta ma così puoi comunque risolvere.
Alternativamente, se hai l'Ethernet con la SD, puoi salvare l'array su SD e poi rileggerlo da lì.
Ci sono SRAM e FRAM con iterfaccia I2C compatibili con i EEPROM.
Ciao Uwe