//Archie Vian Nizam Efendi - 225150701111022
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHTesp.h>
#define SCREEN_WIDTH 128 // lebar display OLED dalam pixel
#define SCREEN_HEIGHT 64 // tinggi display OLED dalam pixel
#define pinDHT 16 // Pin untuk sensor DHT22
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHTesp dhtSensor;
void setup() {
Serial.begin(115200);
// Inisialisasi OLED display dengan alamat I2C = 0x3C
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (true);
}
delay(2000); // delay 2s untuk inisialisasi
dhtSensor.setup(pinDHT, DHTesp::DHT22);
oled.clearDisplay(); // Clear display OLED
oled.setTextSize(1); // Atur ukuran teks
oled.setTextColor(WHITE); // Atur warna teks
}
void loop() {
delay(2000); // Delay untuk pengambilan data setiap 2 detik
// Membaca suhu dan kelembapan dari DHT22
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temp = data.temperature;
float hum = data.humidity;
// Jika pembacaan gagal, tampilkan error di serial monitor
if (isnan(hum) || isnan(temp)) {
Serial.println(F("Pembacaan sensor DHT tidak berhasil!"));
return;
}
// Menampilkan suhu dan kelembapan di Serial Monitor
Serial.print("Kelembaban: ");
Serial.print(hum);
Serial.print("% \tSuhu: ");
Serial.print(temp);
Serial.print("°C ");
Serial.println();
// Clear OLED display sebelum menampilkan data baru
oled.clearDisplay();
bool showTempWarning = false;
bool showHumWarning = false;
// Peringatan Suhu Tinggi
if (temp > 30) {
showTempWarning = true;
oled.setCursor(0, 10);
oled.println("Peringatan: Suhu Tinggi!");
}
// Peringatan Kelembapan Rendah
if (hum < 20) {
showHumWarning = true;
oled.setCursor(0, 30);
oled.println("Peringatan: Kelembapan Rendah!");
}
// Jika tidak ada peringatan, tampilkan suhu dan kelembapan
if (!showTempWarning && !showHumWarning) {
oled.setCursor(0, 10);
oled.print("Suhu: ");
oled.print(temp);
oled.println(" C");
oled.setCursor(0, 30);
oled.print("Kelembapan: ");
oled.print(hum);
oled.println(" %");
}
// Menampilkan hasil di OLED
oled.display();
}