#include <Servo.h> //библиотека
#include <SevSeg.h> //библиотека
SevSeg sevseg; // объявляем семисегметный дисплей
Servo myservo; //создаем сервопривод
bool flag = false;
float pos = 0; //объявляем переменную, задаем ей начальное значение "0"
const float BETA = 3950; //объявляем константу для расчета
//температуры по аналоговому сигналу с датчика
void setup() {
byte numDigits = 2;// количество цифр на дисплее
byte digitPins[] = {2, 5};//назначаем цифровые пины
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};//объявляем пины, питающие сегменты
bool resistorsOnSegments = false; // 'false' значит резисторы расположены на цифровых пинах
byte hardwareConfig = COMMON_ANODE; // общий анод
bool updateWithDelays = false; // рекомендуется 'false' по умолчанию
bool leadingZeros = true; // используем 'true' если хотим отображать ноль
bool disableDecPoint = true; // используем'true' если не используем точку перед десятыми
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint); //запускаем работу дисплея
sevseg.setBrightness(90); //задаем яроксть сегментов
pinMode(4, INPUT_PULLUP); // режим работы пина 4
pinMode(A0,INPUT); //режим работы аналогового входа
myservo.attach(3); //назначаем пин, который будет управлять сервоприводом
}
void loop() {
int analogValue = analogRead(A0); //объявляем целочисленную переменную в которую
// будем записывать аналоговые данные с датчика
float temp = 1 / (log(1 / (1023. / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
//объявляем переменную с плавающей запятой в которую записываем рассчитанную на
//основе аналогового сигнала температуру в цельсиях
pos = map(temp, -24, 80 , 0 , 90); // интерполяция диапазона температур и пложений сервопривода
myservo.write(pos); //передаем значение положения на сервопривод
delay(15); //задержка
if (digitalRead(4)==LOW){//условие нажатой кнопки
pos=0;//записываем значение "0" в переменную положения сервопривода
myservo.write(pos);//передаем значение положения на сервопривод
delay(2000); //задержка
bool btnState = !digitalRead(4);
if (btnState && !flag) { // обработчик нажатия
flag = true;}
if (!btnState && flag) { // обработчик отпускания
flag = false; }
delay(2000);
}
sevseg.setNumber(pos); // выводим значение "pos" на дисплей
sevseg.refreshDisplay(); //обновляем значение дисплея
}