Go Down

Topic: Memoria finita? (Read 580 times) previous topic - next topic

Baldo4President

Ciao

Sono ai primi passi.
Ho creato uno sketch che legge il segnale del TMP36 del kit sul pin analogico e  restituisce la media dei valori.

Se aumento il numero di campioni (variabile camp) oltre i 450 arduino si resetta in continuazione.

Ho provato anche a lasciargli piu tempo col delay all'interno del for ma nulla
Sono arrivato a tappo con la memoria?

Code: [Select]
  int camp=400; //numero campioni
  int N=0;
  float temp=0;
  float array[camp];
 
  for(N=0;N<=camp-1;N++)
  {
    array[N]=((analogRead(tempin)/1024.0*5)-0.5)*100;
    delay(10);

  temp=temp+array[N];
  }
 
  temp=(temp/camp);
 

gpb01

Arduino UNO (... immagino tu abbia quello) ha solo 2 KBytes di memoria SRAM. Ogni variabile float occupa 4 bytes ... fai due conti e risponditi da solo  :smiley-mr-green: :smiley-mr-green: :smiley-mr-green:

Guglielmo
Search is Your friend ... or I am Your enemy !

Baldo4President

Come sospettavo, è tutto un complotto...  XD

Grazie!

nid69ita

Non c'entra con il problema, ma guardando il calcolo, io metterei anche il *5  come  *5.0
my name is IGOR, not AIGOR

PaoloP

Così ottieni lo stesso risultato ma senza il vettore.
Code: [Select]
int camp = 400; //numero campioni

  unsigned long somma = 0;
  for (int N = 0; N < camp; N++)
  {
    somma += analogRead(tempin);
    delay(10);
  }
  float temp = (((5.0 * (float)somma / (float)camp) / 1024) - 0.5) * 100;

uwefed

Anche io non credo che sia necessario memorizzare tutti i valori letti per fare una media.

Quote
, è tutto un complotto...
non é niente un complotto

se vuoi occupare 450 * 4 Bytes (1800) in un sistema che ha solo 2048 byte RAM avrai problemi.
Ciao Uwe

Go Up