Salve ragazzi, devo fare un programma che accende un led premendo 3 volte un pulsante usando la funzione millis() ma non ci riesco potete darmi una mano? Grazie
Devi implementare una piccola macchina a stati, che funziona più o meno così:
-
Tasto premuto (e rilasciato) una volta. Aspetti un timeout, se entro questo avviene una seconda pressione passi allo stato "Premuto 2 volte", altrimenti se scade il timeout c'è stata una pressione singola.
-
Tasto premuto due volte: stessa logica del caso precedente, ovviamente una nuova pressione ti porta allo stato "Premuto 3 volte", che è quello che ti interessa.
Io ho semplificato un po' le cose, però puoi guardare qua: Arduino OneButton Library. È una libreria che con un'idea simile gestisce il doppio click, e nella pagina c'è anche la macchina a stati precisa che usa, ti basta estenderla per gestire anche il triplo click.
@Brada394: Allora, prima di tutto, essendo il tuo primo post, ti chiederei cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO ...
... poi, in conformità al suddetto regolamento, punto 13, il cross-posting è proibito (anche tra lingue diverse) e tu hai già posto la stessa domanda anche nella sezione inglese dove, per di più, si può scrivere SOLO in lingua inglese ! Detto tuo post duplicato è stato cancellato.
Mi raccomando per il futuro ...
Guglielmo
Grazie per la risposta. Potresti allegarmi il programma fatto così capisco bene come funziona il timeout?
50€ e te lo faccio :D.
Guarda il codice della libreria, è tutto lì...
... e QUI un esempio di "macchina a stati finiti" con Arduino
Guglielmo
Grazie per le risposte ma devo farlo per forza con millis()
millis() è solo una delle cose che devi usare, mica puoi farlo SOLO con millis(). Ti sei almeno preoccupato di guardare quel che ti abbiamo passato?
Ciao puoi fare un contatore che conta le pressioni del pulsante, ecco un'idea:
Se il contatore = 0 timeout=millis();
se millis()-timeout > timeoutMax resetta il contatore.
se contatore > 3 allora accendi il led e resetta il contatore
dove timeoutMax è il tempo entro il quale devi avere premuto 3 volte il pulsante xchè sia valido.
Stefano