#include <Servo.h> //библиотека серво (стандартная)
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#define ONE_WIRE_BUS A1 // пин для дс18б20 ( one wire)
// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей
Servo servo; //объявить серво назвать servo
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress Thermometer = {0x28, 0xFF, 0xC5, 0x2F, 0x86, 0x16, 0x4, 0xC6}; //адресс датчика 18b20
unsigned long lastflash;
int TempMax;
int RPM, pos;
unsigned int min_pos = 0; //минимальная частота оборотов
unsigned int max_pos = 1500; //максимальная частота оборотов
unsigned int min_ser = 0; //полностью закрыта заслонка
unsigned int max_ser = 180; //полностью открытас заслонка
void setup()
{
sensors.begin();
Serial.begin(9600); //открыть порт
attachInterrupt(0, sens, RISING); //подключить прерывание на 2 пин при повышении сигнала
pinMode(3, OUTPUT); //3 пин как выход
digitalWrite(3, HIGH); //подать 5 вольт на 3 пин
servo.attach(4); //серво на 4 порту
sensors.requestTemperatures();
int T = (sensors.getTempC(Thermometer));
if (T <= (75))
{
pos = map(RPM, min_pos, max_pos, min_ser, max_ser); //перевести значение от минимума до максимума в угол поворота сервы (от 0 до 180)
servo.write(pos); //повернуть серву
lcd.setCursor(0, 0);
lcd.print("Temp C: ");
lcd.print(T);
lcd.setCursor(0, 1);
lcd.print("RPM ");
lcd.print(RPM); //послать в порт
if ((micros() - lastflash) > 1000000)//если сигнала нет больше секунды
{
RPM = 0; //считаем что RPM 0
}
}
if ((T >= (55)))
{
servo.write(max_ser); //отключение автоподсоса при достижении температуры (полностью открыта заслонка)
delay(1000); //задержка для закрытия заслонки воздуха
servo.detach(); // отклюение серво привода заслонки
}
}