#include <Wire.h>
#include <U8g2lib.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <WiFi.h>
// Pin untuk sensor DHT22
#define DHTPIN 5
#define DHTTYPE DHT22
// Pin untuk sensor ultrasonik
#define trigPin 19
#define echoPin 18
// OLED
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
// Deklarasi objek sensor
DHT dht(DHTPIN, DHTTYPE);
// Variabel global
float temperature;
float humidity;
float distance;
// Set batas suhu dan jarak
const float maxTemperature = 25.0; // Batas suhu maksimum
const float maxDistance = 99.0; // Batas jarak maksimum (dalam cm)
void setup() {
Serial.begin(115200);
// Inisialisasi sensor DHT22
dht.begin();
// Inisialisasi sensor ultrasonik
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Inisialisasi OLED
u8g2.begin();
}
void loop() {
// Baca suhu dan kelembaban dari sensor DHT22
humidity = dht.readHumidity();
temperature = dht.readTemperature();
// Baca jarak dari sensor ultrasonik
distance = getDistance();
// Tampilkan data di OLED
displayData();
// Periksa batas suhu dan jarak
checkLimits();
delay(500); // Delay 2 detik sebelum membaca sensor lagi
}
float getDistance() {
// Mengirimkan pulse ke sensor ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Menerima pulse dari sensor ultrasonik
return pulseIn(echoPin, HIGH) * 0.034 / 2;
}
void displayData() {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0, 10);
u8g2.print("Temperature: ");
u8g2.print(temperature);
u8g2.println(" C");
u8g2.setCursor(0, 25);
u8g2.print("Humidity: ");
u8g2.print(humidity);
u8g2.println(" %");
u8g2.setCursor(0, 40);
u8g2.print("Distance: ");
u8g2.print(distance);
u8g2.println(" cm");
} while (u8g2.nextPage());
}
void checkLimits() {
// Periksa batas suhu
if (temperature > maxTemperature) {
Serial.println("akan hujan, waspada");
// Tambahkan tindakan yang diinginkan saat suhu melebihi batas maksimum
}
// Periksa batas jarak
if (distance > maxDistance) {
Serial.println("siaga, banjir akan tiba");
// Tambahkan tindakan yang diinginkan saat jarak melebihi batas maksimum
}
}