const int pinoRele = 12;
int valorRele = 0;
const int pinoPIR = 32;
int valorPIR = 0;
const int pinoLDR = 33;
int valorLDR = 0;
const int pinoPOT = 14;
int valorAnteriorPOT = 0;
int duracaoMax = 500, duracao = 10; //segundos
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(pinoRele, OUTPUT);
pinMode(pinoPIR, INPUT);
pinMode(pinoLDR, INPUT);
}
void loop() {
ajusteDeDuracao();
lerValorSensores();
controlarRele();
delay(10); // this speeds up the simulation
}
void ajusteDeDuracao() {
if (valorAnteriorPOT != analogRead(pinoPOT)) {
valorAnteriorPOT = analogRead(pinoPOT);
duracao = (valorAnteriorPOT / (4*1023.0)) * (duracaoMax);
Serial.println("Nova duração: "+String(duracao)+"s");
}
}
void lerValorSensores() {
valorPIR = digitalRead(pinoPIR);
valorLDR = digitalRead(pinoLDR);
delay(50);
}
void controlarRele() {
static unsigned long tempoAnt = millis();
unsigned long _duracao = 1000UL * (unsigned long)duracao;
if (valorPIR == HIGH && valorLDR == HIGH) {
Serial.println("Lampada ligada!");
tempoAnt = millis();
valorRele = HIGH;
digitalWrite(pinoRele, valorRele);
}
if (valorRele == HIGH && ((millis() - tempoAnt) > _duracao)) {
Serial.println("Lampada desligada!");
valorRele = LOW;
digitalWrite(pinoRele, valorRele);
}
if (valorRele == HIGH && ((millis() - tempoAnt) < _duracao)) {
Serial.println(" \033j Duração: " + String(duracao) + "s");
Serial.println("Tempo restante: " + String((unsigned long)duracao - (millis() - tempoAnt)/1000UL) + "s");
}
}