Загрузка данных


// --- Настройка пинов ---
#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);
}