0
Offline
Faraday Member
Karma: 17
Posts: 3898
Arduino rocks
|
 |
« Reply #15 on: December 29, 2011, 05:46:53 am » |
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
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7340
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #16 on: December 29, 2011, 06:21:59 am » |
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
Tesla Member
Karma: 81
Posts: 8184
:(){:|:&};:
|
 |
« Reply #17 on: December 29, 2011, 10:15:35 am » |
il while non serve a nulla while(millis()<=time[y]){} l'assegnamento non ha significato visto che viene fatto ogni loop, come anche lo switch.
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #18 on: December 29, 2011, 10:34:24 am » |
cioè? a me questo serve per provare il programma finale che dovrebbe essere una roba tipo così: 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
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #19 on: December 29, 2011, 10:41:51 am » |
La domanda posta è: a che dovrebbe servire questo? while(millis()<=time[y])
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #20 on: December 29, 2011, 10:46:31 am » |
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
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #21 on: December 29, 2011, 10:54:35 am » |
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: if (millis()>time[y]) { ....bla bla bla }
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #22 on: December 29, 2011, 10:59:58 am » |
si a me serve aspettare si ma non più di quel che serve, comunque si potrei fare anche con un if... grazie
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 81
Posts: 8184
:(){:|:&};:
|
 |
« Reply #23 on: December 29, 2011, 11:25:37 am » |
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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #24 on: December 29, 2011, 11:28:15 am » |
ma io non so quanto una funzione dura precisamente, infatti per simularlo ho messo un tempo random, per questo mi servono 4 valori
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 81
Posts: 8184
:(){:|:&};:
|
 |
« Reply #25 on: December 29, 2011, 11:37:30 am » |
beh ma basta aggiornare il tempo di delay PRIMA di lanciare la funzione, e quindi lanciare la funzione. una cosa del genere: loop(){ if ( tempoAttesa>=millis() ){ tempoAttesa=millis()+6000; switch (count){ case 0:[blablabla]; } } }
|
|
|
|
|
Logged
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #26 on: December 29, 2011, 11:41:58 am » |
eh ma ho 4 funzioni e ogniuna deve avere il suo tempo
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 81
Posts: 8184
:(){:|:&};:
|
 |
« Reply #27 on: December 29, 2011, 12:10:00 pm » |
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
|
|
|
|
|
Vicenza, Italy
Offline
God Member
Karma: 4
Posts: 829
ƎR like no other.
|
 |
« Reply #28 on: December 29, 2011, 12:16:03 pm » |
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
|
|
|
|
|
0
Offline
Tesla Member
Karma: 81
Posts: 8184
:(){:|:&};:
|
 |
« Reply #29 on: December 29, 2011, 12:29:52 pm » |
srivi il codice e poi vediamo
|
|
|
|
|
Logged
|
|
|
|
|
|