// --- Настройка пинов ---
#define SENSOR A0
// Индикаторные светодиоды
#define LED_RED 2
#define LED_GREEN 3
#define LED_YELLOW 4
// Пины управления реле (220V группы)
#define RELAY_HALF_1 5
#define RELAY_HALF_2 6
unsigned int rawValue = 0;
int lightPercent = 0;
void setup() {
Serial.begin(9600);
// Настройка индикации
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
// Настройка выходов реле
pinMode(RELAY_HALF_1, OUTPUT);
pinMode(RELAY_HALF_2, OUTPUT);
// По умолчанию выключаем реле (для большинства модулей HIGH = выкл)
digitalWrite(RELAY_HALF_1, HIGH);
digitalWrite(RELAY_HALF_2, HIGH);
}
void loop() {
// 1. Считываем и переводим значение в проценты
rawValue = analogRead(SENSOR);
lightPercent = map(rawValue, 0, 1023, 0, 100);
// Вывод данных в консоль
Serial.print("Освещенность: ");
Serial.print(lightPercent);
Serial.println("%");
// 2. Управление индикацией в зависимости от реального уровня света
if (lightPercent <= 30) {
// Свет выключен (темно) -> Красный
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_YELLOW, LOW);
}
else if (lightPercent > 30 && lightPercent <= 60) {
// Горит одна половина -> Зеленый
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, HIGH);
digitalWrite(LED_YELLOW, LOW);
}
else {
// Горят обе половины -> Желтый
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_YELLOW, HIGH);
}
delay(200); // Небольшая задержка
}
// Пример функции для переключения реле из программы или по внешней кнопке
void setLighting(bool half1, bool half2) {
// Низкий уровень (LOW) обычно включает реле
digitalWrite(RELAY_HALF_1, half1 ? LOW : HIGH);
digitalWrite(RELAY_HALF_2, half2 ? LOW : HIGH);
}