verifica codice

ciao
chiedo a qualcuno di indicarmi l’errore che commetto in questo codice

/*
 This example code is in the public domain.
 */

void setup() 
{                
int i;  //variabile indice
long ritardo[6];

for (i=2; i<8; i++)
{
  pinMode(i,OUTPUT);  //pin da 2 a 7 per input  
 // pinMode(i-4,INPUT);
}
}

void loop() 
{
[color=red]for (i=2; i<8; i++)  //pin da 2 a 7 [/color]
{
 ritardo[i-2]=analogRead(i-2);  //pin analogico
 
digitalWrite(i, HIGH);   // set the LED on
  delay(7);            
  digitalWrite(i, LOW);    // set the LED off
  delay(ritardo[i-2]);       

}
}

che mi dà questo errore

seminatrice_test.cpp: In function 'void loop()':
seminatrice_test:18: error: 'i' was not declared in this scope
seminatrice_test:20: error: 'ritardo' was not declared in this scope

il primo ciclo for passa il secondo no e non capisco perchè

grazie
stefano

Le variabili dichiarate nelle funzioni (variabili locali) hanno valore solo nelle funzioni stesse, tu hai dichiarato “int i” nella funzione setup e poi cerchi di richiamarla in loop dove non viene trovata nessuna variabile i.

Le soluzioni sono due o dichiari tutto ciò che ti serve fuori dalle funzioni (variabili globali) oppure ridichiari tutto nelle funzioni stesse.

Lo stesso problema lo avrai anche con il vettore ritardo…

Il codice seguente per esempio è corretto:

/*
 This example code is in the public domain.
 */
int i;
long ritardo[6];

void setup() 
{                

for (i=2; i<8; i++)
{
  pinMode(i,OUTPUT);  //pin da 2 a 7 per input  
 // pinMode(i-4,INPUT);
}
}

void loop() 
{
for (i=2; i<8; i++)  //pin da 2 a 7 [/color]
{
 ritardo[i-2]=analogRead(i-2);  //pin analogico
 
digitalWrite(i, HIGH);   // set the LED on
  delay(7);            
  digitalWrite(i, LOW);    // set the LED off
  delay(ritardo[i-2]);       

}
}

Puoi anche evitare di creare una variabile indice globale per i for se non ne hai bisogno nel resto del codice, ad esempio puoi riscrivere il for cosi ogni volta che ti serve:

for (int i=2; i<8; i++) {
 \\ciclo     
}

Senza preoccuparti della variabile i, che sarà sempre disponibile per ogni ciclo che la usa.

Spero di essermi spiegato bene…

Ciao

Spero di essermi spiegato bene...

Sí, penso di sí; non saprei spiegalo meglio. Ciao Uwe

Se mi permetti, ti correggo un errore di "scelta" di tipo di dati. 1) variabile "i" è inutile scegliere un tipo di dati "int" per una variabile il cui valore non supererà mai il numero 255, visto che la usi come indice per accedere all'array ritardo ed ai pin analogici del micro. Usa un tip "byte", risparmiando 1 byte nell'occupazione di memoria: gli int occupano 2 byte, i byte 1 solo. 2) array "ritardo" è inutile usare un tipo di dati "long" per un array i cui elementi conterranno al massimo il valore 1023 (la lettura massima restituita da un pin analogico): memorizzi 10 bit in un contenitore da 32 bit (un "long" occupa 4 byte). 6 elementi di tipo long occupano 6x4 byte = 24 byte complessivi quando usando un tipo "int" (che arriva fino a +32767) puoi contenere lo stesso la lettura dei pin ma occupando esattamente la metà (6x2 byte=12).

ciao ok grazie ho compreso l'errore, sono un vero dilettante, e anche il discorso dell'occupazione di memoria

stefano

se non hai bisogno dei segni e non ci sono numeri negativi da maneggiare puoi risparmiare ancora qualcosina ;)