#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define TEMP_SENSOR_1_PIN 2
#define TEMP_SENSOR_2_PIN 3
#define POTENTIOMETER_1_PIN A0
#define POTENTIOMETER_2_PIN A1
#define SLIDER_COMMON_PIN 5
#define SLIDER_PIN_1 8
#define SLIDER_PIN_2 7
#define SERVO_PIN 9
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servoMotor;
OneWire oneWire1(TEMP_SENSOR_1_PIN);
OneWire oneWire2(TEMP_SENSOR_2_PIN);
DallasTemperature sensors1(&oneWire1);
DallasTemperature sensors2(&oneWire2);
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
servoMotor.attach(SERVO_PIN);
sensors1.begin();
sensors2.begin();
pinMode(SLIDER_COMMON_PIN, OUTPUT);
pinMode(SLIDER_PIN_1, INPUT_PULLUP);
pinMode(SLIDER_PIN_2, INPUT_PULLUP);
}
void loop() {
float temperatureC1 = getTemperature(TEMP_SENSOR_1_PIN);
float temperatureC2 = getTemperature(TEMP_SENSOR_2_PIN);
float averageTemperature = (temperatureC1 + temperatureC2) / 2.0;
int setTemperature = map(analogRead(POTENTIOMETER_1_PIN), 0, 1023, 0, 100);
int servoPosition = map(analogRead(POTENTIOMETER_2_PIN), 0, 1023, 0, 180);
int sliderCommonState = digitalRead(SLIDER_COMMON_PIN);
int sliderState1 = digitalRead(SLIDER_PIN_1);
int sliderState2 = digitalRead(SLIDER_PIN_2);
if (sliderCommonState == HIGH) {
// Логика управления заслонкой в режиме автоматического управления
if (averageTemperature > setTemperature) {
servoMotor.write(0); // Закрыть заслонку
} else {
servoMotor.write(180); // Открыть заслонку
}
} else {
// Логика ручного управления заслонкой
int sliderValue = map(sliderState1 + sliderState2, 0, 2, 0, 180);
servoMotor.write(sliderValue); // Установить положение заслонки
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(averageTemperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Set Temp: ");
lcd.print(setTemperature);
lcd.print(" C");
delay(30000);
}
float getTemperature(int sensorPin) {
sensors1.requestTemperatures();
sensors2.requestTemperatures();
float temperature = (sensors1.getTempCByIndex(0) + sensors2.getTempCByIndex(0)) / 2.0;
return temperature;
}
void closeFlap() {
servoMotor.write(0); // Закрыть заслонку
}
float getTemperature(int sensorPin) {
sensors1.requestTemperatures();
sensors2.requestTemperatures();
float temperature = (sensors1.getTempCByIndex(0) + sensors2.getTempCByIndex(0)) / 2.0;
return temperature;
}
void closeFlap() {
servoMotor.write(0); // Закрыть заслонку
}
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
servoMotor.attach(SERVO_PIN);
sensors1.begin();
sensors2.begin();
pinMode(SLIDER_COMMON_PIN, OUTPUT);
pinMode(SLIDER_PIN_1, INPUT_PULLUP);
pinMode(SLIDER_PIN_2, INPUT_PULLUP);
}
void loop() {
float temperatureC1 = getTemperature(TEMP_SENSOR_1_PIN);
float temperatureC2 = getTemperature(TEMP_SENSOR_2_PIN);
float averageTemperature = (temperatureC1 + temperatureC2) / 2.0;
int setTemperature = map(analogRead(POTENTIOMETER_1_PIN), 0, 1023, 0, 100);
int servoPosition = map(analogRead(POTENTIOMETER_2_PIN), 0, 1023, 0, 180);
int sliderCommonState = digitalRead(SLIDER_COMMON_PIN);
int sliderState1 = digitalRead(SLIDER_PIN_1);
int sliderState2 = digitalRead(SLIDER_PIN_2);
if (sliderCommonState == HIGH) {
// Логика управления заслонкой в режиме автоматического управления
if (averageTemperature > setTemperature) {
servoMotor.write(0); // Закрыть заслонку
} else {
servoMotor.write(180); // Открыть заслонку
}
} else {
// Логика ручного управления заслонкой
int sliderValue = map(sliderState1 + sliderState2, 0, 2, 0, 180);
servoMotor.write(sliderValue); // Установить положение заслонки
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(averageTemperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Set Temp: ");
lcd.print(setTemperature);
lcd.print(" C");
delay(30000);
}
}