Mi spiegate gentilmente come posso utilizzare 2 daley che hanno dei compiti diversi contemporaneamente???
Se il tuo problema è comunque eseguire le due cose indipendentemente ed avere dei ritardi indipendenti, allora ... devi cambiare strategia, non usare la delay() ma usare, in modo opportuno, la millis() ...
... studiati prima QUESTO articolo di Leo, dopo di che studiati QUESTO altro.
Guglielmo
Fabio, benvenuto.
Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! (Part 1) - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum
- qui una serie di schede by xxxPighi per i collegamenti vari: ABC - Arduino Basic Connections - Megatopic - Arduino Forum
- qui le pinout delle varie schede by xxxPighi: Pinout Diagram - Megatopic - Arduino Forum
- qui una serie di link utili: Link utili elettronica - Megatopic - Arduino Forum
Grazie a tutti per avermi risposto così velocemente... Però non ho capito ad esempio come faccio a creare un semaforo con il millis().
Non puoi avere 2 delay contemporaneaente. Un delay blocca Arduino per il tempo definito.
Usa millis() come descritto nel esempio "wait without delay" allegato al IDE.
Ciao Uwe
Si che si puó utilizzare 2 delay per svolgere mansioni diverse...
Con il ciclo for ho sperimentato questa cosa...
for (int i =0, i <10 , i++ )
{
digitalWrite (led, HIGH);
delay (500);
digitalWrite (led, LOW);
delay (500);
}
Quindi otteniamo un lampeggio di un led per circa 10 secondi
Un deley é usato per il ritardo del led fra spento e acceso.
Il ritardo intrinsego é il numero di volte con la quale impostiamo un ciclo for
Percio 500+500 =1000 *10 volte =10000=lampeggio per 10 secondi
@alessiomariucci adesso prova a far lampeggiare un LED per 10 secondi 2 volte al secondo e l' altro per 20 secondi 3 volte.
Ciao Uwe
@ alessiomariucci : ma ti pare che se era così banale gli rispondevamo in quel modo ???
Guglielmo
fabio22:
Grazie a tutti per avermi risposto così velocemente... Però non ho capito ad esempio come faccio a creare un semaforo con il millis().
Se hai letto attentamente i due link che ti ho messo, dovresti aver capito che il trucco è creare delle temporizzazioni NON bloccanti usando delle strutture del tipo :
if(millis() - myPreviousMillis > myInterval) {
...
cose da fare allo scadere del periodo voluto
...
}
All'inizio non è semplice ... devi ricordare che sei in un LOOP infinito (la funzione loop()) e quindi, in continuazione giri e incontri condizioni di questo tipo con cui scheduli degli eventi.
Quei due articoli che ti ho messo prima ... non vanno solo letti ... vanno studiati e capiti passo passo XD XD XD
Guglielmo
alessiomariucci:
Quindi otteniamo un lampeggio di un led per circa 10 secondi
Un deley é usato per il ritardo del led fra spento e acceso.
Il ritardo intrinsego é il numero di volte con la quale impostiamo un ciclo for
Percio 500+500 =1000 *10 volte =10000=lampeggio per 10 secondi
Madame Ada Lovelace si sta rivoltando nella tomba...
leo72:
Madame Ada Lovelace si sta rivoltando nella tomba...
Donna GENIALE ... ti rendi conto che il prossimo anno è il bicentenario della sua nascita (1815) ??? Questa, 200 anni fa ... già teorizzava di algoritmi e macchine di calcolo ...
... "chapeau !" !!!
Guglielmo
Chissà perché gente del genere non nasce più!
Ieri a Firenze hanno festeggiato i 450 anni dalla morte di Michelangelo Buonarroti, altro personaggio leggermente famoso 8)
Ad esempio ragazzi come si può creare un semafero con millis()
Io lo fatto con il daley in questo modo:
void setup() {
pinMode(8,OUTPUT);
pinMode(10,OUTPUT);
pinMode(9,OUTPUT);
}
void loop() {
delay (2000) ;
digitalWrite (8, HIGH); // LED ROSSO
digitalWrite (9, LOW); // led VERDE
digitalWrite (10, LOW); // led GIALLO
delay (2000) ;
digitalWrite (8, LOW); // led rosso
digitalWrite (9, HIGH); // led vede
digitalWrite (10, LOW); // led rosso
delay (1000) ;
digitalWrite (8, LOW); // led rosso
digitalWrite (9, HIGH); // led vede
digitalWrite (10, HIGH); // led rosso
delay (00);
}
edit by mod: per favore includi il codice usando gli appositi tag code
Scusa Fabio ma ... li hai STUDIATI i link che ti ho dato in QUESTO post ???
Perché dalla domanda sembra che tu non li abbia neanche guardati ...
Guglielmo
fabio22:
Gli ho dato una fatta lettura
Ehhhh ???
Guglielmo
Ad esempio in questo codice lui mi dovrebbe far lampeggiare prima il led(13) e dopo il led(12) alternandosi continuamente...
int led_b, led_r, led_v,led_c, time1, time;
boolean v, r, b;
void setup(){
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
led_b = millis();
led_r = millis();
led_v = millis();
led_c=millis();
v = false;
r = false;
b = false;
}
void loop (){
time = millis();
time1 = millis();
verde();
blu();
}
void verde() {
if((led_v+1000)<time){
digitalWrite(13,HIGH);
if ((led_v+2000)<time){
digitalWrite(13,LOW);
led_v = millis();
}
}
}
void blu() {
if((led_b+2000)<time1){
digitalWrite(12,HIGH);
if((led_b+3000)<time1){
digitalWrite(12,LOW);
led_b = millis();
}
}
}
Però ho notato dopo che si accende il led(13) e dopo il led(12) si accendono contemporaneamente per dopo ricominciare da capo... Come mai?
Fabio, perdona ...
... spiega esattamente, step-by-step, quello che vorresti veder funzionare e poi proviamo a scrivere un codice ... decente ... XD XD XD
Guglielmo
Intanto la ringrazio per la sua pazienza...
Allora io vorrei far lampeggiare 2 led uno al contrario dell'altro
Per "uno al contrario dell'altro" ... intendi che quando uno è acceso l'altro è spento ??? Perché questo è banale e non vedo l'uso di due rami di controllo separati ...
Guglielmo
Mi potrebbe far vedere il codice come deve essere per capire sta cavolo di funzione che ancora non lo potuta capire...