#include <WiFi.h>
//Pins
int pin_rele_sirene = 5;
int pin_rele_valvula = 18;
int pin_micro_1 = 34;
int pin_buzzer = 2;
//Vars
bool reset_after_water = false;
int sensibility = 70;
int water_time = 2;//in seconds
int decay_time = 5;//in seconds
int number_of_warnings = 2;
//Counters
int last_micro_val = 0;
long last_trigger_time = 0;
int trigger_count = 0;
int read_sensors(){
return map(analogRead(pin_micro_1),0,4096,0,100);
}
void activate_water(){
if(reset_after_water){
trigger_count = 0;
}
long sleep_time = 1000 * water_time;
Serial.print("water activated! for ");
Serial.println(sleep_time);
digitalWrite(pin_rele_sirene, HIGH);
digitalWrite(pin_rele_valvula, HIGH);
delay(sleep_time);
digitalWrite(pin_rele_valvula, LOW);
digitalWrite(pin_rele_sirene, LOW);
}
void activate_alarm(int count){
digitalWrite(pin_rele_sirene, HIGH);
long sleep_time = 1000 * count;
Serial.println(sleep_time);
//delay(sleep_time);
delay(25);
digitalWrite(pin_rele_sirene, LOW);
delay(sleep_time-25);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
pinMode(pin_micro_1, INPUT);
pinMode(pin_rele_sirene, OUTPUT);
pinMode(pin_rele_valvula, OUTPUT);
pinMode(pin_buzzer, OUTPUT);
analogWrite(pin_buzzer, 2);
}
void loop() {
int current_val = read_sensors();
if (last_micro_val != current_val){
last_micro_val = current_val;
Serial.println(current_val);
}
long currentMillis = millis();
//check decay
if(currentMillis - last_trigger_time >= decay_time*1000 && trigger_count > 0){
trigger_count > 1 ? trigger_count -=1 : trigger_count = 0;
Serial.print("trigger count decay ");
Serial.println(trigger_count);
last_trigger_time = millis();
}
if (current_val > sensibility) {
trigger_count +=1;
Serial.print("triggered ");
Serial.println(trigger_count);
last_trigger_time = millis();
if(trigger_count >=1 && trigger_count <= number_of_warnings ){
activate_alarm(trigger_count);
}
if(trigger_count > number_of_warnings ){
activate_water();
}
}
delay(10);
}