#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define DHT_PIN 12
#define DHT_TYPE DHT22
#define BUZZER_PIN 7
#define LED_BIRU 13
#define LED_KUNING 4
#define LED_MERAH 2
DHT dht(DHT_PIN, DHT_TYPE);
LiquidCrystal_I2C lcd1(0x27, 16, 2); // First LCD (I2C)
LiquidCrystal lcd2(12, 11, 10, 9, 8, 7); // Second LCD (Parallel)
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setup() {
lcd1.init();
lcd1.backlight();
lcd1.print("Suhu: ");
lcd1.setCursor(0, 1);
lcd1.print("Celcius");
lcd2.begin(16, 2);
lcd2.print("Temperature: ");
lcd2.setCursor(0, 1);
lcd2.print("C");
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_BIRU, OUTPUT);
pinMode(LED_KUNING, OUTPUT);
pinMode(LED_MERAH, OUTPUT);
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(0, 0);
display.print("Temperature: ");
display.display();
}
void loop() {
noTone(BUZZER_PIN);
digitalWrite(LED_BIRU, LOW);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, LOW);
float temperature = dht.readTemperature();
lcd1.setCursor(6, 0);
lcd1.print(temperature, 1);
lcd2.setCursor(13, 1);
lcd2.print(temperature, 1);
display.clearDisplay();
display.setCursor(0, 0);
display.print("Temperature: ");
display.setCursor(0, 20);
display.print(temperature, 1);
display.print(" C");
if (temperature < 29) {
digitalWrite(LED_BIRU, HIGH);
display.setCursor(0, 30);
display.print("Temperature low");
}
else if (temperature >= 29 && temperature <= 35) {
digitalWrite(LED_KUNING, HIGH);
display.setCursor(0, 30);
display.print("Temperature optimal");
}
else if (temperature > 35) {
tone(BUZZER_PIN, 500);
digitalWrite(LED_MERAH, HIGH);
display.setCursor(0, 30);
display.print("Temperature high!");
}
display.display();
delay(1000);
}