#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
// Pin konfigurasi
const int ONE_WIRE_BUS = 6; // Pin DS18B20
const int LEDGREEN = 8; // LED Hijau
const int LEDBLUE = 4; // LED Kuning
const int LEDRED = 12; // LED Merah
// Setup sensor DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Setup LCD I2C (alamat bisa 0x27 atau 0x3F tergantung modul)
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(LEDGREEN, OUTPUT);
pinMode(LEDBLUE, OUTPUT);
pinMode(LEDRED, OUTPUT);
Serial.begin(115200);
sensors.begin(); // Inisialisasi DS18B20
lcd.init();
lcd.backlight();
}
void loop() {
sensors.requestTemperatures(); // Ambil data suhu
float suhuC = sensors.getTempCByIndex(0); // Suhu dalam Celcius
float suhuF = sensors.toFahrenheit(suhuC); // Konversi ke Fahrenheit
// Debug serial monitor
Serial.print("Suhu: ");
Serial.print(suhuC, 1);
Serial.print(" °C / ");
Serial.print(suhuF, 1);
Serial.println(" °F");
// Tampilkan ke LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu Temp : ");
lcd.print(suhuC, 1);
lcd.print((char)223);
lcd.print("Temp");
lcd.setCursor(0, 1);
lcd.print("Suhu Fahrn : ");
lcd.print(suhuF, 1);
lcd.print((char)223);
lcd.print("Fahrn");
// Kontrol LED
if (suhuC < 25.0) { // Dingin
digitalWrite(LEDBLUE, HIGH);
digitalWrite(LEDGREEN, LOW);
digitalWrite(LEDRED, LOW);
}
else if (suhuC >= 25.0 && suhuC <= 35.0) { // Normal
digitalWrite(LEDBLUE, LOW);
digitalWrite(LEDGREEN, HIGH);
digitalWrite(LEDRED, LOW);
}
else { // Panas (suhu > 35 °C)
digitalWrite(LEDBLUE, LOW);
digitalWrite(LEDGREEN, LOW);
digitalWrite(LEDRED, HIGH);
}
delay(1000); // Baca setiap 1 detik
}