int tempPin = 15;
int redLedPin = 14;
int greenLedPin = 27;
int sliderPin = 26;
int relayPin = 4;
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
void drawProgressBar(int progress, int maxProgress) {
int progressBarWidth = LCD_COLUMNS - 2; // Leave space for borders
int filledBarWidth = progressBarWidth * progress / maxProgress;
lcd.setCursor(0, 2);
lcd.print("[");
for (int i = 0; i < progressBarWidth; i++) {
if (i < filledBarWidth) {
lcd.print("#");
} else {
lcd.print(" ");
}
}
lcd.print("]");
}
void setup() {
Serial.begin(9600);
analogReadResolution(10);
lcd.init();
lcd.backlight();
pinMode(tempPin, INPUT);
pinMode(sliderPin, INPUT);
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(relayPin, OUTPUT);
}
void loop() {
int analogValue = analogRead(tempPin);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
Serial.print("Temperature: ");
Serial.print(celsius);
Serial.println(" ℃");
int sliderValue = analogRead(sliderPin);
Serial.print("Slider Value: ");
Serial.println(sliderValue);
if (celsius >= 35) {
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
digitalWrite(relayPin, HIGH);
}
else {
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
digitalWrite(relayPin, LOW);
}
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.print(celsius);
lcd.print(" C");
sliderValue = analogRead(sliderPin) / 4; // Adjust the division factor based on the range of your slider
int desiredTemp = map(sliderValue, 0, 255, 0, 80);
lcd.setCursor(0, 1);
lcd.print("Desired Temp: ");
lcd.print(desiredTemp);
lcd.print(" C");
drawProgressBar(desiredTemp, 80);
delay(1000);
lcd.clear();
}