#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
#define R1 12
#define R2 11
#define R3 10
#define R4 9
#define C1 8
#define C2 7
#define C3 6
#define Led 4
unsigned long Ttime;
int set = 20;
String input = "";
const float BETA = 3950;
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
void setup()
{
pinMode(Led,OUTPUT);
pinMode(R1,OUTPUT);
pinMode(R2,OUTPUT);
pinMode(R3,OUTPUT);
pinMode(R4,OUTPUT);
pinMode(C1,INPUT_PULLUP);
pinMode(C2,INPUT_PULLUP);
pinMode(C3,INPUT_PULLUP);
digitalWrite(R1,HIGH);
digitalWrite(R2,HIGH);
digitalWrite(R3,HIGH);
digitalWrite(R4,HIGH);
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Hello, world!");
lcd.setCursor(0, 1);
lcd.print("enter set temp");
delay(2000);
lcd.clear();
}
void loop()
{
char key = scankey();
if (key != 0) {
if (key >= '0' && key <= '9') {
if (input.length() < 3) {
input += key;
lcd.setCursor(0, 1);
lcd.print("Set T: ");
lcd.print(input + " ");
}
} else if (key == '*') {
input = "";
lcd.setCursor(0, 1);
lcd.print("Set T: ");
} else if (key == '#') {
if (input.length() > 0) {
set = input.toInt();
input = "";
}
}
}
checkT();
}
void checkT()
{
if ((millis() - Ttime) > 1000)
{
Ttime = millis();
int analogValue = analogRead(A0);
float celsius = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
Serial.print("Temperature: ");
Serial.print(celsius);
Serial.println(" ℃");
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(celsius,1);
lcd.print((char)223);
lcd.print("C ");
if (celsius > set + 1) {
digitalWrite(Led, HIGH);
lcd.print("ON ");
}
else if (celsius < set - 1) {
digitalWrite(Led, LOW);
lcd.print("OFF");
}
else {
lcd.print("OFF");
}
}
}
char scankey()
{
char key = 0;
digitalWrite(R1, LOW);
if(digitalRead(C1) == 0) key = '1';
if(digitalRead(C2) == 0) key = '2';
if(digitalRead(C3) == 0) key = '3';
digitalWrite(R1, HIGH);
digitalWrite(R2, LOW);
if(digitalRead(C1) == 0) key = '4';
if(digitalRead(C2) == 0) key = '5';
if(digitalRead(C3) == 0) key = '6';
digitalWrite(R2, HIGH);
digitalWrite(R3, LOW);
if(digitalRead(C1) == 0) key = '7';
if(digitalRead(C2) == 0) key = '8';
if(digitalRead(C3) == 0) key = '9';
digitalWrite(R3, HIGH);
digitalWrite(R4, LOW);
if(digitalRead(C1) == 0) key = '*';
if(digitalRead(C2) == 0) key = '0';
if(digitalRead(C3) == 0) key = '#';
digitalWrite(R4, HIGH);
delay(100);
return key;
}