Variabili funzioni Void non ritentive

Buonasera a tutti,
sto avendo dei problemi con il passaggio dei parametri ad una funzione Void. In teoria i valori delle variabili passate come parametri alla funzione dovrebbero incrementare ma in pratica rimangono sempre a zero.
Per semplicità quindi ho fatto un passo indietro e ho provato a creare una banale funzione Void con un contatore (anche questa non funziona). Di seguito il codice:

int TEST;

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

void loop() {
  INC(TEST);  
  Serial.print("Valore: ");
  Serial.println(TEST);
}

void INC (int Increment)
  {
  Increment++;
  }

Il monitor seriale riporta sempre il seguente output: “Valore: 0”

Potete dirmi cosa sto sbagliando? La funzione, quando richiamata, non dovrebbe leggere il valore memorizzato al richiamo precedente e quindi incrementare correttamente il valore?

Portate pazienza ma con il #C sono veramente scarso.

Mi scuso in anticipo, immagino che la cosa sia già stata trattata diverse volte, ma nonostante le mie ricerche sul forum non ho trovato nulla per questo caso specifico.

Grazie,

Nicolas

Il C passa i parametri by value, dunque ne viene fatta una copia che esiste solo all'interno della funzione chiamata.

Per ovviare puoi passare un puntatore o, in C++, una reference. Cambia quindi il tuo parametro in:

int& increment

void INC (int Increment)
  {
  Increment++;
  }

La variabile Increment esiste solo nella funzione INC perché la crei in quella funzione.

Devi usare una variabile globale nella funzione INC (come hai giá fatto con la variabile TEST) oppure dare come valore di uscita della funzione la variabile di ritorno oppure dai alla funzione INC il puntatore alla variabile TEST.

TEST = INC(TEST);
...

int INC (int Increment)
  {
  Increment++;
return(Increment);
  }

infatti, non stava incrementando TEST, ma Increment per poi stampare TEST in seriale che è e rimane sempre 0...