#include <EEPROM.h>
volatile bool lampadaAcesa = false;
volatile bool movDetectado = false;
unsigned long ultimoMov = 0;
bool dia = false;
void botaoInterrupcao() {
lampadaAcesa = !lampadaAcesa;
}
void movDetectadoCallback() {
movDetectado = true;
ultimoMov = millis();
}
bool isDia() {
return analogRead(A0) < 500;
}
void setup() {
// Configurações
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT);
pinMode(A0, INPUT);
pinMode(10, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), botaoInterrupcao, CHANGE);
dia = EEPROM.read(0);
attachInterrupt(digitalPinToInterrupt(3), movDetectadoCallback, RISING);
}
void loop() {
// Código principal
dia = isDia();
if (dia) {
digitalWrite(10, lampadaAcesa ? HIGH : LOW);
} else {
if (lampadaAcesa || movDetectado) {
digitalWrite(10, HIGH);
if (millis() - ultimoMov >= 10000) {
movDetectado = false;
}
} else {
digitalWrite(10, LOW);
}
}
EEPROM.write(0, dia);
delay(100);
}