#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 23 /* mendefinisikan pin dimana sensor DHT terhubung*/
#define RED_LED 14 /*Pin LED Merah*/
#define YELLOW_LED 12 /*Pin LED Kuning*/
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
DHTesp dhtSensor; // mendeklarasikan objek dhtSensor
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (true);
}
delay(2000); // delay 2s untuk inisialisasi
oled.clearDisplay(); // clear display
oled.setTextSize(1); // mengatur ukuran text
oled.setTextColor(WHITE); // mengatur warna text
oled.setCursor(0, 10); // mengatur posisi text pada display
oled.println("RAHIMI ILLONG \nTABAYUNI"); // text yang akan ditampilkan
oled.setCursor(0, 30); // mengatur posisi text pada display
oled.println("225150707111046"); // text yang akan ditampilkan
oled.display(); // menampilkan text pada display
dhtSensor.setup(pinDHT, DHTesp::DHT22);/* memulai setup DHT*/
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
}
void loop() {
delay(2000);
// mengambil sekaligus data suhu dan kelembaban
TempAndHumidity data = dhtSensor.getTempAndHumidity();
// memisahkan data suhu dan data kelembaban
float temp = data.temperature;
float hum = data.humidity;
/* menampilkan pesan kesalahan apabila sensor DHT tidak terhubung atau tidak memberikan output angka */
if (isnan(hum) || isnan(temp)) {
oled.clearDisplay(); // clear display
oled.setTextSize(1); // mengatur ukuran text
oled.setTextColor(WHITE); // mengatur warna text
oled.setCursor(0, 10);
oled.println(F("Pembacaan sensor DHT tidak berhasil!"));
oled.display();
return;
}
oled.clearDisplay();
bool highTemp = false;
bool lowHum = false;
// Cek kondisi suhu tinggi
if (temp > 50){
highTemp = true;
}
// Cek kondisi kelembapan rendah
if (hum < 20){
lowHum = true;
}
if (highTemp && lowHum){
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, HIGH);
oled.setTextSize(1); // ukuran text normal
oled.setTextColor(WHITE); // warna text
oled.setCursor(0, 5);
oled.println("WARNING!!!");
oled.display();
} else if (highTemp) {
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
} else if (lowHum){
digitalWrite(YELLOW_LED, HIGH);
digitalWrite(RED_LED, LOW);
} else {
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
}
}