Pages: 1 [2] 3   Go Down
Author Topic: dubbi sulla funzione millis()  (Read 1014 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5611
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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"
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10113
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

il while non serve a nulla

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

l'assegnamento non ha significato visto che viene fatto ogni loop, come anche lo switch.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

cioè? a me questo serve per provare il programma finale che dovrebbe essere una roba tipo così:
Code:
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...
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21666
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 313
Posts: 21666
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
if (millis()>time[y]) {
  ....bla bla bla
}
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si a me serve aspettare si ma non più di quel che serve, comunque si potrei fare anche con un if...
grazie
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10113
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ma io non so quanto una funzione dura precisamente, infatti per simularlo ho messo un tempo random, per questo mi servono 4 valori
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10113
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

una cosa del genere:
Code:
loop(){
  if ( tempoAttesa>=millis() ){
    tempoAttesa=millis()+6000;
    switch (count){
      case 0:[blablabla];
    }
  }
}
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

eh ma ho 4 funzioni e ogniuna deve avere il suo tempo
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10113
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10113
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

srivi il codice e poi vediamo
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: 1 [2] 3   Go Up
Jump to: