Go Down

Topic: dubbi sulla funzione millis() (Read 1 time) previous topic - next topic

Testato

mi associo al consiglio di togliere il while. Dal while non puoi uscire, tutto il resto del programma sara' intrappolato li' dentro. il loop stesso di arduinop e' un while.
Sostituiscilo con il "blink without delay"
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

astrobeed


Dal while non puoi uscire,


Per dirla tutta da una "while", ma anche da una "for", puoi uscire quando ti pare usando la "break" indipendentemente dal fatto che la condizione determinante del ciclo sia vera o falsa.

lesto

il while non serve a nulla

Code: [Select]
while(millis()<=time[y]){}

l'assegnamento non ha significato visto che viene fatto ogni loop, come anche lo switch.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ƎR

cioè? a me questo serve per provare il programma finale che dovrebbe essere una roba tipo così:
Code: [Select]
void loop()
{
if((PINA>=B01000000)&&(er==0))
{
  output:
  x=(PINA & B11000000)/64;
  TinySerial.print(value[x-1]);
  er=1;
}
else
{
  while(millis()<=time[y])
  {
   if(PINA<B01000000)er=0;
   else if((PINA>=B01000000)&&(er==0))goto output;
  }
  time[y]=millis()+50;
 
  switch(y)
  {
   case 0:{BallUS();                y=1;}break;
   case 1:{value[2]=LRUS(value[2]); y=2;}break;
   case 2:{value[1]=FUS();          y=3;}break;
   case 3:{value[0]=BUS();          y=0;}break;
  }
   
  if(PINA<B01000000)er=0;
}
}

ci sto lavorando per sistemarlo...
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72

La domanda posta è: a che dovrebbe servire questo?
Code: [Select]
while(millis()<=time[y])

ƎR

time[y] ha il valore di millis + 6 secondi; quindi finchè millis è minore o uguale a time[y], cioè se non sono passati almeno 6 sec dall'ultima volta che hai acceso il led deve aspettare... è sbagliato?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72

Se devi solo aspettare, basta che tu metta un delay(6000).

Se devi controllare ed entrare nel ciclo in caso positivo oppure fare altro in caso negativo, puoi usare un if:

Code: [Select]
if (millis()>time[y]) {
  ....bla bla bla
}

ƎR

si a me serve aspettare si ma non più di quel che serve, comunque si potrei fare anche con un if...
grazie
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

lesto

se devi aspettare 6 secondi e vuoi usare millis(), allora usa una variabile sola... l'array ti serve se ogni operazione ha un sdelay differente e quindi in ogni cella dell'array metti un delay differente.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ƎR

ma io non so quanto una funzione dura precisamente, infatti per simularlo ho messo un tempo random, per questo mi servono 4 valori
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

lesto

beh ma basta aggiornare il tempo di delay PRIMA di lanciare la funzione, e quindi lanciare la funzione.

una cosa del genere:
Code: [Select]

loop(){
 if ( tempoAttesa>=millis() ){
   tempoAttesa=millis()+6000;
   switch (count){
     case 0:[blablabla];
   }
 }
}
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ƎR

eh ma ho 4 funzioni e ogniuna deve avere il suo tempo
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

lesto

allora tu metto lo switch fuori, e la if con l'assegnazione dentro.... ovviamente ogni if avrà la sua variabile, eventualmente dentro un array se ti è più comodo.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ƎR

si beh ma è un'operazione comune a tutte le funzioni che devo scegliere con lo switch, tanto vale lasciarlo fuori... pero potrei fare che svolge la funzione che ha meno tempo da aspettare, ma mi sa che andrebbe comunque in ordine visto hanno tutte gli stessi tempi di recupero...
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

lesto

srivi il codice e poi vediamo
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up