void loop(){
if ( millis() - current >4000) {
digitalWrite ( 3,HIGH)
current=millis()
}}
void loop(){
if ( millis() - current >4000) {
digitalWrite ( 3,HIGH)
current=millis()
}}
E cosa sarebbe current in questo caso?
RAGIONA, non copiare cose a caso, ti è così difficile?
Ed impara a leggere ciò che scrivi...in pratica hai scritto..SE millis(il tempo..che parte da assieme alla board Arduino)-0(current=ZERO)è maggiore di 4000(Millisecondi)=accendi il Led.
Poi hai scritto che current,NON è più = a ZERO....ma uguale a millis().
NON MOLLARE..se capisci millis()...sei sulla strada buona.
cacccc......ioooooo, è possibile che non ci arrivo? ? ?
if (millis() =4000) {
digitalWrite (3, HIGH) }
kemosabesay:
if (millis() =4000) {
digitalWrite (3, HIGH) }
... sicuro che Arduino esegua quella linea esattamente al millisecondo 4000 ? No perché, se il programma arriva li al millisecondo 3999 o 4001 e non 4000 ... non funziona più !!!
Guglielmo
if (millis() >=4000){
digitalWrite(3,HIGH)}
in teoria basta che sia maggiore o uguale a 4000
yes!!
ciao Patrick, pensavo a te, ho provato il tuo sketch, ma la sirena non funge le frecce si.
non lo voglio ancora usare finchè non capisco il Millis, ma ho solo provato a vedere se andava ma purtroppo no
grazie
P.S. comincio a entrare nella prospettiva del millis?
kemosabesay:
ciao Patrick, pensavo a te, ho provato il tuo sketch, ma la sirena non funge le frecce si.
non lo voglio ancora usare finchè non capisco il Millis, ma ho solo provato a vedere se andava ma purtroppo nograzie
P.S. comincio a entrare nella prospettiva del millis?
ho fatto un errore io, pensavo che l'istruzione tone con il terzo parametro (tone(pin, frequenza,durata) ) fose bloccante (che blocca l'avanzamento del programma fino a quando non termina) mentre non lo è per cui devi modificare aggiungendo la riga delay(tempo) così:
void cicloAlarmSuGiu(int suono, byte tempo) {
tone(Sirena, suono, tempo);
delay(tempo);
}
mi spiace ma continua a non suonare
kemosabesay:
if (millis() >=4000){digitalWrite(3,HIGH)}
in teoria basta che sia maggiore o uguale a 4000
Bene.
Ora fallo spegnere 3 secondi dopo che l'hai acceso.
if (millis() >=7000) {
digitalWrite(3,LOW)}
Bene, spiega perché hai messo 7000.
perchè dopo che è arrivato a 4000 e accende continuando il conteggio nel frattempo arriva a 7000 e spegne
Ohmamma, ma perché 7000 e non, che so, 12000? Come l'hai ottenuto?
perchè millis è arrivato a 4000
quindi continua il conteggio
devo fare 3000 per fare spegnere
quindi aspetto che arrivi a 7000
perche è sbagliato stiamo parlando di un contatore automatico "infinito"
Non è sbagliato, sto solo cercando di farti ragionare un passo alla volta, ma è un'impresa, sembra che tu proprio non lo voglia fare.
Dunque di fatto hai scritto:
if (millis() >= 4000 + 3000) {
digitalWrite(3,LOW)
}
Quindi nella condizione che fa qualcosa dopo che è passato un certo tempo (3000 ms) da un evento (l'accensione del led) accaduto in un certo istante (4000 ms dall'accensione) hai inserito una somma di due numeri. Usando le proprietà delle disequazioni, spostiamo uno dei due numeri dall'altro lato:
if (millis() - 4000 >= 3000) {
digitalWrite(3,LOW)
}
Inizi a riconoscerlo? Diamo un nome al momento dell'accensione, ovvero trasformiamolo in una variable:
unsigned long istanteAccensione = 4000;
if (millis() - istanteAccensione >= 3000) {
digitalWrite(3,LOW)
}
Ti dice qualcosa? Riesci a capire dove va a finire ogni tassello e perché?
kemosabesay:
continua a non suonare
È solo che gli stati del processo non sono mutuamente esclusivi (svista di Patrik), cioè vengono controllate più if invece di una sola e la seconda inteferisce con la prima. La soluzione è sempre quella che ho scritto nel post # 62. Questa funziona (lasciando il delay(tempo) nella funzione 'cicloAllarmeSuGiu'):
if (digitalRead(Inclinometro) == LOW) {
if ((millis() - sirenaAccesa >= accendiSirena) ) {
if (passo == 0 && suonoSirena < 1000) {
suonoSirena += 1;
cicloAlarmSuGiu(suonoSirena, tempoSuono);
}
else if (passo == 0) {
passo = 1;
}
else if (passo == 1 && suonoSirena > 700) {
suonoSirena -= 1;
cicloAlarmSuGiu(suonoSirena, tempoSuono);
}
else if (passo == 1) {
passo = 0;
noTone(Sirena);
sirenaAccesa = millis();
}
}
}
else {
noTone(Sirena);
Serial.println("incl spento");
}
grazie Claudio dopo provo,
allora partendo dal presupposto che sono uno zuccone ....e qui non ci piove!!!
Se ho un cronometro in mano e so che dopo 4 secondi devo per esempio premere un pulsante, lo premo e so che dopo 3 secondi lo devo ripremere, aspetto che il cronometro arrivi a 7 secondi.
Se tolgo i 4 secondi torno indietro nel tempo.....
Si lo so che sbaglio , ma nella mia testa le cose funzionano cosi......e ti assicuro che non è che non ho voglia di imparare, altrimenti avrei gia smesso di scocciarvi, devo, a costo che mi mandiate a quel paese, capire sto cavolo di millis
Grazie
Tu a capire non ci stai neanche provando. La prova è che rispondi ai miei messaggi subito dopo che li ho scritti, senza invstire un po' di tempo a RAGIONARE e a tentare di arrivare ai concetti a cui sto cercando di portarti.
Prendi un foglio e fai 3 colonne, in cui scrivi.
E vedi cosa succede quando superi l'istante 7000.
Questa è l'ultimo suggerimento che ti do, il resto sta a te.