impulso

salve a tutti
sono nuovo , forse non e' il posto giusto per postare la mia domanda ma mi scuserete

ho un problema nel compilare lo sketch , con la funzione if(digitalRead(tasto_D)==LOW) devo andare a leggere se un pulsante e' stato premuto oppure no' ,il mio problema e' che 'l'impulso sul tasto D non e' prolungato abbastanza e
non avviene proprio quando e' eseguita quella riga del programma , quindi il tasto D e' stato premuto , ma non viene letto dalla funzione di cui sopra .Chiedo come posso fare ,a , far vedere che il tasto e' stato premuto ,anche se non proprio nell'istante giusto ?
vale a dire posso memorizzare l'avvenuta pressione del tasto D , affinche' il programma possa leggerla quando arriva in quel punto ?

non so' se sono riuscito a spiegarmi , ma il tasto_D ,premuto momentaneo , possa diventare permanente fino all'esecuzione della riga in cui viene letto.

sicuramente e' una cosa semplice ma non riesco a cavarci le gambe , sono autodidatta ,senza basi di programmazione

saluti a tutti Valente :drooling_face: :astonished:

Posta il programma che hai fatto. Mi sembra strano che tu sia più veloce della macchina.
Se premi un tasto lo fai molto lentamente rispetto alla macchina. A meno che hai un codice molto lento oppure hai messo la lettura nel posto sbagliato.

Anche secondo me é un problema di Sketch e com un Sketch scritto in modo opportuno risolvi il problema. Dacci lo sketch.
Ciao Uwe

Già anche a me pare strano quando dovresti avere qualche migliaia di cicli/sec, se usi dei delay() può succedere, ma ci sono alternative, se proprio è impossibile ovviare allora ci sono gli interrupt come ultima spiaggia :grin:

grazie OK

il problema e' questo : al punto IF io devo spengere relay 1 se il tasto D e' stato premuto dopo relay 4 ,in qualsiasi momento anche solo una volta o piu' volte di seguito durante il delay 5000.
adesso funziona solo se, alla fine del delay5000 il tasto D VIENE TROVATO premuto , (LOW) .

siccome sono alle prime armi ,ho scelto io IF ma ho provato anche WHILE ma senza successo , ora non so' piu' cosa scrivere al posto di IF
ho postato lo sketch ,sequenza -prova-2 .spero si ved ^_^a :~

grazie per il gentile aiuto

sequenza_prova_2.ino (3 KB)

Il problema é i delay() che usi.
Sostituisi i delay con un controllo del tempo trascorso con millis()
http://opensourcehardwarejunkies.com/tutorial-12-blink-an-led-without-using-the-delay-function/

Ciao Uwe

uwefed:
Il problema é i delay() che usi.
Sostituisi i delay con un controllo del tempo trascorso con millis()
http://opensourcehardwarejunkies.com/tutorial-12-blink-an-led-without-using-the-delay-function/

Ciao Uwe

Suggerisco una guida in italiano :wink:
http://www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/

:slight_smile: grazie delle risposte
faccio delle prove con millis , spero di risolvere , intanto mi studio i link che mi avete postato

saluti valente :roll_eyes: :roll_eyes: