// Pin assignments
const int highSwitch = 2; // Pin for high water level switch
const int lowSwitch = 3; // Pin for low water level switch
const int pump1 = 4; // Pin for pump 1 control
const int pump2 = 5; // Pin for pump 2 control
const int alarm = 6; // Pin for alarm control
// Timers
unsigned long pump2StartTime = 0;
unsigned long pump2RunTime = 30000; // 30 seconds
bool pump1Running = false;
bool pump2Running = false;
bool alarmOn = false;
void setup() {
// Initialize pin modes
pinMode(highSwitch, INPUT_PULLUP); // Active low input
pinMode(lowSwitch, INPUT_PULLUP); // Active low input
pinMode(pump1, OUTPUT);
pinMode(pump2, OUTPUT);
pinMode(alarm, OUTPUT);
// Ensure all devices are off
digitalWrite(pump1, LOW);
digitalWrite(pump2, LOW);
digitalWrite(alarm, LOW);
}
void loop() {
bool highLevel = !digitalRead(highSwitch); // High when water reaches high level
bool lowLevel = !digitalRead(lowSwitch); // Low when water reaches low level
if (lowLevel) {
// If the water reaches the low level, stop both pumps and alarm
stopAllDevices();
} else if (highLevel && !pump1Running) {
// Start pump 1 if high level is reached and pump 1 is not running
startPump1();
} else if (!lowLevel && pump1Running) {
// If pump 1 is running and water has not reached the low level within 30 seconds
if (millis() - pump2StartTime >= pump2RunTime && !pump2Running) {
startPump2(); // Start pump 2 after 30 seconds
}
}
// Check if pump 2 has been running for 30 seconds without reaching low level
if (pump2Running && millis() - pump2StartTime >= pump2RunTime && !alarmOn) {
startAlarm(); // Start alarm if water doesn't reach the low level within 30 seconds of pump 2 starting
}
}
void startPump1() {
digitalWrite(pump1, HIGH); // Turn on pump 1
pump1Running = true;
pump2StartTime = millis(); // Start the timer for pump 2
}
void startPump2() {
digitalWrite(pump2, HIGH); // Turn on pump 2
pump2Running = true;
pump2StartTime = millis(); // Reset the timer for the alarm
}
void startAlarm() {
digitalWrite(alarm, HIGH); // Turn on alarm
alarmOn = true;
}
void stopAllDevices() {
digitalWrite(pump1, LOW); // Turn off pump 1
digitalWrite(pump2, LOW); // Turn off pump 2
digitalWrite(alarm, LOW); // Turn off alarm
pump1Running = false;
pump2Running = false;
alarmOn = false;
}