#include <EEPROM.h>
#define WATER_SENSOR_PIN A1 // Analog input for water sensor
#define BUZZER_PIN 5
#define LED_PIN 6
#define RELAY_PIN 7
#define RESET_BUTTON_PIN 8
#define LOCK_STATE_ADDRESS 0 // EEPROM address to save lock state
bool systemLocked = false;
int baselineValue = 0; // To store sensor baseline
int detectionThreshold = 200; // Auto-calculated threshold
void setup() {
Serial.begin(9600); // Initialize Serial Monitor
pinMode(WATER_SENSOR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(RESET_BUTTON_PIN, INPUT_PULLUP);
// Load lock state from EEPROM
systemLocked = EEPROM.read(LOCK_STATE_ADDRESS) == 1;
if (systemLocked) {
digitalWrite(RELAY_PIN, LOW); // Keep pump OFF if locked
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
} else {
digitalWrite(RELAY_PIN, HIGH); // Ensure pump is initially ON
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
}
void checkResetButton() {
if (digitalRead(RESET_BUTTON_PIN) == LOW) {
systemLocked = false;
EEPROM.write(LOCK_STATE_ADDRESS, 0);
Serial.println("System reset. Pump is ON again.");
digitalWrite(RELAY_PIN, HIGH); // Turn pump ON after reset
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
delay(500); // Debounce
}
}
void loop() {
checkResetButton();
if (systemLocked) {
return; // If locked, prevent further operations
}
int waterSensorState = analogRead(WATER_SENSOR_PIN); // Read water sensor
Serial.print("Water Sensor State: ");
Serial.println(waterSensorState);
if (waterSensorState > detectionThreshold) {
Serial.println("Water detected: Turning OFF pump forever until reset");
digitalWrite(RELAY_PIN, LOW); // Turn OFF pump
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
tone(5, 600, 500); // Pin 5 Plays 600Hz tone for 0.500 seconds
systemLocked = true;
EEPROM.write(LOCK_STATE_ADDRESS, 1); // Save locked state
}
delay(500); // Increased delay for stability
}