#include <SPI.h>
#include <SoftwareSerial.h>
#include <RF24.h>
// Pinos do módulo GSM
#define GSM_RX 7
#define GSM_TX 8
SoftwareSerial gsmSerial(GSM_RX, GSM_TX);
// Pinos do módulo de relé para sirene e giroflex
#define SIREN_RELAY_PIN 3
#define GYRO_RELAY_PIN 4
// Configuração do módulo de rádio
RF24 radio(9, 10); // CE, CSN pinos
const byte addresses[][6] = {"1Node", "2Node", "3Node"};
bool alarmStatus = false;
void setup() {
// Inicializa a comunicação serial
Serial.begin(9600);
gsmSerial.begin(9600);
// Inicializa os pinos do módulo de relé
pinMode(SIREN_RELAY_PIN, OUTPUT);
pinMode(GYRO_RELAY_PIN, OUTPUT);
// Inicializa o módulo de rádio
radio.begin();
radio.openWritingPipe(addresses[0]); // Endereço do mestre
radio.openReadingPipe(1, addresses[1]); // Endereço do escravo 1
radio.openReadingPipe(2, addresses[2]); // Endereço do escravo 2
radio.setPALevel(RF24_PA_LOW);
Serial.println("Sistema de alarme iniciado.");
}
void loop() {
// Verifica se há SMS recebido
if (Serial.available()) {
String sms = Serial.readString();
processSMS(sms);
}
// Verifica se há dados de rádio recebidos
if (radio.available()) {
char text[32] = "";
radio.read(&text, sizeof(text));
Serial.print("Recebido via rádio: ");
Serial.println(text);
}
}
void processSMS(String sms) {
sms.trim();
if (sms == "ATIVAR") {
ativarAlarme();
enviarSMS("Alarme ativado.");
} else if (sms == "DESATIVAR") {
desativarAlarme();
enviarSMS("Alarme desativado.");
} else if (sms == "STATUS") {
enviarStatus();
} else {
enviarSMS("Comando desconhecido.");
}
}
void ativarAlarme() {
digitalWrite(SIREN_RELAY_PIN, HIGH);
digitalWrite(GYRO_RELAY_PIN, HIGH);
alarmStatus = true;
enviarComandoRadio("ATIVAR");
}
void desativarAlarme() {
digitalWrite(SIREN_RELAY_PIN, LOW);
digitalWrite(GYRO_RELAY_PIN, LOW);
alarmStatus = false;
enviarComandoRadio("DESATIVAR");
}
void enviarComandoRadio(String comando) {
radio.stopListening();
radio.write(&comando, sizeof(comando));
radio.startListening();
}
void enviarSMS(String mensagem) {
gsmSerial.print("AT+CMGF=1\r");
delay(100);
gsmSerial.print("AT+CMGS=\"+11991195363\"\r"); // Substitua pelo número de telefone desejado
delay(100);
gsmSerial.print(mensagem);
delay(100);
gsmSerial.write(26); // Ctrl+Z
delay(100);
}
void enviarStatus() {
String status = "Status do Alarme:\n";
status += "Mestre - Sirene: " + String(digitalRead(SIREN_RELAY_PIN)) + ", Giroflex: " + String(digitalRead(GYRO_RELAY_PIN)) + "\n";
status += "Escravo 1 - Status: ???\n"; // Adicione a lógica para obter o status do escravo 1
status += "Escravo 2 - Status: ???\n"; // Adicione a lógica para obter o status do escravo 2
enviarSMS(status);
}