#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
// OLED object
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// DHT22 settings
#define DHTPIN 17 // <--- Pin yang benar
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
// I2C OLED
Wire.begin(21, 22); // SDA=21, SCL=22
// OLED init
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED tidak terdeteksi!");
while (1);
}
// DHT22 init
dht.begin();
// Splash screen
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(0, 0);
display.println("Xanny");
display.setTextSize(1);
display.println("OLED + DHT22");
display.display();
delay(1500);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
// Jika gagal baca sensor
if (isnan(h) || isnan(t)) {
display.clearDisplay();
display.setCursor(0, 0);
display.setTextSize(1);
display.println("Error membaca");
display.println("sensor DHT22!");
display.display();
delay(1000);
return;
}
// Tampilkan ke OLED
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.println("Xanny I2C + DHT22");
display.setTextSize(2);
display.setCursor(0, 20);
display.print(t, 1);
display.println(" C");
display.setCursor(0, 45);
display.print(h, 1);
display.println(" %");
display.display();
// Buat trafic I2C untuk logic analyzer
Wire.beginTransmission(0x3C);
Wire.write(0x00);
Wire.write((int)t);
Wire.endTransmission();
delay(1000);
}