#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
//#include <UrlEncode.h>
// Configuração das credenciais do WiFi
const char* ssid = "CIT_Alunos";
const char* password = "alunos@2024";
// Configurações de WhatsApp
//String phoneNumber1 = "Seu numero";
//String apiKey1 = "";
// Pinos
#define LED_VERDE 13
#define LED_VERMELHO 26
#define buzzer 18
#define pirPin 25
#define Sen_Ldr2 35
#define Sen_Ldr3 34
#define POTENCIOMETRO 32 // Pino do potenciômetro
// Variáveis globais
int pres_Atual = 0;
int ldr2_atual = 0, ldr2_anterior = 0;
int ldr3_atual = 0, ldr3_anterior = 0;
const int RESOLUTION = 12;
bool bloqueio = true;
bool mudancaBrusca = false;
bool sireneAtiva = false;
unsigned long tempoSirene = 0;
unsigned long ultimoTempoLeitura = 0;
unsigned long intervaloLeitura = 500;
const float TOLERANCIA = 0.2;
const int LIMITE_POTENCIOMETRO = 200; // Valor limite para desbloquear a sala
// Função para enviar mensagens via CallMeBot
/*void sendMessage(String phoneNumber, String apiKey, String message) {
String url = "https://api.callmebot.com/whatsapp.php?phone=" + phoneNumber + "&apikey=" + apiKey + "&text=" + urlEncode(message);
HTTPClient http;
http.begin(url);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int httpResponseCode = http.POST(url);
Serial.println(httpResponseCode == 200 ? "Mensagem enviada com sucesso." : "Erro no envio da mensagem.");
http.end();
}*/
void tocarSirene() {
if (!sireneAtiva) {
tone(buzzer, 1350);
sireneAtiva = true;
tempoSirene = millis();
}
if (millis() - tempoSirene > 1000) {
noTone(buzzer);
delay(500);
sireneAtiva = false;
}
}
void leituras() {
pres_Atual = digitalRead(pirPin);
analogReadResolution(RESOLUTION);
ldr2_atual = analogRead(Sen_Ldr2);
ldr3_atual = analogRead(Sen_Ldr3);
Serial.println("Leituras dos sensores:");
Serial.print("Ldr 2: "); Serial.println(ldr2_atual);
Serial.print("Ldr 3: "); Serial.println(ldr3_atual);
Serial.print("Presença: "); Serial.println(pres_Atual);
if (ldr2_anterior != 0 && abs(ldr2_atual - ldr2_anterior) / ldr2_anterior > TOLERANCIA) {
mudancaBrusca = true;
}
if (ldr3_anterior != 0 && abs(ldr3_atual - ldr3_anterior) / ldr3_anterior > TOLERANCIA) {
mudancaBrusca = true;
}
if (pres_Atual == HIGH) {
mudancaBrusca = true;
}
ldr2_anterior = ldr2_atual;
ldr3_anterior = ldr3_atual;
}
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando ao WiFi");
}
Serial.println("\nWiFi conectado!");
pinMode(pirPin, INPUT);
pinMode(Sen_Ldr2, INPUT);
pinMode(Sen_Ldr3, INPUT);
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(POTENCIOMETRO, INPUT);
digitalWrite(LED_VERDE, LOW);
digitalWrite(LED_VERMELHO, HIGH);
Serial.println("Configuração inicial completa.");
}
void loop() {
int valorPotenciometro = analogRead(POTENCIOMETRO);
Serial.print("Valor do potenciômetro: ");
Serial.println(valorPotenciometro);
if (valorPotenciometro > LIMITE_POTENCIOMETRO) {
bloqueio = false;
Serial.println("Sala desbloqueada.");
} else {
bloqueio = true;
Serial.println("Sala bloqueada.");
}
if (bloqueio) {
digitalWrite(LED_VERMELHO, HIGH);
digitalWrite(LED_VERDE, LOW);
if (millis() - ultimoTempoLeitura > intervaloLeitura) {
ultimoTempoLeitura = millis();
leituras();
}
if (mudancaBrusca) {
Serial.println("Mudança brusca detectada!");
//sendMessage(phoneNumber1, apiKey1, "Mudança brusca detectada na sala!");
while (true) {
tocarSirene();
valorPotenciometro = analogRead(POTENCIOMETRO);
if (valorPotenciometro > LIMITE_POTENCIOMETRO) {
bloqueio = false;
Serial.println("Sala desbloqueada durante alerta.");
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_VERMELHO, LOW);
noTone(buzzer);
break;
}
}
mudancaBrusca = false;
}
} else {
digitalWrite(LED_VERDE, HIGH);
digitalWrite(LED_VERMELHO, LOW);
}
}