Io creerei due funzioni diverse: loop1 loop2, quando ne esegui uno scrivi da qualche parte nella eeprom "1" ad esempio e così via..
Quindi nello sketch nel setup leggi cosa c'è scritto nella eeprom e di conseguenza nel vero loop richiami quella funzione(che poi sarebbe il tuo loop)
sciorty ho capito concettualmente quello che hai detto anche se non so come metterlo in pratica non avendo mai usato la eprom, e come diceva leo mi chiedevo quanto si possa scriverci sopra
piu' che un pulsante a questo punto meglio uno switch che va sugli analogici
idea stramba, se io metto una resistenza e condensatore che si carica lentamente (secondi) all'avvio avrei una lettura low sul condensatore e potrei fare un loop1, al reset successivo mi trovo il condensatore carico, avrei una lettura high e potrei far partire il loop2, nel loop2 faccio scaricare anche il condensatore e ritorno al reset successivo alla condizione di partenza. potrebbe funzionare?
reizel:
sciorty ho capito concettualmente quello che hai detto anche se non so come metterlo in pratica non avendo mai usato la eprom, e come diceva leo mi chiedevo quanto si possa scriverci sopra
Ci si può scrivere 10000 volte come detto da leo ma a parer mio se è per questi scopi tanto vale usarla (a meno che la tua applicazione non si resetti ogni secondo)
Comunque una cosa così:
#include <EEPROM.h>
int val;
void loop1(){}
void loop2(){}
void setup(){
//tramite un altro sketch (o adattando il codice) metti nella cella 0 il valore 1 o 2, di default non so quanto sia..
val=EEPROM.read(0);
}
void loop(){
if(val==1){
EEPROM.write(0,1);
loop1();
}
if(val==2){
EEPROM.write(0,2);
loop1();
}
}
cmqe la eeprom sarebbe piu' utile per caricarci una password e interrogarla se e' giusta e cambiarla ogni tanto, come la userei io non ha molto senso e la rovini per niente
altrimenti servirebbe una ram di qualche bit (esistono?)
Però effettivamente devi rivedertelo, così com'è ogni volta che arriva all'ultima riga del loop1 o loop2 torna nel loop e scrive sulla EEPROM.. la mia era solo un'idea
EDIT: tipo:
#include <EEPROM.h>
int val;
void loop1(){....}
void loop2(){}
void setup(){
//tramite un altro sketch (o adattando il codice) metti nella cella 0 il valore 1 o 2, di default non so quanto sia..
val=EEPROM.read(0);
boolean primo=true;
}
void loop(){
if(val==1){
if(primo){EEPROM.write(0,1);primo=false}
loop1();
}
if(val==2){
if(primo){EEPROM.write(0,2);primo=false}
loop1();
}
}
reizel:
avete ragione, il loop non deve finire mai altrimenti scrive sempre e in 3 minuti fai 10000 scritture
Vabbè non per forza, se hai particolari problemi a non farlo finire puoi usare l'ultimo codice.. ogni fine loop1/2 rientra nel loop ma solo per il controllo e non scrive
Ovviamente ti rallenta
reizel:
altrimenti servirebbe una ram di qualche bit (esistono?)
Potresti usare un semplice DS1307 con una batteria tampone. Ha qualche decina di byte di RAM usabile in cui memorizzare il tuo flag, che verrebbe mantenuto anche in caso di assenza di alimentazione principale grazie alla batteria tampone.
Potresti usare un semplice DS1307 con una batteria tampone. Ha qualche decina di byte di RAM usabile in cui memorizzare il tuo flag, che verrebbe mantenuto anche in caso di assenza di alimentazione principale grazie alla batteria tampone.
[/quote]
non sapevo questo del ds1307, ne ho 5 in casa, mi guardo il datasheet, s'impara sempre qualcosa