#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Адрес экрана обычно 0x27 или 0x3F
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int LDR = A0, LED = 9;
void setup() {
lcd.init();
lcd.backlight();
pinMode(LED, OUTPUT);
// Рисуем статичную часть текста один раз
lcd.setCursor(0, 0);
lcd.print("Light: ");
}
void loop() {
int val = analogRead(LDR);
// 1. Яркость светодиода (0-255)
int br = constrain(map(val, 200, 800, 255, 0), 0, 255);
analogWrite(LED, br);
// 2. Уровень света для человека (0-100%)
int lightPercent = map(val, 0, 1023, 0, 100);
// Обновляем экран
static unsigned long timer = 0;
if (millis() - timer > 250) {
lcd.setCursor(7, 0); // Ставим курсор после слова "Light: "
lcd.print(lightPercent);
lcd.print("% "); // Пробелы в конце стирают старые цифры
// Визуальная полоска (прогресс-бар) на второй строке
lcd.setCursor(0, 1);
int bars = map(lightPercent, 0, 100, 0, 16);
for (int i = 0; i < 16; i++) {
if (i < bars) lcd.print("-"); // Символ заполнения
else lcd.print(" "); // Пробел
}
timer = millis();
}
}