Ciao, per il tuo caso ti consiglio innanzitutto di utilizzare un bel debounce hardware per evitare false letture, dopodiché nel programma quando premi il pulsante setti una variabile che serve a far accendere una sola volta il led indipendentemente da quanto tempo resta premuto il pulsante:
In questo modo premi il pulsante, accendi il led per 50ms e poi finché non rilasci il pulsante il led non si accenderà più.
Essendo presente il delay (seppur breve) occorre valutare se in quel tempo arduino non debba verificare altre cose, se no allora va tutto bene così, altrimenti va ripensato tutto con uso di millis().
Attenzione che senza debounce hardware potresti avere risultati inprevedibili
In alternativa puoi fare una cosa tipo
Se sento il tasto accendo il led, aspetto 50 MS e lo spengo. Dopo di che inserisco una whike (leggo il pulsante) vuota, Così che di fatto sia una delay per un tempo indefinito. E se il programma deve fare solo questo il programma é finito.
Più complicata di quella proposta da Polli, ma credo più di rapida intuizione.
fabpolli:
Ciao, per il tuo caso ti consiglio innanzitutto di utilizzare un bel debounce hardware per evitare false letture, dopodiché nel programma quando premi il pulsante setti una variabile che serve a far accendere una sola volta il led indipendentemente da quanto tempo resta premuto il pulsante:
In questo modo premi il pulsante, accendi il led per 50ms e poi finché non rilasci il pulsante il led non si accenderà più.
Essendo presente il delay (seppur breve) occorre valutare se in quel tempo arduino non debba verificare altre cose, se no allora va tutto bene così, altrimenti va ripensato tutto con uso di millis().
Attenzione che senza debounce hardware potresti avere risultati inprevedibili
interessa anche a me per minitorizzare il click del pulsante di un encoder, come lo realizzi il debounce hardware?
flagAcceso è una variabile boolean che va definita nello sketch, non ho indicato la cosa perché la davo per scontato :-[
comunque prima del setup metti
the_dragonlord:
interessa anche a me per minitorizzare il click del pulsante di un encoder, come lo realizzi il debounce hardware?
Il debaouce hardware semplice semplice lo realizzi con una rete RC (Resistenza condensatore), ma sopratutto nel caso degli encoder va tarato con accuratezza, se l'encoder da impulsi molto veloci e esageri con la rete RC ne perdi qualcono ad esempio.
Comunque se cerchi su google "debounce hardware" o "Arduino debounce hardware" trovi tanto di quel materiale che ti stufi di leggerlo dalla semplice rete RC ai debounce più raffinati