Регулировка температуры от 0 до 99,9 гр Цельсия шаг регулировки 0,1 гр
Максимальная температура 99,9 гр Отображается как t99.9
Минимальная -55 гр Отображается как t-55
Кнопки без резисторов, напрямую подключены к контроллеру, второй вывод кнопки на GND
#include <ESP32_TM1637_4LED.h> // http://rcl-radio.ru/wp-content/uploads/2022/01/ESP32_TM1637_4LED.zip
#include <OneWire.h> // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include <EEPROM.h>
ESP32_TM1637_4LED tm(2,3);// CLK, DIO
OneWire ds(4); // Вход датчика 18b20
int temper;
int reg;
bool w;
unsigned long times;
int gis=5; // гистерезис 0,5 градуса
void setup() {
delay(100);
tm.brig(7);
pinMode(5,INPUT_PULLUP);// кнопка +
pinMode(6,INPUT_PULLUP);// кнопка -
pinMode(13, OUTPUT); // выход реле
if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}
reg=EEPROM.read(0)*256+EEPROM.read(1);
}
void loop() {
if(digitalRead(5)==LOW){reg+=1;if(reg>=999){reg=999;}delay(100);times=millis();w=1;}
if(digitalRead(6)==LOW){reg-=1;if(reg<=0){reg=0;}delay(100);times=millis();w=1;}
temper = dsRead(0)*10;
if(millis()-times<=2000){
tm.print(reg,1, 0b0,-1,-1,-1);
}
else{
if(temper<0){ tm.print(abs(temper/10),0, 0b01111000,0b01000000,-1,-1);}
else if(temper>999){tm.print(0,0, 0b01000000,0b01000000,0b01000000,0b01000000);}
else{tm.print(temper,1, 0b01111000,-1,-1,-1);}
}
delay(100);
if(reg >= temper + gis){digitalWrite(13,HIGH);}
if(reg <= temper - gis){digitalWrite(13,LOW);}
if(w==1){EEPROM.update(0, highByte(reg));EEPROM.update(1, lowByte(reg));w=0;}
}
float dsRead(byte x) {
byte data[2], addr[8][8], kol = 0;
while (ds.search(addr[kol])) { // поиск датчиков, определение адреса и кол-ва датчиков
kol++;
}
ds.reset_search(); // Сброс поиска датчика
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0x44, 0); // Измерение температуры с переносом данных в память
ds.reset(); // Инициализация, выполняется сброс шины
ds.select(addr[x]); // Обращение к датчику по адресу
ds.write(0xBE); // Обращение памяти
data[0] = ds.read();// Чтение памяти byte low
data[1] = ds.read();// Чтение памяти byte high
float value = ((data[1] << 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
}