#include <Adafruit_NeoPixel.h>
#include <DHTesp.h>
#include <ESP32Servo.h>
#define DHT_PIN 15
#define SERVO_PIN 12
#define LDR_PIN 34 // Pin tempat Anda menghubungkan LDR sensor
#define NEOPIXEL_PIN 4 // Pin tempat Anda menghubungkan Neopixel Ring
#define NEOPIXEL_COUNT 16 // Jumlah LED pada Neopixel Ring
DHTesp dhtSensor;
Servo myServo;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NEOPIXEL_COUNT, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
myServo.attach(SERVO_PIN);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temperature = data.temperature;
Serial.println("Temp: " + String(temperature, 2) + "°C");
// Menggerakkan servo berdasarkan suhu
moveServo(temperature);
// Mengecek LDR sensor
int ldrValue = analogRead(LDR_PIN);
Serial.println("LDR Value: " + String(ldrValue));
// Menampilkan efek cahaya pada Neopixel Ring berdasarkan kegelapan
showDarknessEffect(ldrValue);
Serial.println("---");
delay(2000); // Tunggu pembacaan baru dari sensor (DHT22 memiliki sample rate ~0.5Hz)
}
void moveServo(float temperature) {
int servoPosition = map(temperature, 30, 60, 0, 180); // Mappings suhu ke posisi servo (20-30°C ke 0-180 derajat)
myServo.write(servoPosition);
delay(500); // Tunggu sebentar agar servo mencapai posisi yang diinginkan
}
void showDarknessEffect(int ldrValue) {
if (ldrValue < 500) {
// Jika gelap, Neopixel akan berkedip dan berubah warna
for (int i = 0; i < 5; i++) {
flashAndChangeColor();
}
} else {
// Jika terang, Matikan Neopixel Ring
for (int i = 0; i < NEOPIXEL_COUNT; i++) {
strip.setPixelColor(i, 0, 0, 0); // Matikan semua LED
}
strip.show();
}
}
// Fungsi untuk berkedip dan berubah warna pada Neopixel Ring
void flashAndChangeColor() {
for (int i = 0; i < NEOPIXEL_COUNT; i++) {
strip.setPixelColor(i, Wheel(random(255)));
}
strip.show();
delay(200); // Waktu delay antar efek
}
// Fungsi untuk menghasilkan efek warna bergantian pada Neopixel Ring
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
} else {
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
}