Loading...
Pages: 1 [2] 3   Go Down
Author Topic: dubbi sulla funzione millis()  (Read 540 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Faraday Member
**
Karma: 17
Posts: 3898
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: 74
Posts: 7340
"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
Tesla Member
***
Karma: 81
Posts: 8184
:(){:|:&};:
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

Vicenza, Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 829
Ǝ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" Robotics Team
ƎR like no other.

Forum Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 219
Posts: 16431
Don't know what I do
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Vicenza, Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 829
Ǝ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" Robotics Team
ƎR like no other.

Forum Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 219
Posts: 16431
Don't know what I do
View Profile
 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


Vicenza, Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 829
Ǝ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" Robotics Team
ƎR like no other.

0
Offline Offline
Tesla Member
***
Karma: 81
Posts: 8184
:(){:|:&};:
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

Vicenza, Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 829
Ǝ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" Robotics Team
ƎR like no other.

0
Offline Offline
Tesla Member
***
Karma: 81
Posts: 8184
:(){:|:&};:
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

Vicenza, Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 829
Ǝ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" Robotics Team
ƎR like no other.

0
Offline Offline
Tesla Member
***
Karma: 81
Posts: 8184
:(){:|:&};:
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

Vicenza, Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 829
Ǝ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" Robotics Team
ƎR like no other.

0
Offline Offline
Tesla Member
***
Karma: 81
Posts: 8184
:(){:|:&};:
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
Print
 
Jump to: