#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Definisikan tipe sensor DHT dan pin
#define DHTPIN 2 // Pin tempat sensor DHT terhubung
#define DHTTYPE DHT22 // Mengubah ke sensor DHT22
DHT dht(DHTPIN, DHTTYPE);
// Definisikan pin untuk LED (mensimulasikan kipas)
#define LED_PIN 9
// Inisialisasi LCD, alamat I2C biasanya 0x27 atau 0x3F
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
Serial.println("Sistem Mulai");
dht.begin();
pinMode(LED_PIN, OUTPUT);
lcd.begin(16, 2); // Memperbaiki argumen untuk lcd.begin()
lcd.backlight();
}
void loop() {
// Baca suhu dalam Celsius dari sensor DHT22
if (Serial.available() > 0) {
// Baca nilai suhu yang dimasukkan dari Serial
float temperature = Serial.parseFloat();
// Pastikan nilai suhu berada dalam rentang yang benar (0-50°C)
if (temperature < 0 || temperature > 50) {
Serial.println("Nilai suhu tidak valid! Harap masukkan nilai antara 0 hingga 50°C.");
return;
}
// Ubah suhu (0-50°C) menjadi sinyal PWM (0-255)
int ledBrightness = map(temperature, 0, 50, 0, 255);
// Batasi nilai kecerahan LED dalam rentang PWM yang valid
ledBrightness = constrain(ledBrightness, 0, 255);
// Atur kecerahan LED
analogWrite(LED_PIN, ledBrightness);
// Cetak suhu dan kecerahan LED ke Serial Monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print(" °C, Kecerahan LED: ");
Serial.println(ledBrightness);
// Tampilkan suhu dan kecepatan kipas di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kipas: ");
// Tentukan kecepatan kipas berdasarkan nilai PWM
if (ledBrightness >= 170) {
lcd.print("CEPAT");
} else if (ledBrightness >= 85) {
lcd.print("SEDANG");
} else if (ledBrightness > 0) {
lcd.print("LAMBAT");
} else {
lcd.print("OFF");
}
}
// Penundaan singkat sebelum membaca suhu lagi
delay(1000);
}