#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "DHT.h"
#include "RTClib.h"
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
TwoWire rtcWire = TwoWire(1);
RTC_DS1307 rtc;
#define PIN_DHT 12
#define TIPE_DHT DHT22
DHT dht(PIN_DHT, TIPE_DHT);
// Sensor LDR dan PIR
#define PIN_LDR 36 // input analog
#define PIN_PIR 14 // input digital
void setup() {
Serial.begin(115200);
dht.begin();
pinMode(PIN_LDR, INPUT);
pinMode(PIN_PIR, INPUT);
Wire.begin(19, 18);
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED tidak ditemukan");
while (1);
}
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(SSD1306_WHITE);
rtcWire.begin(21, 22);
if (!rtc.begin(&rtcWire)) {
Serial.println("RTC tidak ditemukan.");
while (1);
}
if (!rtc.isrunning()) {
rtc.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop() {
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
bool gerakanTerdeteksi = digitalRead(PIN_PIR);
int nilaiLDR = analogRead(PIN_LDR);
float lux = map(nilaiLDR, 0, 4095, 0, 1000);
DateTime sekarang = rtc.now();
oled.clearDisplay();
oled.setCursor(0, 0);
oled.println("Nilai Parameter:");
oled.print("Suhu: ");
oled.print(suhu);
oled.println(" C");
oled.print("Kelemb: ");
oled.print(kelembapan);
oled.println(" %");
oled.print("Intensitas: ");
oled.print(lux);
oled.println(" lux");
oled.print("Objek: ");
oled.println(gerakanTerdeteksi ? "Ada" : "Tidak");
oled.print(sekarang.day());
oled.print("/");
oled.print(sekarang.month());
oled.print("/");
oled.print(sekarang.year());
oled.print(" ");
oled.print(sekarang.hour());
oled.print(":");
oled.println(sekarang.minute());
oled.display();
Serial.println("==============================");
Serial.print("Suhu: "); Serial.print(suhu); Serial.println(" C");
Serial.print("Kelembapan: "); Serial.print(kelembapan); Serial.println(" %");
Serial.print("Lux: "); Serial.print(lux); Serial.println(" lux");
Serial.print("Gerakan: "); Serial.println(gerakanTerdeteksi ? "Terdeteksi" : "Tidak");
Serial.println("==============================\n");
delay(2000);
}