#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Sensor pins
#define SENSOR1_PIN 6 // DS18B20 sensor 1
#define SENSOR2_PIN 7 // DS18B20 sensor 2
#define SENSOR3_PIN 8 // DS18B20 sensor 3
#define SENSOR4_PIN 9 // DS18B20 sensor 4
// Output pins
#define RELAY1 10 // RELAY control pin
#define RELAY2 11 // RELAY control pin
#define RELAY3 12 // RELAY control pin
#define RELAY4 13 // RELAY control pin
#define BUZZER A4 // Buzzer control pin
// DS18B20 setup for 4 sensors
OneWire oneWire1(SENSOR1_PIN);
OneWire oneWire2(SENSOR2_PIN);
OneWire oneWire3(SENSOR3_PIN);
OneWire oneWire4(SENSOR4_PIN);
DallasTemperature sensor1(&oneWire1);
DallasTemperature sensor2(&oneWire2);
DallasTemperature sensor3(&oneWire3);
DallasTemperature sensor4(&oneWire4);
float temperature1 = 0;
float temperature2 = 0;
float temperature3 = 0;
float temperature4 = 0;
int level = 0;
int index1 = 0;
int index2 = 0;
int my_1st_digit = 0;
int my_2nd_digit = 0;
int my_3rd_digit = 0;
int my_4th_digit = 0;
int password_1st_digit = 1;
int password_2nd_digit = 2;
int password_3rd_digit = 3;
int password_4th_digit = 4;
int t1_mode = 1;
int t1_low_value = 0;
int t1_high_value = 0;
int t2_mode = 1;
int t2_low_value = 0;
int t2_high_value = 0;
int t3_mode = 1;
int t3_low_value = 0;
int t3_high_value = 0;
int t4_mode = 1;
int t4_low_value = 0;
int t4_high_value = 0;
int backlight_mode = 1;
int upButton = 4;
int downButton = 3;
int selectButton = 2;
int backButton = 5;
unsigned long start_time = 0;
unsigned long hold_time = 0;
unsigned long backlight_start_time = 0;
bool backlightOn = false; // Track backlight state
int backlight_duration = 5000;
void welcome_screen() {
lcd.setCursor(3, 0);
lcd.print("--<WELCOME>--");
lcd.setCursor(3, 1);
lcd.print("Multifunction");
lcd.setCursor(4, 2);
lcd.print("Temperature");
lcd.setCursor(5, 3);
lcd.print("Controller");
}
void main_screen() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T1: ");
lcd.print(temperature1);
lcd.print((char)223);
lcd.print("C");
lcd.print(" R1: ");
lcd.print("OFF");
lcd.setCursor(0, 1);
lcd.print("T2: ");
lcd.print(temperature2);
lcd.print((char)223);
lcd.print("C");
lcd.print(" R2: ");
lcd.print("OFF");
lcd.setCursor(0, 2);
lcd.print("T3: ");
lcd.print(temperature3);
lcd.print((char)223);
lcd.print("C");
lcd.print(" R3: ");
lcd.print("OFF");
lcd.setCursor(0, 3);
lcd.print("T4: ");
lcd.print(temperature4);
lcd.print((char)223);
lcd.print("C");
lcd.print(" R4: ");
lcd.print("OFF");
}
void about_device_screen() {
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("MultiFunction");
lcd.setCursor(2, 1);
lcd.print("Temp Controller");
lcd.setCursor(1, 2);
lcd.print("4 channel, 4 modes");
lcd.setCursor(1, 3);
lcd.print("4 DS18B20, 4 RELAY");
}
void about_developer_screen() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("ABUL KASEM");
lcd.setCursor(1, 1);
lcd.print("Sub-Assistant Engr.");
lcd.setCursor(3, 2);
lcd.print("BPDB, Dinajpur");
lcd.setCursor(0, 3);
lcd.print("[email protected]");
}
void my_1st_digit_screen() {
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Enter Password");
lcd.setCursor(8, 2);
lcd.print(my_1st_digit);
lcd.print("*");
lcd.print("*");
lcd.print("*");
}
void my_2nd_digit_screen() {
lcd.setCursor(3, 0);
lcd.print("Enter Password");
lcd.setCursor(8, 2);
lcd.print("*");
lcd.print(my_2nd_digit);
lcd.print("*");
lcd.print("*");
}
void my_3rd_digit_screen() {
lcd.setCursor(3, 0);
lcd.print("Enter Password");
lcd.setCursor(8, 2);
lcd.print("*");
lcd.print("*");
lcd.print(my_3rd_digit);
lcd.print("*");
}
void my_4th_digit_screen() {
lcd.setCursor(3, 0);
lcd.print("Enter Password");
lcd.setCursor(8, 2);
lcd.print("*");
lcd.print("*");
lcd.print("*");
lcd.print(my_4th_digit);
}
void menu_screen() {
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("Setting");
lcd.setCursor(1, 1);
lcd.print("About Device");
lcd.setCursor(1, 2);
lcd.print("About Developer");
switch (index1) {
case 0: lcd.setCursor(0, 0); lcd.print(">"); break;
case 1: lcd.setCursor(0, 1); lcd.print(">"); break;
case 2: lcd.setCursor(0, 2); lcd.print(">"); break;
}
}
void setting_screen() {
lcd.clear();
lcd.setCursor(7, 0);
lcd.print("Setting");
if (index2 == 0 || index2 == 1 || index2 == 2){
lcd.setCursor(1, 1);
lcd.print("T1 Mode : ");
switch (t1_mode) {
case 1: lcd.print("Heater"); break;
case 2: lcd.print("Cooler"); break;
case 3: lcd.print("Over T"); break;
case 4: lcd.print("Under T"); break;
}
lcd.setCursor(1, 2);
lcd.print("T1 L.Value: ");
lcd.print(t1_low_value);
lcd.print((char)223); // Degree symbol
lcd.print("C");
lcd.setCursor(1, 3);
lcd.print("T1 H.Value: ");
lcd.print(t1_high_value);
lcd.print((char)223); // Degree symbol
lcd.print("C");
switch (index2) {
case 0: lcd.setCursor(0, 1); lcd.print(">"); break;
case 1: lcd.setCursor(0, 2); lcd.print(">"); break;
case 2: lcd.setCursor(0, 3); lcd.print(">"); break;
}
}
else if (index2 == 3 || index2 == 4 || index2 == 5){
lcd.setCursor(1, 1);
lcd.print("T2 Mode : ");
switch (t2_mode) {
case 1: lcd.print("Heater"); break;
case 2: lcd.print("Cooler"); break;
case 3: lcd.print("Over T"); break;
case 4: lcd.print("Under T"); break;
}
lcd.setCursor(1, 2);
lcd.print("T2 L.Value: ");
lcd.print(t2_low_value);
lcd.print((char)223); // Degree symbol
lcd.print("C");
lcd.setCursor(1, 3);
lcd.print("T2 H.Value: ");
lcd.print(t2_high_value);
lcd.print((char)223); // Degree symbol
lcd.print("C");
switch (index2) {
case 3: lcd.setCursor(0, 1); lcd.print(">"); break;
case 4: lcd.setCursor(0, 2); lcd.print(">"); break;
case 5: lcd.setCursor(0, 3); lcd.print(">"); break;
}
}
else if (index2 == 6 || index2 == 7 || index2 == 8){
lcd.setCursor(1, 1);
lcd.print("T3 Mode : ");
switch (t3_mode) {
case 1: lcd.print("Heater"); break;
case 2: lcd.print("Cooler"); break;
case 3: lcd.print("Over T"); break;
case 4: lcd.print("Under T"); break;
}
lcd.setCursor(1, 2);
lcd.print("T3 L.Value: ");
lcd.print(t3_low_value);
lcd.print((char)223); // Degree symbol
lcd.print("C");
lcd.setCursor(1, 3);
lcd.print("T3 H.Value: ");
lcd.print(t3_high_value);
lcd.print((char)223); // Degree symbol
lcd.print("C");
switch (index2) {
case 6: lcd.setCursor(0, 1); lcd.print(">"); break;
case 7: lcd.setCursor(0, 2); lcd.print(">"); break;
case 8: lcd.setCursor(0, 3); lcd.print(">"); break;
}
}
else if (index2 == 9 || index2 == 10 || index2 == 11){
lcd.setCursor(1, 1);
lcd.print("T4 Mode : ");
switch (t4_mode) {
case 1: lcd.print("Heater"); break;
case 2: lcd.print("Cooler"); break;
case 3: lcd.print("Over T"); break;
case 4: lcd.print("Under T"); break;
}
lcd.setCursor(1, 2);
lcd.print("T4 L.Value: ");
lcd.print(t4_low_value);
lcd.print((char)223); // Degree symbol
lcd.print("C");
lcd.setCursor(1, 3);
lcd.print("T4 H.Value: ");
lcd.print(t4_high_value);
lcd.print((char)223); // Degree symbol
lcd.print("C");
switch (index2) {
case 9: lcd.setCursor(0, 1); lcd.print(">"); break;
case 10: lcd.setCursor(0, 2); lcd.print(">"); break;
case 11: lcd.setCursor(0, 3); lcd.print(">"); break;
}
}
else if (index2 == 12){
lcd.setCursor(1, 1);
lcd.print("Backlight : ");
switch (backlight_mode) {
case 1: lcd.print("Normal"); break;
case 2: lcd.print("Always"); break;
}
switch (index2) {
case 12: lcd.setCursor(0, 1); lcd.print(">"); break;
}
}
}
void login_success_screen() {
lcd.clear();
lcd.setCursor(7, 1);
lcd.print("Success");
}
void incorrect_password_screen() {
lcd.clear();
lcd.setCursor(1, 1);
lcd.print("Incorrect Password");
}
//////////////////////////////////////////////
void t1_mode_screen() {
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("T1 Mode");
lcd.setCursor(6, 2);
lcd.print("<");
switch (t1_mode) {
case 1: lcd.print("Heater"); break;
case 2: lcd.print("Cooler"); break;
case 3: lcd.print("Over T"); break;
case 4: lcd.print("Under T"); break;
}
lcd.print(">");
}
void t1_low_value_screen() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("T1 L.Value");
lcd.setCursor(7, 2);
lcd.print("-<");
lcd.print(t1_low_value);
lcd.print(">+");
}
void t1_high_value_screen() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("T1 H.Value");
lcd.setCursor(7, 2);
lcd.print("-<");
lcd.print(t1_high_value);
lcd.print(">+");
}
///////////////////////////////////////////////
void t2_mode_screen() {
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("T2 Mode");
lcd.setCursor(6, 2);
lcd.print("<");
switch (t2_mode) {
case 1: lcd.print("Heater"); break;
case 2: lcd.print("Cooler"); break;
case 3: lcd.print("Over T"); break;
case 4: lcd.print("Under T"); break;
}
lcd.print(">");
}
void t2_lvalue_screen() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("T2 L.Value");
lcd.setCursor(7, 2);
lcd.print("-<");
lcd.print(t2_low_value);
lcd.print(">+");
}
void t2_hvalue_screen() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("T2 H.Value");
lcd.setCursor(7, 2);
lcd.print("-<");
lcd.print(t2_high_value);
lcd.print(">+");
}
///////////////////////////////////////
void t3_mode_screen() {
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("T3 Mode");
lcd.setCursor(6, 2);
lcd.print("<");
switch (t3_mode) {
case 1: lcd.print("Heater"); break;
case 2: lcd.print("Cooler"); break;
case 3: lcd.print("Over T"); break;
case 4: lcd.print("Under T"); break;
}
lcd.print(">");
}
void t3_lvalue_screen() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("T3 L.Value");
lcd.setCursor(7, 2);
lcd.print("-<");
lcd.print(t3_low_value);
lcd.print(">+");
}
void t3_hvalue_screen() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("T3 H.Value");
lcd.setCursor(7, 2);
lcd.print("-<");
lcd.print(t3_high_value);
lcd.print(">+");
}
//////////////////////////////////////
void t4_mode_screen() {
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("T4 Mode");
lcd.setCursor(6, 2);
lcd.print("<");
switch (t4_mode) {
case 1: lcd.print("Heater"); break;
case 2: lcd.print("Cooler"); break;
case 3: lcd.print("Over T"); break;
case 4: lcd.print("Under T"); break;
}
lcd.print(">");
}
void t4_lvalue_screen() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("T4 L.Value");
lcd.setCursor(7, 2);
lcd.print("-<");
lcd.print(t4_low_value);
lcd.print(">+");
}
void t4_hvalue_screen() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("T4 H.Value");
lcd.setCursor(7, 2);
lcd.print("-<");
lcd.print(t4_high_value);
lcd.print(">+");
}
/////////////
void saved_screen() {
lcd.clear();
lcd.setCursor(8, 1);
lcd.print("Saved");
}
void backlight_screen() {
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("Backlight");
lcd.setCursor(6, 2);
lcd.print("<");
switch (backlight_mode) {
case 1: lcd.print("Normal"); break;
case 2: lcd.print("Always"); break;
}
lcd.print(">");
}
//*********************************************************
void buttonPress() {
if (!digitalRead(upButton)) {
if (backlight_mode == 1) {
lcd.backlight(); // Turn on the backlight
backlightOn = true;
backlight_start_time = millis();
}
if (level == 1) index1++;
else if (level == 30) my_1st_digit++;
else if (level == 31) my_2nd_digit++;
else if (level == 32) my_3rd_digit++;
else if (level == 33) my_4th_digit++;
else if (level == 2) index2++;
else if (level == 200) t1_mode++;
else if (level == 201) t1_low_value++;
else if (level == 202) t1_high_value++;
else if (level == 203) t2_mode++;
else if (level == 204) t2_low_value++;
else if (level == 205) t2_high_value++;
else if (level == 206) t3_mode++;
else if (level == 207) t3_low_value++;
else if (level == 208) t3_high_value++;
else if (level == 209) t4_mode++;
else if (level == 210) t4_low_value++;
else if (level == 211) t4_high_value++;
else if (level == 212) backlight_mode++;
updateMenu();
delay(100);
start_time = millis();
while (!digitalRead(upButton)){
hold_time = millis() - start_time;
if (hold_time > 1000) {
if (level == 201) t1_low_value++;
else if (level == 202) t1_high_value++;
else if (level == 204) t2_low_value++;
else if (level == 205) t2_high_value++;
else if (level == 207) t3_low_value++;
else if (level == 208) t3_high_value++;
else if (level == 210) t4_low_value++;
else if (level == 211) t4_high_value++;
updateMenu();
delay(100);
}
}
}
if (!digitalRead(downButton)) {
if (backlight_mode == 1) {
lcd.backlight(); // Turn on the backlight
backlightOn = true;
backlight_start_time = millis();
}
if (level == 1) index1--;
else if (level == 30) my_1st_digit--;
else if (level == 31) my_2nd_digit--;
else if (level == 32) my_3rd_digit--;
else if (level == 33) my_4th_digit--;
else if (level == 2) index2--;
else if (level == 200) t1_mode--;
else if (level == 201) t1_low_value--;
else if (level == 202) t1_high_value--;
else if (level == 203) t2_mode--;
else if (level == 204) t2_low_value--;
else if (level == 205) t2_high_value--;
else if (level == 206) t3_mode--;
else if (level == 207) t3_low_value--;
else if (level == 208) t3_high_value--;
else if (level == 209) t4_mode--;
else if (level == 210) t4_low_value--;
else if (level == 211) t4_high_value--;
else if (level == 212) backlight_mode--;
updateMenu();
delay(100);
start_time = millis();
while (!digitalRead(downButton)){
hold_time = millis() - start_time;
if (hold_time > 1000) {
if (level == 201) t1_low_value--;
else if (level == 202) t1_high_value--;
else if (level == 204) t2_low_value--;
else if (level == 205) t2_high_value--;
else if (level == 207) t3_low_value--;
else if (level == 208) t3_high_value--;
else if (level == 210) t4_low_value--;
else if (level == 211) t4_high_value--;
updateMenu();
delay(100);
}
}
}
if (!digitalRead(selectButton)) {
if (backlight_mode == 1) {
lcd.backlight(); // Turn on the backlight
backlightOn = true;
backlight_start_time = millis();
}
executeAction();
updateMenu();
delay(100);
while (!digitalRead(selectButton));
}
if (!digitalRead(backButton)) {
if (backlight_mode == 1) {
lcd.backlight(); // Turn on the backlight
backlightOn = true;
backlight_start_time = millis();
}
if (level == 1) level = 0;
else if (level == 30 || level == 31 || level == 32 || level == 33 || level == 4 || level == 5 || level == 2) level = 1;
else if (level == 200 || level == 201 || level == 202 || level == 203 || level == 204 || level == 205 || level == 206 ||
level == 207 || level == 208 || level == 209 || level == 210 || level == 211 || level == 212) level = 2;
updateMenu();
delay(100);
while (!digitalRead(backButton));
}
}
void reset_digit() {
my_1st_digit = 0;
my_2nd_digit = 0;
my_3rd_digit = 0;
my_4th_digit = 0;
}
//*************************************************************
void executeAction() {
if (level == 0) {
level = 1;
index1 = 0;
}
else if (level == 1) {
switch (index1) {
case 0: level = 30; break;
case 1: level = 4; break;
case 2: level = 5; break;
}
}
else if (level == 2) {
switch (index2) {
case 0: level = 200; break;
case 1: level = 201; break;
case 2: level = 202; break;
case 3: level = 203; break;
case 4: level = 204; break;
case 5: level = 205; break;
case 6: level = 206; break;
case 7: level = 207; break;
case 8: level = 208; break;
case 9: level = 209; break;
case 10: level = 210; break;
case 11: level = 211; break;
case 12: level = 212; break;
}
}
else if (level == 30) {
level = 31;
} else if (level == 31) {
level = 32;
} else if (level == 32) {
level = 33;
}
else if (level == 33) {
if (my_1st_digit == password_1st_digit && my_2nd_digit == password_2nd_digit && my_3rd_digit == password_3rd_digit && my_4th_digit == password_4th_digit) {
login_success_screen();
delay(1000);
reset_digit();
level = 2;
} else {
incorrect_password_screen();
delay(1000);
reset_digit();
level = 1;
}
}
else if (level == 200) {saved_screen(); delay(1000); level = 2;}
else if (level == 201) {saved_screen(); delay(1000); level = 2;}
else if (level == 202) {saved_screen(); delay(1000); level = 2;}
else if (level == 203) {saved_screen(); delay(1000); level = 2;}
else if (level == 204) {saved_screen(); delay(1000); level = 2;}
else if (level == 205) {saved_screen(); delay(1000); level = 2;}
else if (level == 206) {saved_screen(); delay(1000); level = 2;}
else if (level == 207) {saved_screen(); delay(1000); level = 2;}
else if (level == 208) {saved_screen(); delay(1000); level = 2;}
else if (level == 209) {saved_screen(); delay(1000); level = 2;}
else if (level == 210) {saved_screen(); delay(1000); level = 2;}
else if (level == 211) {saved_screen(); delay(1000); level = 2;}
else if (level == 212) {saved_screen(); delay(1000); level = 2;}
}
//***********************************************************
void updateMenu() {
if (level == 0) main_screen();
else if (level == 1) {
if (index1 < 0) index1 = 2;
if (index1 > 2) index1 = 0;
menu_screen();
}
else if (level == 4) {
about_device_screen();
}
else if (level == 5) {
about_developer_screen();
}
else if (level == 30) {
if (my_1st_digit < 0) {
my_1st_digit = 9;
}
if (my_1st_digit > 9) {
my_1st_digit = 0;
}
my_1st_digit_screen();
} else if (level == 31) {
if (my_2nd_digit < 0) {
my_2nd_digit = 9;
}
if (my_2nd_digit > 9) {
my_2nd_digit = 0;
}
my_2nd_digit_screen();
} else if (level == 32) {
if (my_3rd_digit < 0) {
my_3rd_digit = 9;
}
if (my_3rd_digit > 9) {
my_3rd_digit = 0;
}
my_3rd_digit_screen();
} else if (level == 33) {
if (my_4th_digit < 0) {
my_4th_digit = 9;
}
if (my_4th_digit > 9) {
my_4th_digit = 0;
}
my_4th_digit_screen();
}
else if (level == 2) {
if (index2 < 0) index2 = 12;
if (index2 > 12) index2 = 0;
setting_screen();
}
else if (level == 200) {
if (t1_mode < 1) {
t1_mode = 4;
}
if (t1_mode > 4) {
t1_mode = 1;
}
t1_mode_screen();
}
else if (level == 201) {
if (t1_low_value < 0) {
t1_low_value = 99;
}
if (t1_low_value > 99) {
t1_low_value = 0;
}
t1_low_value_screen();
}
else if (level == 202) {
if (t1_high_value < 0) {
t1_high_value = 99;
}
if (t1_high_value > 99) {
t1_high_value = 0;
}
t1_high_value_screen();
}
else if (level == 203) {
if (t2_mode < 1) {
t2_mode = 4;
}
if (t2_mode > 4) {
t2_mode = 1;
}
t2_mode_screen();
}
else if (level == 204) {
if (t2_low_value < 0) {
t2_low_value = 99;
}
if (t2_low_value > 99) {
t2_low_value = 0;
}
t2_lvalue_screen();
}
else if (level == 205) {
if (t2_high_value < 0) {
t2_high_value = 99;
}
if (t2_high_value > 99) {
t2_high_value = 0;
}
t2_hvalue_screen();
}
else if (level == 206) {
if (t3_mode < 1) {
t3_mode = 4;
}
if (t3_mode > 4) {
t3_mode = 1;
}
t3_mode_screen();
}
else if (level == 207) {
if (t3_low_value < 0) {
t3_low_value = 99;
}
if (t3_low_value > 99) {
t3_low_value = 0;
}
t3_lvalue_screen();
}
else if (level == 208) {
if (t3_high_value < 0) {
t3_high_value = 99;
}
if (t3_high_value > 99) {
t3_high_value = 0;
}
t3_hvalue_screen();
}
else if (level == 209) {
if (t4_mode < 1) {
t4_mode = 4;
}
if (t4_mode > 4) {
t4_mode = 1;
}
t4_mode_screen();
}
else if (level == 210) {
if (t4_low_value < 0) {
t4_low_value = 99;
}
if (t4_low_value > 99) {
t4_low_value = 0;
}
t4_lvalue_screen();
}
else if (level == 211) {
if (t4_high_value < 0) {
t4_high_value = 99;
}
if (t4_high_value > 99) {
t4_high_value = 0;
}
t4_hvalue_screen();
}
else if (level == 212) {
if (backlight_mode < 1) {
backlight_mode = 2;
}
if (backlight_mode > 2) {
backlight_mode = 1;
}
backlight_screen();
}
}
void backlightMode() {
// Turn off the backlight if the hold time has passed
if (backlightOn && (millis() - backlight_start_time >= backlight_duration)) {
lcd.noBacklight(); // Turn off the backlight
backlightOn = false;
}
if (backlight_mode == 2) {
lcd.backlight(); // Turn on the backlight
}
}
//******************************************************
void setup() {
lcd.init();
lcd.noBacklight();
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
pinMode(backButton, INPUT_PULLUP);
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(RELAY4, OUTPUT);
pinMode(BUZZER, OUTPUT);
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, LOW);
digitalWrite(RELAY3, LOW);
digitalWrite(RELAY4, LOW);
digitalWrite(BUZZER, LOW);
// Initialize DS18B20 sensors
sensor1.begin();
sensor2.begin();
sensor3.begin();
sensor4.begin();
lcd.backlight();
welcome_screen();
delay(3000);
updateMenu();
delay(2000);
lcd.noBacklight();
}
void loop() {
backlightMode();
buttonPress();
// Request temperature data from all sensors
sensor1.requestTemperatures();
sensor2.requestTemperatures();
sensor3.requestTemperatures();
sensor4.requestTemperatures();
// Read temperatures in Celsius
float temperature1 = sensor1.getTempCByIndex(0);
float temperature2 = sensor2.getTempCByIndex(0);
float temperature3 = sensor3.getTempCByIndex(0);
float temperature4 = sensor4.getTempCByIndex(0);
// Handle sensor 1
if (temperature1 != DEVICE_DISCONNECTED_C) {
// Relay and buzzer control for different modes
switch (t1_mode) {
case 1:
// Relay ON when below lower threshold, OFF when above upper threshold
if (temperature1 <= t1_low_value) {
digitalWrite(RELAY1, HIGH); // Turn relay ON
} else if (temperature1 >= t1_high_value) {
digitalWrite(RELAY1, LOW); // Turn relay OFF
}
break;
case 2:
// Reverse logic: Relay OFF below lower threshold, ON above upper threshold
if (temperature1 <= t1_low_value) {
digitalWrite(RELAY1, LOW); // Turn relay OFF
} else if (temperature1 >= t1_high_value) {
digitalWrite(RELAY1, HIGH); // Turn relay ON
}
break;
case 3:
// Activate buzzer above lower threshold, relay ON above upper threshold
if (temperature1 >= t1_low_value) {
digitalWrite(BUZZER, HIGH); // Turn buzzer ON
}
else {
digitalWrite(BUZZER, LOW); // Turn buzzer ON
}
if (temperature1 >= t1_high_value) {
digitalWrite(RELAY1, HIGH); // Turn relay ON
}
break;
case 4:
// Activate buzzer below lower threshold, relay ON below upper threshold
if (temperature1 <= t1_low_value) {
digitalWrite(RELAY1, HIGH); // Turn relay ON
}
if (temperature1 <= t1_high_value) {
digitalWrite(BUZZER, HIGH); // Turn buzzer ON
}
else {
digitalWrite(BUZZER, LOW); // Turn buzzer ON
}
break;
default:
Serial.println("Invalid mode!");
}
} else {
Serial.println("Sensor 1 not found!");
}
}