Go Down

Topic: If-Switch-Array-Millis-For (Read 5646 times) previous topic - next topic

Testato

secondo voi perche' non conta questo contatore ?
ricevo solo 999999 ad ogni secondo

Code: [Select]
for (int v=0;v<10;v++) { //counting from 0 to 9

  V1=V2=V3=V4=V5=V6=(int)(v);   

       delay(1000);
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

lesto

cosa stampi e cosa sono V1 etc... in oltre è inutile il cast ad int, essendo v già un int
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Testato

#77
Nov 12, 2011, 01:45 pm Last Edit: Nov 12, 2011, 01:49 pm by Testato Reason: 1
le V sono int, e le stampo a monitor

vorrei che mi apparisse

000000
111111
222222
....
999999

e poi ripartire da 000000


Code: [Select]
void contiamo ()
{
 
 
  for (int v=0;v<10;v++) {                    //counting from 0 to 9

  V1=V2=V3=V4=V5=V6=(int)(v);   

       delay(1000);

  }


  DisplayNumberSet(V1,V2,V3,V4,V5,V6);   
 
}



invece mi appare
999999
999999
999999



- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

lesto

per forza, stampi i nuymeri quando il ciclo è finito, quindi quando valgono 9... prova a spostare il display all'interno del for...
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72


per forza, stampi i nuymeri quando il ciclo è finito, quindi quando valgono 9

Eh sì...  :smiley-sweat:

Testato

#80
Nov 12, 2011, 06:04 pm Last Edit: Nov 12, 2011, 06:07 pm by Testato Reason: 1
ho gia' provato, e' stata la mia prima prova

cioe' cosi' giusto ?

Code: [Select]
void contiamo ()
{
 
 for (int v=0;v<10;v++) {                    //counting from 0 to 9

 V1=V2=V3=V4=V5=V6=(int)(v);  

      delay(1000);

 DisplayNumberSet(V1,V2,V3,V4,V5,V6);  
 }
 
}



non funge, resta sempre su 999999
In piu' se ho capito bene il comando questo codice dovrebbe contarmi da 0 a 9 e poi fermarsi, cosa ci devo aggiungere per farlo andare in continuazione e quindi ripartire da 0 ?
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

lesto

così è giusto, magari l'errore è in DisplayNumberSet...

per la seconda domanda, basta mettere contiamo() nel loop...
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Testato

l'ho provato isolando il contatore dal resto dello sketch e' funziona.
Anzi arrivato a 9 riparte anche da 0 come serve a me.

Il che va bvene, ma mi aspettavo che non lo facesse, leggendo nel playgroud dice che una volta arrivato alla fine il ciclo FOR si ferma.
Non e' vero quidi ?
Ogni for arriivatoalla fine riparte da zero ?
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Testato


per la seconda domanda, basta mettere contiamo() nel loop...

Quindi intrinsecamente il comando FOR ha un azzeramento della variabile alla fine del ciclo ? Non e' menzionata questa cosa nelle istruzioni del FOR, io la aggiungerei
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72

Scusa ma non ti seguo.
Il ciclo for continua finché si verifica la condizione. Nel tuo caso:
Code: [Select]
for (int v=0;v<10;v++)
fino a che
perché equivale a:
Code: [Select]
DisplayNumberSet(v,v,v,v,v,v);    v diventa uguale o maggiore di 10.

Inotlre non capisco questo:
Code: [Select]
V1=V2=V3=V4=V5=V6=(int)(v);  
DisplayNumberSet(V1,V2,V3,V4,V5,V6);  

Perché tutti quegli assegnamenti a variabili diverse dello stesso valore?

leo72


Quindi intrinsecamente il comando FOR ha un azzeramento della variabile alla fine del ciclo ? Non e' menzionata questa cosa nelle istruzioni del FOR, io la aggiungerei

No, perché tu usi una variabile LOCALE che vale solo internamente al ciclo for:

for (int v=0;v<10;v++)

Al di fuori del ciclo, v non esiste.

Testato

azz, e qui abbiamo imparato la differenza tra variabile locale e globale.
Grazie mille come al solito. Quindi se ho capito non e' che la "v" si azzera, ma sparisce proprio dal pianeta terra, quindi quando rientro nel ciclo FOR viene ricreata in quel momento, con il rispettivo valore dichiarato.

quella multitudine di V e' sempre per la questione valvolare, non farci caso :)

grazie ancora a Te e Lesto
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

leo72



Si chiama spazio dei nomi ed indica la visibilità di una variabile:

Code: [Select]
int a;
void fattiMiei() {
  int b;
  for (int c=0;c<10;c++) {
    ..
  }
}


"a" è vista globalmente, b solo all'interno della routine fattiMiei, "c" all'interno del ciclo for.

Testato

thanks
poi vi fo sapere perche' diavolo nello sketch reale non funge :)
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Testato

devo eliminare il delay, di certo e' questo il problema, e se anche non fosse lo devo eliminare lo stesso.
allora ho provato a fare
Code: [Select]
    if (millis() > reset_timer + 1000)
   {       
   
      for (int v=0;v<10;v++)
      {         
       
     V1=(int)(v); 
}
       reset_timer=millis();
  }


ma logicamente lui fa un conteggio velocissimo 0-9 e poi si ferma un secondo. mentre a me serve che conta ogni secondo.

in poche parole avrei bisogno di un "For without delay" (sullascia del blink without delay) ma non trovo info.
Come si fa a temporizzare un ciclo for ?
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Go Up