On/Off tempo pressione

Riassumo velocemente la funzionalità che vorrei implementare nel mio sistema:

  • Tieni premuto 3 secondi per spegnere il sistema.

Come potrei ottenere questo risultato?
Lo stesso bottone verrebbe usato anche per accendere il sistema (in questo caso non e' necessaria la componente tempo).

Ho cercato sul web ma non ho trovato nulla di esaustivo.
Grazie a tutti per l'aiuto.

Devi usare la funzione millis(), alla pressione del pulsante (dopo adeguato debounce) memorizzi in una variabile il valore restituito da millis(), al rilascio del bottone, quindi sul cambio di stato HIGH o LOW in base a come è collegato al pin, sempre dopo il debounce verifichi se il millis() - il valore precedente memorizzato >= 3 secondi allora spegni.
Ovviamente ti servirà una variabile per sapere se stai accendendo o spegnendo il sistema in modo da sapere se attendere i tre secondi oppure no.

Aggiungo ... se non sai come usare la millis(), prima guarda QUI, poi QUI ed infine leggi anche QUI e QUI ... vedrai che ti sarà tutto più chiaro.

Guglielmo

Grazie mille per la risposta. Quello che mi suggerisci sembra andar bene per un sistema esterno connesso all'arduino (attualmente operante), e giustamente, dalla mia povera descrizione e' difficile evincere la totalità del mio progetto.

Quello che vorrei fare e' accendere/spegnere l'arduino stesso (oltre che al resto del sistema). Questo e' alimentato da una batteria.

Credo che tu debba anche dettagliare esattamente cosa intendi per "accendere" e "spegnere" il sistema, perché ovviamente per rilevare la pressione di accensione la MCU deve essere "accesa" o in una qualche modalità sleep accuratamente predisposta.

Intendo proprio alimentare arduino e resto dei componenti. Esattamente lo stesso comportamente che avrebbe uno switcher on/off collegato a un terminale della batteria. Se può rendere l'idea, vorrei ottenere il comportamento dei computer portatili. Premi il tasto accensione e si avvia la macchina, tieni premuto per circa 5 secondi e spegni la macchina.

userxdev:
... Premi il tasto accensione e si avvia la macchina, tieni premuto per circa 5 secondi e spegni la macchina.

Che ti dovrebbe far capire che ... in realtà NON è veramente spento (... come non lo sono i telefonini che hanno simile comportamento), ma in una condizione di bassissim consumo, con le periferiche NON alimentate, ma con una parte sempre attiva.
Che poi è quello che ti suggeriva SukkoPera ... :slight_smile:
Guglielmo

Perfetto, ora mi è tutto chiaro! Penso che l'arduino consumi davvero poco se configurato bene e messo in idle solo per captare la pressione, al più dovrei fare una ricerca e' valutare l'uso di un uControllore(poco dispendioso) esterno solo per gestire il comportamento di questo tasto.

Grazie mille per l'aiuto, grandi come sempre =D

userxdev:
Penso che l'arduino consumi davvero poco se configurato bene e messo in idle ....

Arduino ... NI, una scheda basata su un ATmega328P stand alone fatta da te SI ...
... devi considerare che su Arduino, che è una scheda di sviluppo, hai comunque tutta una serie di cose che su un prodotto finale possono essere eliminate :wink:

Guglielmo