//#include <TM1637Display.h> // Uncomment this if you are using the TM1637 display
#define FULL_TANK_LED_PIN 2
#define REFILL_LED_PIN 3
#define EMPTY_TANK_LED_PIN 4
#define ELEVATED_TANK_SWITCH_PIN 5
#define HOT_WATER_TANK_SWITCH_PIN 6
#define HEATER_CONTROL_PIN 7
#define MOSFET_GATE_PIN 8
#define TEMP_SENSOR_PIN A1 // Assuming analog read
#define LEVEL_SENSOR_PIN A0
#define TEMP_LED_PIN 9 // Define the pin for temperature LED indicator
//TM1637Display display(CLK_PIN, DIO_PIN);
// Define constants for thresholds
const float FULL_TANK_THRESHOLD = 4500;
const float REFILL_TANK_THRESHOLD = 2000;
const float MIN_UNDERGROUND_WATER_LEVEL = 1500;
const float MAX_UNDERGROUND_WATER_LEVEL = 10000;
const float TEMP_HIGH_THRESHOLD = 65;
void setup() {
pinMode(FULL_TANK_LED_PIN, OUTPUT);
pinMode(REFILL_LED_PIN, OUTPUT);
pinMode(EMPTY_TANK_LED_PIN, OUTPUT);
pinMode(ELEVATED_TANK_SWITCH_PIN, INPUT_PULLUP);
pinMode(HOT_WATER_TANK_SWITCH_PIN, INPUT_PULLUP);
pinMode(HEATER_CONTROL_PIN, OUTPUT);
pinMode(TEMP_SENSOR_PIN, INPUT);
pinMode(MOSFET_GATE_PIN, OUTPUT);
pinMode(TEMP_LED_PIN, OUTPUT); // Set temperature LED pin as output
digitalWrite(MOSFET_GATE_PIN, LOW); // Ensure the MOSFET is off initially
Serial.begin(9600); // Initialize serial communication at 9600 baud
//display.setBrightness(0x0f); // Set the display brightness
}
void loop() {
// Read the level sensor and convert to water level
int levelSensorValue = analogRead(LEVEL_SENSOR_PIN);
float waterLevel = (levelSensorValue / 1023.0) * 10000;
//display.showNumberDec((int)waterLevel); // Display the water level
// Debugging output
Serial.print("Water Level: ");
Serial.println(waterLevel);
// LED control based on water level
if (waterLevel > FULL_TANK_THRESHOLD) {
digitalWrite(FULL_TANK_LED_PIN, HIGH);
digitalWrite(REFILL_LED_PIN, LOW);
digitalWrite(EMPTY_TANK_LED_PIN, LOW);
} else if (waterLevel > REFILL_TANK_THRESHOLD && waterLevel <= FULL_TANK_THRESHOLD) {
digitalWrite(FULL_TANK_LED_PIN, LOW);
digitalWrite(REFILL_LED_PIN, HIGH);
digitalWrite(EMPTY_TANK_LED_PIN, LOW);
} else {
digitalWrite(FULL_TANK_LED_PIN, LOW);
digitalWrite(REFILL_LED_PIN, LOW);
digitalWrite(EMPTY_TANK_LED_PIN, HIGH);
}
// Pump control based on elevated tank and underground tank levels
bool elevatedTankFull = digitalRead(ELEVATED_TANK_SWITCH_PIN) == LOW;
if (!elevatedTankFull && waterLevel > MIN_UNDERGROUND_WATER_LEVEL) {
digitalWrite(MOSFET_GATE_PIN, HIGH); // Turn on the pump
} else {
digitalWrite(MOSFET_GATE_PIN, LOW); // Turn off the pump
}
// bool elevatedTankFull = digitalRead(ELEVATED_TANK_SWITCH_PIN) == LOW;
// if (!elevatedTankFull && waterLevel > MAX_UNDERGROUND_WATER_LEVEL) {
// digitalWrite(MOSFET_GATE_PIN, LOW); // Turn on the pump
// } else {
// digitalWrite(MOSFET_GATE_PIN, HIGH); // Turn off the pump
// }
// Debugging output
Serial.print("Elevated Tank Full: ");
Serial.println(elevatedTankFull);
// Heater control based on hot water tank level and temperature
bool hotWaterTankFull = digitalRead(HOT_WATER_TANK_SWITCH_PIN) == LOW;
int tempSensorValue = analogRead(TEMP_SENSOR_PIN); // Assuming analog temperature sensor
float celsius = 1 / (log(1 / (1023. / tempSensorValue - 1)) / 3950 + 1.0 / 298.15) - 273.15;
float voltage = (tempSensorValue / 1023.0) * 5.0; // Convert to voltage
float temperature = (voltage - 0.5) * 100.0; // Assuming a TMP36 sensor
// Debugging output
Serial.print("Temperature: ");
Serial.println(celsius);
// const float BETA = 3950; // should match the Beta Coefficient of the thermistor
// int analogValue = analogRead(A0);
// float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Control temperature LED based on temperature
if (temperature >= TEMP_HIGH_THRESHOLD) {
digitalWrite(TEMP_LED_PIN, HIGH); // Turn on temperature LED
} else {
digitalWrite(TEMP_LED_PIN, LOW); // Turn off temperature LED
}
if (hotWaterTankFull && temperature < TEMP_HIGH_THRESHOLD) {
digitalWrite(HEATER_CONTROL_PIN, HIGH); // Turn on the heater
} else {
digitalWrite(HEATER_CONTROL_PIN, LOW); // Turn off the heater
}
delay(100); // Adjust delay as needed
}