#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Adafruit_NeoPixel.h>
// Định nghĩa các chân I2C và kích thước LCD
const int I2C_ADDR = 0x27; // Địa chỉ I2C của LCD (có thể khác nhau)
LiquidCrystal_I2C lcd(I2C_ADDR, 16, 2);
const int LDR_PIN = 34; // Chân GPIO để đọc giá trị từ LDR
const int LED_PIN = 13; // Chân kỹ thuật số để điều khiển LED
const int THRESHOLD = 500; // Ngưỡng để bật LED (thay đổi theo điều kiện ánh sáng)
#define NUM_LEDS 24 // Định nghĩa số LED trong vòng LED
const int LED_RING_PIN = 13; // Chân GPIO kết nối với vòng LED
Adafruit_NeoPixel leds(NUM_LEDS, LED_RING_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.begin(16, 2); // Khởi tạo màn hình LCD với 16 cột và 2 hàng
lcd.setCursor(0, 0);
lcd.print("Duc Mien!");
pinMode(LED_PIN, OUTPUT); // Thiết lập chân LED làm đầu ra
leds.begin(); // Khởi tạo NeoPixel
leds.show(); // Đảm bảo tất cả các LED đều tắt ban đầu
}
void loop() {
int ldrValue = analogRead(LDR_PIN); // Đọc giá trị từ LDR
Serial.print("LDR Value: ");
Serial.println(ldrValue); // In giá trị LDR ra màn hình serial
lcd.setCursor(0, 1); // Đặt con trỏ LCD trên hàng thứ hai
lcd.print("LDR: ");
lcd.print(ldrValue);
if (ldrValue < THRESHOLD) {
for (int i = 0; i < NUM_LEDS; i++) {
leds.setPixelColor(i, leds.Color(0, 0, 255)); // Hiển thị màu xanh dương
}
leds.show(); // Hiển thị màu
digitalWrite(LED_PIN, HIGH); // Bật LED nếu giá trị LDR thấp hơn ngưỡng
} else {
for (int i = 0; i < NUM_LEDS; i++) {
leds.setPixelColor(i, leds.Color(0, 0, 0)); // Tắt tất cả các LED
}
leds.show(); // Hiển thị màu
digitalWrite(LED_PIN, LOW); // Tắt LED nếu giá trị LDR cao hơn ngưỡng
}
delay(100); // Đợi một chút trước khi đọc lại
}