#include <Servo.h>
const int servoPin = 9; // пин, к которому подключен серводвигатель
const int sensorPin = A0; // пин, к которому подключен аналоговый датчик температуры NTC
const int buttonPin = 2; // пин, к которому подключена кнопка сброса
Servo servo;
float celsius;
int angle = 0;
int buttonState;
int lastButtonState = HIGH; // состояние кнопки на предыдущем обороте цикла
const float BETA = 3950; // коэффициент Бета для термистора
void setup() {
servo.attach(servoPin); // инициализация серводвигателя
pinMode(buttonPin, INPUT); // инициализация пина кнопки
// установка начального положения серводвигателя
int initialAngle = map(0, -24, 80, 0, 90);
servo.write(initialAngle);
}
void loop() {
int analogValue = analogRead(sensorPin); // чтение значения с аналогового датчика температуры
// расчет значения в градусах Цельсия по формуле Стейнхарта-Хартла
float resistance = 1023.0 / analogValue - 1.0;
resistance = 10000.0 / resistance;
celsius = 1.0 / (log(resistance / 10000.0) / BETA + 1.0 / 298.15) - 273.15;
angle = map(celsius, -24, 80, 0, 90); // преобразование значения температуры в угол поворота серводвигателя
// поворот серводвигателя в соответствии с углом
servo.write(angle);
// чтение состояния кнопки
buttonState = digitalRead(buttonPin);
// проверка состояния кнопки для выполнения сброса
if (buttonState == LOW && lastButtonState == HIGH) {
servo.write(0); // установка угла поворота серводвигателя на 0 градусов
}
lastButtonState = buttonState; // сохранение текущего состояния кнопки
delay(100); // небольшая задержка для стабилизации работы
}