#include <Servo.h>

#define TEMP_SENSOR A4  // Аналоговый вход датчика температуры
#define RELAY_PIN 2     // Пин реле для кондиционера
#define SERVO_PIN 3     // Пин сервопривода
#define SYSTEM_SWITCH A1 // Переключатель системы охлаждения

Servo windowServo;
bool acState = false; // Состояние кондиционера

void setup() {
    Serial.begin(9600);
    
    pinMode(TEMP_SENSOR, INPUT);
    pinMode(RELAY_PIN, OUTPUT);
    pinMode(SYSTEM_SWITCH, INPUT);
    
    windowServo.attach(SERVO_PIN);
    windowServo.write(0); // Створка закрыта
    
    digitalWrite(RELAY_PIN, LOW); // Кондиционер выключен
}

void loop() {
    int systemOn = digitalRead(SYSTEM_SWITCH); // Проверяем переключатель системы охлаждения

    if (systemOn == HIGH) { // Если система включена
        int rawValue = analogRead(TEMP_SENSOR);
        float temperature = map(rawValue, 0, 1023, -40, 125); // Пересчёт NTC в градусы

        Serial.print("Temperature: ");
        Serial.print(temperature);
        Serial.println(" C");

        // Управление створкой окна
        if (temperature >= 33.0) {
            windowServo.write(0); // Закрываем окно
            if (!acState) {
                Serial.println("AC ON"); // Выводим сообщение
                digitalWrite(RELAY_PIN, HIGH);
                acState = true;
            }
        } 
        else if (temperature >= 30.0) {
            windowServo.write(90); // Полное открытие окна
            if (acState) {
                Serial.println("AC OFF"); // Выключаем кондиционер
                digitalWrite(RELAY_PIN, LOW);
                acState = false;
            }
        } 
        else if (temperature >= 27.0) {
            windowServo.write(45); // Открытие наполовину
        } 
        else if (temperature >= 22.0) {
            windowServo.write(22); // Открытие на четверть
        } 
        else {
            windowServo.write(0); // Закрываем окно
        }
    } 
    else { 
        // Если система выключена, закрываем окно и выключаем кондиционер
        windowServo.write(0);
        digitalWrite(RELAY_PIN, LOW);
        acState = false;
    }

    delay(1000);
}
NOCOMNCVCCGNDINLED1PWRRelay Module