#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <DS18B20.h>
#define LCD_ADDR 0x27
LiquidCrystal_I2C lcd(LCD_ADDR, 16, 2); // จอ LCD ขนาด 16x2
#define LOW_ALARM 20
#define HIGH_ALARM 25
DS18B20 ds(4); // กำหนดขา data ของเซ็นเซอร์ DS18B20 ที่เชื่อมต่อกับขา GPIO4
int volue1 = 34; // ขาที่ใช้สำหรับอ่านค่าแรงดัน
int val_1 = 0; // ค่าที่อ่านจากเซ็นเซอร์
int val_2 = 0; // ค่าที่ทำการแปลงแล้ว
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
// เริ่มต้นจอ LCD
lcd.init();
lcd.backlight();
lcd.setCursor(5, 0);
lcd.print("SENSOR");
pinMode(volue1, INPUT); // ตั้งค่าขา volue1 เป็นขาอ่านข้อมูล (INPUT)
// ตั้งค่า Alarm สำหรับ DS18B20
while (ds.selectNext()) {
ds.setAlarms(LOW_ALARM, HIGH_ALARM);
}
}
void loop() {
// อ่านค่าแรงดันจากขา volue1
val_1 = analogRead(volue1);
// แสดงค่าอุณหภูมิใน Serial Monitor
Serial.print("Temperature: ");
Serial.print(ds.getTempC());
Serial.println(" C\n");
// แสดงค่าอุณหภูมิบนจอ LCD
lcd.setCursor(2, 0);
lcd.print("TEM = ");
lcd.print(ds.getTempC()); // แสดงค่าอุณหภูมิจาก DS18B20
lcd.print("c");
// แปลงค่าแรงดันที่อ่านได้เป็นค่าระหว่าง 0-5
val_2 = (val_1/4095)*5; // แปลงจากค่าระหว่าง 0-4095 เป็น 0-5
// แสดงค่าแรงดันที่อ่านได้บนจอ LCD
lcd.setCursor(0, 1);
lcd.print("Val=");
lcd.print(val_1);
lcd.setCursor(9, 1);
lcd.print("v=");
lcd.print(val_2); // แสดงค่าที่แปลงแล้ว
lcd.print("V");
delay(1000); // หน่วงเวลา 1 วินาที
}