Media di valori acquisiti tramite AnalogRead negativa [RISOLTO]

Salve a tutti,
per un progetto che sto realizzando mi serve acquisire una serie di valori dall’ingresso analogico e farne la media.
Per verificare la correttezza del software ho deciso di stampare sul monitor seriale la media ottenuta ad ogni ciclo, ma mi ritrovo con valori sia positivi che negativi.
Per quanto ne so l’ADC di Arduino non può fornire valori negativi.
Utilizzo un Arduino UNO.

Di seguito il listato del software utilizzato:

int valori[500];
int media;

void setup() {
  Serial.begin(9600);
  }

void loop() {
  media=0;
  for (int i=0; i<500; i++){
      valori[i]=analogRead(A1);
      }
  for (int i=0; i<500; i++){
      media=media+valori[i];
      }
  media=media/500;
  Serial.println(media);
  delay(10);
  }

Lo schema elettrico montato è caricato come allegato.

Come segnale esterno provavo a dare i 3,3 V di Arduino, sia dall’ingresso A0 che attaccandolo al diodo D1. Nel primo caso il valore visualizzato era 20, nel secondo 2.

L’unica cosa che mi potrebbe venire in mente per cui i segnali acquisiti abbiano un valore negativo è un problema di masse…

I due diodi sono presenti perché all’ingresso dovrò dare poi un segnale audio ed è quindi necessario tagliare la parte negativa.

Ingresso Arduino.bmp (1.39 MB)

Credo che il problema sia l’int che vada in overflow con 500 letture.
Dovrebbe essere sufficiente fare così:

long media;

void setup() {
  Serial.begin(9600);
  }

void loop() {
  media=0;
  for (int i=0; i<500; i++){
      media+=analogRead(A1);
      }
  media=media/500;
  Serial.println(media);
  delay(10);
  }

Mi ero dimenticato di controllare che il tipo di variabile potesse contenere i valori necessari... Difatti 1024(massimo valore acquisibile)*500 = 512000 mentre un int può arrivare al massimo a 32768.

Esatto grazie Dario. Mi ero dimenticato di verificarlo!

Marco