Eh? Qualcosa non mi torna in quest'altra for():
byte varSample;
for (varSample <= (Sample - 1); varSample++;){
Il primo parametro è l'inizializzazione ("varSample <= (Sample - 1)" ?), il secondo la condizione per il ciclo ("varSample++" ??), il terzo la reinizializzazione (vuoto!).
Questa quindi equivale di fatto a:
varSample <= (Sample - 1);
while (varSample++) {
...
}
Mi sa che hai messo un punto e virgola sbagliato, e poi non inizializzi il valore iniziale di varSample.
Forse se "Sample" è il numero di campionamenti, volevi forse fare:
for (byte varSample=0;varSample < Sample; varSample++) {
che equivale a:
byte varSample = 0;
while (varSample < Sample) ) {
...
varSample++
}
Era questo che volevi fare?
Insomma di fatto leggi "Sample" campioni dalla porta anlogica passata a parametro e questo è ok, ma leggerli così tutti di seguito a che serve? Devi metterci un minimo di delay tra una e l'altra. Inoltre azzerare le variabili Somma e varSample non serve a nulla, sono locali alla funzione e si distruggono all'uscita dalla stessa.
Io farei così:
void readCH(byte n){
unsigned int Somma;
for (byte i=0; i < Sample; i++;){
Somma += analogRead(CH[n]);
delay(5);
}
Vdigital[n] = Somma / Sample;
}