#include <SoftwareSerial.h>
#include <RF24.h>
#include <SPI.h>
// Pinos do módulo de relé para sirene e giroflex
#define SIREN_RELAY_PIN 3
#define GYRO_RELAY_PIN 4
// Pino para monitoramento de bateria
#define BATTERY_PIN A0
// Configuração do módulo de rádio
RF24 radio(9, 10); // CE, CSN pinos
const byte address[6] = "2Node"; // Endereço do escravo
bool alarmStatus = false;
// Timer para desligamento automático
unsigned long timerStart = 0;
unsigned long timerDuration = 30000; // 1 minuto (60.000 ms)
void setup() {
// Inicializa a comunicação serial
Serial.begin(9600);
// Inicializa os pinos do módulo de relé
pinMode(SIREN_RELAY_PIN, OUTPUT);
pinMode(GYRO_RELAY_PIN, OUTPUT);
// Inicializa o pino de monitoramento de bateria
pinMode(BATTERY_PIN, INPUT);
// Inicializa o módulo de rádio
radio.begin();
radio.openReadingPipe(1, address);
radio.setPALevel(RF24_PA_LOW);
radio.startListening();
Serial.println("Escravo iniciado.");
}
void loop() {
// Verifica se há dados de rádio recebidos
//Trocar Serial por radio
if (Serial.available()) {
String text = Serial.readString();
// radio.read(&text, sizeof(text));
Serial.print("Recebido via rádio: ");
Serial.println(text);
processCommand(String(text));
}
// Verifica se o timer de desligamento automático expirou
if (alarmStatus && (millis() - timerStart >= timerDuration)) {
desativarAlarme();
Serial.println("Alarme desativado automaticamente após o tempo especificado.");
}
}
void processCommand(String command) {
command.trim();
if (command == "ATIVAR") {
digitalWrite(SIREN_RELAY_PIN, HIGH);
digitalWrite(GYRO_RELAY_PIN, HIGH);
alarmStatus = true;
timerStart = millis(); // Inicia o timer
Serial.println("Alarme ativado.");
} else if (command == "DESATIVAR") {
digitalWrite(SIREN_RELAY_PIN, LOW);
digitalWrite(GYRO_RELAY_PIN, LOW);
alarmStatus = false;
Serial.println("Alarme desativado.");
} else if (command == "STATUS") {
String status = "Sirene: " + String(digitalRead(SIREN_RELAY_PIN)) + ", Giroflex: " + String(digitalRead(GYRO_RELAY_PIN));
Serial.println(status);
radio.stopListening();
radio.write(&status, sizeof(status));
radio.startListening();
} else if (command == "BATERIA") {
enviarNivelBateria();
} else {
delay(2000);
//Serial.println("Comando desconhecido recebido.");
}
}
void desativarAlarme() {
digitalWrite(SIREN_RELAY_PIN, LOW);
digitalWrite(GYRO_RELAY_PIN, LOW);
Serial.println("Alarme desativado.");
alarmStatus = false;
}
void enviarNivelBateria() {
int nivelBateria = analogRead(BATTERY_PIN);
float voltage = nivelBateria * (5.0 / 1023.0); // Converte para tensão
String mensagem = "Nível da bateria: " + String(voltage) + "V";
Serial.println("Nível da bateria: " + String(voltage) + "V");
radio.stopListening();
radio.write(&mensagem, sizeof(mensagem));
radio.startListening();
}