#include <OneWire.h> // Library untuk komunikasi satu kawat (OneWire) yang digunakan oleh sensor DS18B20
#include <DallasTemperature.h> // Library untuk menangani sensor suhu DS18B20
// Pin definisi
#define ONE_WIRE_BUS 15 // Mendefinisikan pin GPIO15 untuk koneksi data sensor suhu DS18B20
#define LDRPIN 18 // Mendefinisikan pin GPIO18 untuk koneksi sensor LDR (sensor cahaya)
#define PIRPIN 16 // Mendefinisikan pin GPIO16 untuk koneksi sensor gerak PIR
// Setup untuk DS18B20
OneWire oneWire(ONE_WIRE_BUS); // Membuat objek oneWire yang menghubungkan DS18B20 ke pin yang telah didefinisikan (GPIO15)
DallasTemperature sensors(&oneWire); // Membuat objek sensors untuk mengakses fungsi dari library DallasTemperature melalui oneWire
void setup() {
Serial.begin(9600); // Memulai komunikasi serial dengan baud rate 9600 untuk menampilkan data di Serial Monitor
sensors.begin(); // Menginisialisasi sensor DS18B20 agar siap digunakan
pinMode(PIRPIN, INPUT); // Mengatur pin PIR (GPIO16) sebagai input untuk mendeteksi gerakan
}
void loop() {
// Baca suhu dari DS18B20
sensors.requestTemperatures(); // Meminta data suhu dari sensor DS18B20
float temperature = sensors.getTempCByIndex(0); // Mengambil data suhu dalam satuan Celcius dari sensor DS18B20 pada indeks pertama
// Baca nilai LDR
int lightLevel = analogRead(LDRPIN); // Membaca nilai analog dari sensor LDR (sensor cahaya) yang terhubung ke pin analog GPIO18
// Baca status PIR
int motionDetected = digitalRead(PIRPIN); // Membaca status digital dari sensor PIR (sensor gerak) pada pin GPIO16 (HIGH jika ada gerakan, LOW jika tidak ada)
// Tampilkan data ke serial monitor
Serial.print("Temperature: "); // Menampilkan teks "Temperature: " di Serial Monitor
Serial.print(temperature); // Menampilkan nilai suhu yang diukur oleh sensor DS18B20
Serial.println(" °C"); // Menambahkan "°C" dan berpindah ke baris baru di Serial Monitor
Serial.print("Light Level: "); // Menampilkan teks "Light Level: " di Serial Monitor
Serial.println(lightLevel); // Menampilkan nilai dari sensor LDR dan pindah ke baris baru
Serial.print("Motion Detected: "); // Menampilkan teks "Motion Detected: " di Serial Monitor
Serial.println(motionDetected ? "Yes" : "No"); // Menampilkan "Yes" jika sensor PIR mendeteksi gerakan (nilai HIGH), atau "No" jika tidak (nilai LOW)
delay(2000); // Tunggu 2 detik sebelum pembacaan sensor berikutnya
}