Consiglio per recuperare un valore in caso di riavvio arduino

Buongiorno a tutti,
il mio progetto prevede il conteggio di una serie di impulsi.
Ad ogni impulso che ricevo su un determinano pin, incremento la variabile di 1.
A mezzanotte azzero la variabile in modo da ripartire con il nuovo conteggio ogni giorno. Gli impulsi avvengono con intervallo che va tra 2 secondi o alcuni minuti.
Questo valore lo mando ogni 60 secondi via seriale al PC dove viene memorizzato in un'altra variabile.
Tutto funziona correttamente.
Il problema si presenta nel momento in cui per qualsiasi motivo riavvio arduino. Il conteggio riparte da zero e viene quindi azzerata anche la variabile sul PC.
Volevo memorizzare il valore nella eprom ma scriverei parecchie volte il valore rischiando di comprometterla dopo poco tempo (se non erro la eprom si può scrivere circa 100.000 volte).
Senza collegare scheda sd esterna o altri aggeggi, pensavo di inserire nello scketch questo:
Al momento del riavvio di arduino, invia richiesta al pc del valore della variabile e poi continua ad incrementarla e ad inviarla a pc come ora.
La domanda è: come posso determinare quando arduino è stato riavviato al fine di fare eseguire solo una volta quel IF che va a leggere il valore da incrementare successivamente?

Grazie e buone feste!

Mi sembra banale.
Al riavvio solo il codice dentro la setup() viene eseguito 1 volta, poi di continuo viene eseguita la loop()

nid69ita:
Mi sembra banale.
Al riavvio solo il codice dentro la setup() viene eseguito 1 volta, poi di continuo viene eseguita la loop()

Che dire... mi sono fatto mille pippe mentali pensando di scomodare il millis e cose varie ed invece la soluzione è di una banalità mostruosa... non ci avevo minimamente pensato.

Grazie mille Nid!

Mi ricollego alla stessa mia discussione in quanto vorrei fare una variazione:
Il concetto è sempre più o meno lo stesso ma va applicata ad un led: avrei la necessità di memorizzare lo stato del led (quindi uscita di un pin Arduino) in modo tale da recuperarne il valore in caso di riavvio.
Come detto sopra, il limite della eprom è il numero massimo di scritture.
Immagino che la via più semplice, sia quella di utilizzare una schedina sd visto che ora ho dotato Arduino Mega di una ethernet shiedl.
Ci sono in alternativa altre soluzioni senza impiegare "hardware esterno"?

Grazie

A meno che il Led non lampeggi continuamente non vedo perchè non puoi usare la Eeprom

Stavo giusto adesso facendo un conto...
In pratica si tratta di una striscia led in casa.
Tutto sta a capire mediamente in un locale quante sono le accensioni e gli spegnimenti in una giornata.
Ipotizziamo la cucina o la sala (maggiormente utilizzate). Ci può stare una quarantina di cicli ON/OFF al giorno (devo memorizzare sia le accensioni che gli spegnimenti)?
In un anno sarebbero 14600 scritture. Consideriamo veritiero il dato di 100.000 scritture farebbero quasi 7 anni (6.8).
Tra sei anni, invece di cambiare la batteria cambierò Arduino :slight_smile:

Curiosità: c'è un modo di verificare lo stato di salute di una cella eeprom?

Nella realtà sono molte di più di 100000... Quello è il minimo garantito. Se poi eviti di scrivere sempre sulla stessa cella (gpb01 posta sempre un documento che aiuta in proposito), la durata è pressoché infinita, nel tuo caso.

Guarda questi :wink:

Atmel - High Endurance EEPROM Storage.c (4.31 KB)

AVR101 - High Endurance EEPROM Storage.pdf (47.3 KB)

Ho capito! Grazie!