#include <EEPROM.h>
volatile bool ledOn = false;
volatile bool movimentoOn = false;
unsigned long ultimoMov = 0;
bool dia = false;
void botaoInterrupcao() {
ledOn = !ledOn;
}
void movimentoOnCallback() {
movimentoOn true;
ultimoMov = millis();
}
bool isDia() {
return analogRead(A1) < 500;
}
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT);
pinMode(A1, INPUT);
pinMode(10, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), botaoInterrupcao, CHANGE);
dia = EEPROM.read(0);
attachInterrupt(digitalPinToInterrupt(3), movimentoOnCallback, RISING);
}
void loop() {
dia = isDia();
if (dia) {
digitalWrite(10, ledOn ? HIGH : LOW);
} else {
if (ledOn || movimentoOn) {
digitalWrite(10, HIGH);
if (millis() - ultimoMov >= 10000) {
movimentoOn = false;
}
} else {
digitalWrite(10, LOW);
}
}
EEPROM.write(0, dia);
delay(100);
}