Sto impazzendo con questo semplicissimo sketch che faccio girare su un ATTINY45. Appena do alimentazione funziona tutto correttamente in modo ciclico; io vorrei memorizzare in EEPROM l'ultimo stato per quando lo spengo, in modo che riaccendendo la sequenza parta esattamente da quel punto. Se spengo quando status e movim sono entrambi a 0 (spia LAMP spenta), alla riaccensione funziona tutto correttamente.
Se invece spengo quando stato e movim sono entrambi a 1 (spia LAMP accesa), alla riaccensione la spia si riaccende normalmente (vedi controllo nel setup) però il ciclo riparte dall'inizio.
Ho la sensazione che sia un problema di utilizzo della EEPROM, possibile che non vada bene sull'ATTINY45? O mi sta banalmente sfuggendo qualcosa?
#include <EEPROM.h>
#define puls 3 //pin 2
#define sens 4 //pin 3
#define RL1 1 //pin 6 movimento orario
#define RL2 0 //pin 5 movimento antiorario
#define LAMP 2 //pin 7
int stato = 0;
int movim = 0;
void setup() {
pinMode(puls, INPUT_PULLUP);
pinMode(sens, INPUT);
pinMode(RL1, OUTPUT);
pinMode(RL2, OUTPUT);
pinMode(LAMP, OUTPUT);
int stato = EEPROM.read(0); // legge l'ultimo valore dalla EEPROM
int movim = EEPROM.read(1); // legge l'ultimo valore dalla EEPROM
if (stato == 1 && movim ==1)
{
digitalWrite(LAMP, HIGH);
}
}
void loop() {
// premo il pulsante e si accende RL1
if ((digitalRead(puls)==LOW) && stato==0 && movim==0)
{
digitalWrite(RL1,HIGH);
digitalWrite(RL2,LOW);
stato=0;
movim=1;
EEPROM.write(0,0);//memorizza stato
EEPROM.write(1,1);//memorizza movim
delay(2000);
}
// attivo il sensore - relè spenti - spia accesa
if ((digitalRead(sens)==LOW) && stato==0 && movim==1)
{
digitalWrite(RL1,LOW);
digitalWrite(RL2,LOW);
stato=1;
movim=1;
EEPROM.write(0,1);//memorizza stato
EEPROM.write(1,1);//memorizza movim
digitalWrite(LAMP, HIGH);
}
// ripremo il pulsante - si accende RL2 - la spia si spegne
if ((digitalRead(puls)==LOW) && stato==1 && movim==1)
{
digitalWrite(LAMP,LOW);
digitalWrite(RL1,LOW);
digitalWrite(RL2,HIGH);
stato=1;
movim=0;
EEPROM.write(0,1);//memorizza stato
EEPROM.write(1,0);//memorizza movim
delay(2000);
}
// attivo il sensore - relè spenti - spia spenta
if ((digitalRead(sens)==LOW) && stato==1 && movim==0)
{
digitalWrite(RL1,LOW);
digitalWrite(RL2,LOW);
stato=0;
movim=0;
EEPROM.write(0,0);//memorizza stato
EEPROM.write(1,0);//memorizza movim
}
}