#include <Servo.h>
#define NTC A1 // Номер пина терморезистора
#define btn 13 // Кнопка
#define digit1 9 // Первый разряд индикатора
#define digit2 10 // Второй разряд индикатора
#define servoOut 11 // подключение сервопривода
#define BETA 3950 // Коэффициент для расчета температуры
#define first 2
// Макроопределение для расчета температуры
#define Temperature(x) (1 / (log(1 / (1023.0 / x - 1)) / BETA + 1.0 / 298.15) - 273.15)
#define Degree(x) value
int tempBefore; // Переменная для хранения предыдущего значения аналогового входа
int degree;
Servo servo1; // Экземпляр сервопривода
byte numberclear = 0b00000000; // Байт очистки индикатора
byte number[10] = { // Байты цифр
0b00111111,
0b00000110,
0b01011011,
0b01001111,
0b01100110,
0b01101101,
0b01111101,
0b00000111,
0b01111111,
0b01101111,
};
void setup() {
// put your setup code here, to run once:
pinMode(servoOut, OUTPUT);
pinMode(NTC, INPUT);
pinMode(btn, INPUT_PULLUP);
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
servo1.attach(servoOut);
tempBefore = analogRead(NTC);
}
void loop() {
// put your main code here, to run repeatedly:
if (!digitalRead(btn)) {
servo1.write(0);
WriteTemp(0);
}
else {
degree = map(Temperature(analogRead(NTC)), -24, 80, 0, 90);
servo1.write(degree);
WriteTemp(degree);
}
}
void WriteTemp(int degree) {
digitalWrite(digit2, HIGH);
digitalWrite(digit1, LOW);
for (int j = 0; j < 8; j++) { // Перебираем биты в байте
boolean segment = bitRead(number[degree / 10], j);
digitalWrite(j + first, segment); // Выводим десятки градусов
}
for (int j = 0; j < 7; j++) { // Перебираем биты в байте
digitalWrite(j + first, LOW); // Очищаем дисплей
}
digitalWrite(digit2, LOW);
digitalWrite(digit1, HIGH);
for (int j = 0; j < 7; j++) { // Перебираем биты в байте
boolean segment = bitRead(number[degree % 10], j);
digitalWrite(j + first, segment); // выводим единицы градуов
}
for (int j = 0; j < 8; j++) { // Перебираем биты в байте
digitalWrite(j + first, LOW); // очищаем дисплей
}
}