#include <Wire.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define MQ2_PIN 34 // Pin sensor MQ-2 di ESP32
#define SAFE_MIN 200 // Batas bawah kondisi aman
#define SAFE_MAX 300 // Batas atas kondisi aman
#define POLLUTED_MIN 310 // Batas bawah kondisi tercemar
#define POLLUTED_MAX 350 // Batas atas kondisi tercemar
#define DANGER_THRESHOLD 400 // Batas kondisi bahaya
void setup() {
Serial.begin(115200);
// Inisialisasi OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 OLED gagal!");
while (1);
}
display.clearDisplay();
display.display(); // Pastikan layar dibersihkan
Serial.println("Inisialisasi selesai.");
}
void loop() {
int gasLevel = analogRead(MQ2_PIN) / 10; // Penyesuaian skala sensor
Serial.println("Gas Level: " + String(gasLevel) + " ppm");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 10);
display.println("Deteksi Gas MQ-2");
display.setCursor(0, 30);
display.println("Gas: " + String(gasLevel) + " ppm");
// Cek level gas dan tampilkan status
if (gasLevel >= SAFE_MIN && gasLevel <= SAFE_MAX) {
display.setTextSize(1);
display.setCursor(0, 50);
display.println("Status: Aman ✅");
Serial.println("Status: Aman ✅");
}
else if (gasLevel >= POLLUTED_MIN && gasLevel <= POLLUTED_MAX) {
display.setTextSize(1);
display.setCursor(0, 50);
display.println("Status: Tercemar ⚠");
Serial.println("Status: Tercemar ⚠");
}
else if (gasLevel > DANGER_THRESHOLD) {
display.setTextSize(2);
display.setCursor(0, 50);
display.println("!! BAHAYA !!");
Serial.println("PERINGATAN: Gas melebihi batas! 🚨");
}
display.display();
delay(5000);
}