#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define I2C_ADDR 0x27
#define I2C_ADDR2 0x25
#define LCD_COLUMNS 16
#define LCD_LINES 2
// First LCD pins
#define LCD1_SDA 21
#define LCD1_SCL 22
// Second LCD pins
#define LCD2_SDA 16
#define LCD2_SCL 17
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
LiquidCrystal_I2C lcd2(I2C_ADDR2, LCD_COLUMNS, LCD_LINES);
const float BETA = 3950;
int prevBedTemp = -1;
int prevTargetTemp = -1;
void setup() {
Serial.begin(115200);
// Initialize primary I2C bus
Wire.begin(LCD1_SDA, LCD1_SCL);
pinMode(35, INPUT);
pinMode(34, INPUT);
pinMode(18, OUTPUT);
// Initialize first LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Bed Temp: ---");
lcd.setCursor(2, 1);
lcd.print("Target: ---");
// Change I2C pins for second LCD
Wire.end();
Wire.begin(LCD2_SDA, LCD2_SCL);
// Initialize second LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Hello World");
Wire.end();
// Change back to first LCD pins
}
void loop() {
int analogBedTemp = analogRead(34);
Serial.println(analogBedTemp);
int bedTemp = (analogBedTemp / 4);
Wire.begin(LCD1_SDA, LCD1_SCL);
if (bedTemp != prevBedTemp) {
lcd.setCursor(10, 0);
lcd.print(" ");
lcd.setCursor(10, 0);
lcd.print(bedTemp);
lcd.print((char)223);
lcd.print("C");
prevBedTemp = bedTemp;
}
int targetValue = analogRead(35);
float targetTemp = (targetValue / 1023.0) * 30.0;
int roundedTargetTemp = round(targetTemp);
if (bedTemp <= (roundedTargetTemp - 1)) {
digitalWrite(18, HIGH);
} else if (bedTemp >= (roundedTargetTemp + 1)) {
digitalWrite(18, LOW);
}
if (roundedTargetTemp != prevTargetTemp) {
lcd.setCursor(10, 1);
lcd.print(" ");
lcd.setCursor(10, 1);
lcd.print(roundedTargetTemp);
lcd.print((char)223);
lcd.print("C");
prevTargetTemp = roundedTargetTemp;
}
// Switch to LCD2 pins and update display if needed
delay(500);
Wire.end();
Wire.begin(LCD2_SDA, LCD2_SCL);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Hello World");
delay(500);
Wire.end();
}