#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// Konfigurasi OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Konfigurasi DHT22
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Konfigurasi LED
#define LED_MERAH 14
#define LED_KUNING 16 // Menggunakan pin GPIO 16 untuk LED kuning
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Inisialisasi OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("OLED tidak ditemukan"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Nama: Nama Anda");
display.println("NIM: 1234567890");
display.display();
delay(2000);
// Inisialisasi DHT22
dht.begin();
// Inisialisasi LED
pinMode(LED_MERAH, OUTPUT);
pinMode(LED_KUNING, OUTPUT);
}
void loop() {
// Membaca data dari DHT22
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
// Mengecek apakah pembacaan gagal
if (isnan(suhu) || isnan(kelembaban)) {
Serial.println(F("Gagal membaca dari sensor DHT22"));
return;
}
// Log ke Serial Monitor
Serial.print(F("Suhu: "));
Serial.print(suhu);
Serial.print(F(" °C, Kelembaban: "));
Serial.print(kelembaban);
Serial.println(F(" %"));
// Logika untuk menyalakan LED
bool ledMerahNyala = false;
bool ledKuningNyala = false;
if (suhu < 0) {
digitalWrite(LED_MERAH, HIGH);
ledMerahNyala = true;
} else {
digitalWrite(LED_MERAH, LOW);
}
if (kelembaban > 60) {
digitalWrite(LED_KUNING, HIGH);
ledKuningNyala = true;
} else {
digitalWrite(LED_KUNING, LOW);
}
// Menampilkan Warning di OLED jika kedua LED menyala
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.println("Nama: Nama Anda");
display.println("NIM: 1234567890");
if (ledMerahNyala && ledKuningNyala) {
display.setTextSize(2);
display.setCursor(0, 32);
display.println("Warning!");
}
display.display();
delay(2000); // Delay 2 detik sebelum membaca kembali
}