Default reset

Diversi apparati per ripristinare le condizioni di fabbrica fanno uso di:

Power ON + uno oppure due tasti premuti simultaneamente.

(Gli stessi due tasti, premuti al di fuori di questa condizione, non fanno nulla.)

Mi date un'idea di come implementare una procedura del genere?

Grazie anticipate

Stai parlando di una tua apparecchiatura basata su Arduno ? Che scheda Arduno ? dacci un po' più di dettagli :wink:

Guglielmo

In ogni caso basta che verifichi se i tuoi tasti sono premuti già nel setup() e ti comporti di conseguenza.

Mi viene il dubbio che voglia implementare qualcosa di simile al reset di fabbrica di alcuni cellulari …

Ma considera Simon, che ogni volta che accendi arduino, lui parte da zero, non e’ che si “resetta” …

Se invece intendi un’operazione o una funzione che venga eseguita solo allo start e solo se quando fai lo start tieni premuti un paio di pulsanti, la prima cosa che mi viene in mente e’ sfruttare il setup() … dato che viene eseguito solo una volta all’accensione (a meno che non lo richiami tu di proposito da qualche altro punto dello sketch), potresti, come ULTIME istruzioni del setup, mettere un’if che controlla se due p oiu pulsanti sono premuti insieme … e se si, richiamare una funzione scritta apposta, che venga eseguita solo in quel caso … essendo il controllo nel setup, gli stessi pulsanti premuti nel loop non avrebbero lo stesso effetto …

Altro non mi viene in mente, al momento …

EDIT: Sukko, allora non ho detto proprio una ca…volata … :smiley:

Ciao Guglielmo.
La mia, è una domanda generalizzata ma reale.
Nel campo ricetrasmittenti ma anche nei telecomandi ecc. capita spesso di avere istruzioni di reset od altro legato ad una combinazione di uno o due tasti legati all'accensione dell'oggetto.

Per esempio...nei telecomandi universali TV la ricerca codice particolare viene fatta tramite la pressione del tasto ON + un'altro tasto.
Riportare un'apparato radio nelle condizioni di fabbrica è fatto premendo il tasto ON all'accensione più un'altro o due tasti.
Questa è l'unica condizione programmata per effettuare un'operazione del genere.
Gli stessi tasti se non premuti all'accensione non svolgono la funzione richiesta.

Credo che anche a te sia accaduto di trovarti a fare un'operazione del genere.
Mi auguro di essermi chiarito. Questa conoscenza mi potrebbe risultare utile in futuro.

Si, avevo capito di cosa parlavi, ma tu la stai cercando "in Arduno" o la devi implementare per un tuo prodotto basato su Arduno ?

Guglielmo

Se quello che devi fare è riportare alle condizioni di default delle impostazioni, che hai salvato in EEPROM, devi solo rilevare all’accensione una determinata condizione, p.e. dei pulsanti premuti con un certo schema, e di conseguenza sovrascrivere i valori utente con quelli di default che hai inserito nel codice.

E' qualcosa che mi stò proponendo di fare con un Arduino Due per gestire una apparecchiatura ed avere su EEprom sia dati di default che quelli User.
L'idea di inserire qualcosa nel setup potrebbe essere una strada ma posso fare lo scan dei tasti in questa parte di programma? Non so.

Fare l'end dei due tasti della tastiera 4x3 o 4x4 non è un problema ma quello con il tasto power e solo all'accensione? Mi sfugge qualcosa.

Eppure penso che molti programmatori lo abbiano attualizzato in apparecchiature dotato di software con variabili modificabili da utente per eventualmente ripristinare, in caso di problemi, i dati di default.

Mi manca quel LA...

Grazie a tutti per gli interventi

Non capisco cosa non ti convinca… Certo che puoi farlo nel setup(), dopo aver inizializzato tutto il necessario, perché non dovresti? È una funzione come un’altra, con l’unica particolarità che viene eseguita una sola volta all’avvio, ovvero “pochi attimi” dopo l’accensione, per cui di fatto non ti serve nessun And con il tasto di accensione. Se leggi un pulsante come premuto nel setup(), nella pratica puoi essere certo che il dispositivo è stato acceso tenendolo premuto.

Io stesso uso questa tecnica in alcuni progetti in cui mi interfaccio con joypad/joystick, per abilitare una particolare modalità se Arduino viene avviato tenendo premuto un certo tasto.

Cosa non ti è chiaro del fatto che se durante l'accensione, quindi all'interno del setup(), rilevi la pressione di una certa combinazione di tasti, preferibilmente per qualche secondo, lanci una routine che provvede al ripristino di default. ?
Attenzione che la DUE non ha la EEPROM, però è possibile scrivere runtime sulla flash e usare una porzione di questa per emulare la EEPROM, se devi aggiornare spesso i dati non volatili è meglio se usi una EEPROM I2C esterna.

La mia intenzione è quella di fare il polling della keypad con interrupts all'interno della void loop().

Da quello che mi suggerite è fare una sola scansione tasti di verifica all'interno del void setup().
Se la combinazione è quella voluta, leggo i dati di default da EEprom 24LC256, li copio nei dati User e poi proseguisco con il void loop() come abitualmente.
Proverò a scrivere del codice in questo modo per vedere se tutto sara ok.

Grazie ancora

Cosa intendi per "Fare il polling con interrupt nel loop()"? È un bell'ossimoro... Gli interrupt lasciali perdere in questo caso, non serve scomodarli.

Scrivi una banale funzione che ti ritorna una bitmask che rappresenta i tasti premuti. Chiamala una volta nel setup() per sapere quali tasti erano premuti all'accensione ed eventualmente ripristina i default. Poi nel loop() chiamala di continuo e fai quel che devi fare.

Non è più complicato di così ;).

E' vero ...mi sono espresso male. Non ho un linguaggio consono ad un softerista.
Comunque ho capito cosa, come e dove.

Ho avuto quel LA che cercavo e vi ringrazio tutti.

Giusto come ulteriore sicurezza ... nel setup, leggi i tasti, se sono premuti nella giusta combinazione, attendi un secondo (o piu) e poi controlla che siano ancora premuti ... in questo modo l'utente dovra' per forza mantenere la combinazione premuta per un secondo (o piu, se vuoi tu), perche' quelle operazioni vengano eseguite, quindi si previene anche la possibile esecuzione accidentale di qualcuno che li ha premuti un'attimo per sbaglio proprio nel momento in cui non doveva ... vero che e' una possibilita' remota, ma come Murphy insegna, non si e' mai troppo cauti ... :wink:

Il problema ce l'hai sempre quando lo spegni e lo riaccendi se non fai un po' di controlli.
Supponi di avere il prog default poi premi la combinazione di tasti per 15 sec (usa il millis) e ti carica il programma personalizzato, quando lo spegni e lo riaccendi hai di nuovo il prog default.

Dovrai dare a una cella della eprom uno 0 o un 1 dove 0 sta per "prog default" e 1 sta per "prog personalizzato", dovrai leggere all'accensione questo valore dal setup() e comportarti di conseguenza, alla combinazione dei tasti per la personalizzazione questo valore andrà cambiato