//#include <SPI.h>
#define LED_SISTEMA_LIGADO 9
const int buttonPin = 11;
const int LED_1 = 4;
const int LED_2 = 5;
const int LED_3 = 12;
const int pinoPIR = 6; // Pino do Sensor PIR
const int led_ligado = 10; // LED/BUZZER ALERTA TOCANDO
const int LED_MOVIMENTO = 8; // Pino do Alarme/LED
const int pinoAlarmeBuzzer = 7; // Buzzer
//alarme dispara apos esse tempo
const unsigned long tempoEspera1 = 10000; // 10 segundo
const unsigned long tempoEspera2 = 30000; // 30 segundos
const unsigned long tempoEspera3 = 60000; // 60 segundos
// condição tempo
unsigned long tempoUltimoMovimento = 0;
//unsigned long tempo;
bool ultimo_estado;
bool alarmeAtivo = false;
int buttonState = 0;
int lastButtonState = 1;
int mode = 0; // Alternar modos
void setup() {
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Usa resistor interno
pinMode(pinoPIR, INPUT);
pinMode(pinoAlarmeBuzzer, OUTPUT);
pinMode(LED_MOVIMENTO, OUTPUT);
pinMode(LED_SISTEMA_LIGADO, OUTPUT);
Serial.begin(9600); //Inicializa serial para debug
// SPI.begin(); // Inicia SPI bus
tempoUltimoMovimento = millis(); // Inicia o tempo
}
void loop()
{
buttonState = digitalRead(buttonPin);
delay(30);
tempoUltimoMovimento = millis(); // Inicia o tempo
digitalWrite(LED_SISTEMA_LIGADO, HIGH); // led INDICA SISTEMA LIGADO
int estadoPIR = digitalRead(pinoPIR);
//Serial.println(buttonState);
//Serial.println(lastButtonState);
/// teste dos botoes
if (buttonState != lastButtonState) {
lastButtonState = buttonState;
if (buttonState == LOW) { // Botão pressionado
mode++;
if (mode > 3) mode = 0;
Serial.println(mode);
// Lógica para ligar LEDs
//if (mode == 1) { digitalWrite(estadoPIR, HIGH); digitalWrite(LED_1, HIGH); digitalWrite(LED_2, LOW); digitalWrite(LED_3, LOW); } // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO
if (mode == 1) {
digitalWrite(LED_1, HIGH); digitalWrite(LED_2, LOW); digitalWrite(LED_3, LOW);
////////////////////// estado pir 10 SEGUNDOS
if (estadoPIR == HIGH) { // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO NAO CHAMA A AÇAO DE 10 SEGUNDOS
// Movimento detetado:
tempoUltimoMovimento = millis();
digitalWrite(pinoAlarmeBuzzer, HIGH); // liga Buzzer do alarme
alarmeAtivo = true;
}
else {
// movimento: verifica se passaram 10 SEGUNDOS
if (millis() - tempoUltimoMovimento >= tempoEspera1) {
digitalWrite(led_ligado, LOW); // DESAtiva alarme
digitalWrite(pinoAlarmeBuzzer, LOW); // DESAtiva Buzzer do alarme
if (!alarmeAtivo) {
Serial.println(" ALARME DESATIVADO");
delay(500);
alarmeAtivo = false;
}
}
}
}
////////////////estado pir 30 segundos
//else if (mode == 2) { digitalWrite(estadoPIR, HIGH); digitalWrite(LED_1, LOW); digitalWrite(LED_2, HIGH); digitalWrite(LED_3, LOW); //} // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO
else if (mode == 2) {
digitalWrite(LED_1, LOW); digitalWrite(LED_2, HIGH); digitalWrite(LED_3, LOW);
if (estadoPIR == HIGH) { // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO NAO CHAMA A AÇAO DE 30 SEGUNDOS
// Movimento detetado: reinicia o contador
tempoUltimoMovimento = millis();
digitalWrite(led_ligado, HIGH); // Desliga o led do alarme
digitalWrite(pinoAlarmeBuzzer, HIGH); // Desliga Buzzer do alarme
alarmeAtivo = true;
Serial.println("Movimento detetado ");
delay(200);
}
else {
// verifica se passaram 30 SEGUNDOS
if (millis() - tempoUltimoMovimento >= tempoEspera2) {
digitalWrite(pinoAlarmeBuzzer, LOW); // DESAtiva Buzzer do alarme
if (!alarmeAtivo) {
Serial.println(" ALARME DESATIVADO");
delay(500);
alarmeAtivo = false;
}
}
}
}
////////////////estado pir 60 SEGUNDOS
//else if (mode == 3) { digitalWrite(estadoPIR, HIGH); digitalWrite(LED_1, LOW); digitalWrite(LED_2, LOW); digitalWrite(LED_3, HIGH); //} // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO
else if (mode == 3) {
digitalWrite(LED_1, LOW); digitalWrite(LED_2, LOW); digitalWrite(LED_3, HIGH);
if (estadoPIR == LOW) { // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO NAO CHAMA A AÇAO DE 60 SEGUNDOS
// Movimento nao detectado:
tempoUltimoMovimento = millis();
digitalWrite(pinoAlarmeBuzzer, LOW); // DESliga Buzzer do alarme
delay(200);
alarmeAtivo = true;
}
else {
// ACIONA APOS 60 SEGUNDOS
if (millis() - tempoUltimoMovimento >= tempoEspera3) {
digitalWrite(led_ligado, HIGH); // Ativa alarme
digitalWrite(pinoAlarmeBuzzer, HIGH); // Ativa Buzzer do alarme
if (!alarmeAtivo) {
Serial.println(" ALARME DESATIVADO");
delay(500);
alarmeAtivo = false;
}
else {
digitalWrite(LED_1, LOW);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, LOW);
}
}
delay(50); // Debounce
}
// lastButtonState = buttonState;
}
}
}
}