// Pin definitions for ESP32
const int pumpMotorPin = 16;
const int waterLevelWarningPin = 17;
const int waterLevelCriticalPin = 18;
const int ledPumpRunningPin = 19;
const int ledSystemNormalPin = 21;
const int ledSystemAlarmPin = 22;
// Alarm flags
volatile bool longRunAlarm = false;
volatile bool shortRunAlarm = false;
volatile bool pumpRunContinuousAlarm = false;
volatile bool pumprunning = false;
volatile bool highWaterWarningAlarm = false;
volatile bool highWaterCriticalAlarm = false;
// Historical states
volatile bool pumprunningold = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
// Initialize pins
pinMode(pumpMotorPin, INPUT_PULLUP);
pinMode(waterLevelWarningPin, INPUT_PULLUP);
pinMode(waterLevelCriticalPin, INPUT_PULLUP);
pinMode(ledPumpRunningPin, OUTPUT);
pinMode(ledSystemNormalPin, OUTPUT);
pinMode(ledSystemAlarmPin, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
// check status of input pins
checkInputs();
delay(10); // this speeds up the simulation
}
void checkInputs(){
pumprunning = digitalRead(pumpMotorPin);
highWaterWarningAlarm = digitalRead(waterLevelWarningPin);
highWaterCriticalAlarm = digitalRead(waterLevelCriticalPin);
//Serial.println(pumprunning);
// check if the pump is running.
// if it is, the pumprunning state is HIGH
if (pumprunning == HIGH && pumprunningold == false) {
// turn Pump Runing LED on
digitalWrite(ledPumpRunningPin, HIGH);
pumprunningold = true;
//printLocalTime();
Serial.println(" The pump is running - turning on pump runing LED");
}
if (pumprunning == LOW && pumprunningold == true) {
// turn Pump Runing LED off
digitalWrite(ledPumpRunningPin, LOW);
// update pumprunningstatus
pumprunningold = false;
//printLocalTime();
Serial.println(" The pump is not running - turning off pump runing LED");
}
if( highWaterWarningAlarm == true && pumprunning == true){
digitalWrite(ledSystemNormalPin, HIGH);
}
else{
digitalWrite(ledSystemNormalPin, LOW);
}
if( highWaterCriticalAlarm == true && pumprunning == true){
digitalWrite(ledSystemAlarmPin, HIGH);
}
else{
digitalWrite(ledSystemAlarmPin, LOW);
}
}