#include <Servo.h>
Servo windowServo;
bool systemEnabled = false;
bool manualACOverride = false;
bool acState = false;
void setup() {
Serial.begin(9600);
pinMode(A4, INPUT);
pinMode(2, OUTPUT);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
windowServo.attach(3);
windowServo.write(0);
digitalWrite(2, LOW);
}
void loop() {
systemEnabled = (digitalRead(A1) == LOW);
manualACOverride = (digitalRead(A2) == LOW);
float temperature = readTemperature();
if (systemEnabled) {
if (!acState) {
if (temperature >= 33.0) windowServo.write(0);
else if (temperature >= 30.0) windowServo.write(90);
else if (temperature >= 27.0) windowServo.write(45);
else if (temperature >= 22.0) windowServo.write(22);
else windowServo.write(0);
}
if (!manualACOverride) {
if (temperature >= 33.0 && !acState) {
setAC(true, temperature);
windowServo.write(0);
}
else if (temperature < 33.0 && acState) {
setAC(false, temperature);
}
}
else if (acState) {
setAC(false, temperature);
}
}
else {
windowServo.write(0);
if (acState) {
setAC(false, temperature);
}
}
delay(1000);
}
float readTemperature() {
const float BETA = 3950;
int analogValue = analogRead(A4);
float temp = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
Serial.print("Temperature: "); Serial.print(temp); Serial.println("°C");
return temp;
}
void setAC(bool state, float temp) {
digitalWrite(2, state ? HIGH : LOW);
acState = state;
Serial.print("AC "); Serial.print(state ? "ON" : "OFF");
if (!state && manualACOverride) Serial.print(" (Relay)");
Serial.print(", Temperature: "); Serial.print(temp); Serial.println("°C");
}