/*подключаем библиотеки*/
#include <Wire.h>//подключаем экран
#include <LiquidCrystal_I2C.h>//подключаем экран
#include <OneWire.h>//подключаем датчик температуры
#include <DallasTemperature.h>//подключаем датчик температуры
#include <EEPROM.h>//подключаем память для записи настроек
LiquidCrystal_I2C lcd(0x27, 16, 2);//подключаем экран
OneWire ds_1(2), ds_2(3), ds_3(4);//подключаем шину для температурника
DallasTemperature ds1(&ds_1), ds2(&ds_2), ds3(&ds_3);//задаем имя датчика комнаты
DeviceAddress addr1, addr2, addr3;//хранение адреса датчика температуры для проверки
/*ввод переменных*/
int TUS;//ввод переменной для хранения установленной температуры
const int up = 7;//ввод переменных для кнопок
const int down = 9;//ввод переменных для кнопок
const int left = 6;//ввод переменных для кнопок
const int right = 8;//ввод переменных для кнопок
const int reln = 13;//переменная для реле насоса
const int zad = 10000;//переменная для настройки времени задержки
int curs;//переменная для меню (курсор)
int rel1, rel2, rel3;//переменные для реле
unsigned long nar1, nar2, nar3, narn;//переменные для хранения времени работы (10, 20, 30, 40)
unsigned long time;//переменная времени сработки кнопок
unsigned long timeDS;//переменная для задержки опросов датчиков температуры
unsigned long timeDR;//переменная для задержки опросов состояния реле
unsigned long zads;//переменная для задержки обновления экрана
unsigned long zadp1, zadp2, zadp3, zadpn;//переменная для настройки времени задержки записи наработки
bool flag = false;//вводим переменную для проверки нажатия кнопок
bool light = 0;//переменная для управления подсветкой
bool flag1 = 0, flag2 = 0, flag3 = 0, flagn = 0;//флаг для счетчика времени наработки
//bool kn1, kn2, kn3, kn4;//переменные для кнопок
char ten1, ten2, ten3, nas;//переменные для хранения состояния тэн и насоса
long randN;//рандом реле
//проверка на первый запуск
#define INIT_ADDR 1023 // номер резервной ячейки
#define INIT_KEY 50 // ключ первого запуска. 0-254, на выбор
void setup(){
//проверка на первый запуск
if (EEPROM.read(INIT_ADDR) != INIT_KEY) { // первый запуск
EEPROM.write(INIT_ADDR, INIT_KEY); // записали ключ
lcd.init();
lcd.print("pervi zapusk");
delay(2000);
EEPROM.put(0, 20);//если это первый запуск то задаем настройки
EEPROM.put(2, 'a');
EEPROM.put(4, 'a');
EEPROM.put(6, 'a');
EEPROM.put(8, 'a');
}
ds1.begin();//запуск датчика температуры
ds2.begin();//запуск датчика температуры
ds3.begin();//запуск датчика температуры
lcd.init();//подключаем экран
lcd.backlight();//включаем подсветку
/*рандомируем реле*/
randomSeed(analogRead(A3));
randN = random(10, 13);
rel1 = randN;
do {randN = random(10, 13); rel2 = randN;} while (rel2 == rel1);
do {randN = random(10, 13); rel3 = randN;} while (rel3 == rel2 || rel3 == rel1);
/*рандом*/
/*назначаем пины*/
pinMode(6, INPUT_PULLUP);//подключаем кнопки
pinMode(7, INPUT_PULLUP);//подключаем кнопки
pinMode(8, INPUT_PULLUP);//подключаем кнопки
pinMode(9, INPUT_PULLUP);//подключаем кнопки
pinMode(10, OUTPUT);//подключаем реле
pinMode(11, OUTPUT);//подключаем реле
pinMode(12, OUTPUT);//подключаем реле
pinMode(13, OUTPUT);//подключаем реле
digitalWrite (rel1, LOW);//отключаем реле при запуске
digitalWrite (rel2, LOW);//отключаем реле при запуске
digitalWrite (rel3, LOW);//отключаем реле при запуске
digitalWrite (reln, LOW);//отключаем реле при запуске
/*начало работы*/
lcd.print("zapusk vers1.1");
delay(1000);
lcd.setCursor(8, 1);//курсор на вторую строку
lcd.print("proverka");
delay(2000);
/*проверка датчиков на работоспосоность*/
if ( !ds1.getAddress(addr1, 0)){//опрос адреса 1 датчика, если нет ответа то
lcd.clear();
lcd.print("temp kom ne rab");
delay(10000);
}
if (!ds2.getAddress(addr2, 0)){//опрос адреса 2 датчика, если нет ответа то
lcd.clear();
lcd.print("temp vod ne rab");
delay(10000);
}
//if (!ds3.getAddress(addr3, 0)){//опрос адреса датчика защиты, если нет ответа то
// lcd.clear();
// lcd.print("zachita ne rab");
// delay(10000);
// return;
//}
lcd.clear();
lcd.print("vse OK");
delay(3000);
lcd.clear();//очистка дисплея*/
time = millis();//записываем текущее значение счетчика
zadp1 = millis();
zadp2 = millis();
zadp3 = millis();
zadpn = millis();
//опрос памяти установленной температуры и состояния реле
EEPROM.get(0, TUS);
EEPROM.get(2, ten1);
EEPROM.get(4, ten2);
EEPROM.get(6, ten3);
EEPROM.get(8, nas);
start();
}
void loop(){
//опрос температуры
if(time + zad <= millis() && timeDS + zad <= millis()){//задержка опроса температуры
ds1.requestTemperatures();//опрашиваем температуру на датчике
ds2.requestTemperatures();//опрашиваем температуру на датчике
//ds3.requestTemperatures();
lcd.setCursor(8, 0);
lcd.print(ds1.getTempCByIndex(0), 0);//вывод на экран температуры - 0-не пишется десятичные
lcd.setCursor(13,0);
lcd.print(ds2.getTempCByIndex(0), 0);//вывод на экран температуры
timeDS = millis();//задержка обновления температуры
}
/*работа с кнопками*/
//кнопка влево (подсветка)
if (digitalRead(left) == LOW && curs == 0) {//включение выключение подсветки
time = millis();
light = !light;
if (light) lcd.backlight();//включение подсветки
else lcd.noBacklight();
delay(100);
}
else if (digitalRead(left) == LOW && curs != 0){//меню назад
if (curs < 10){
time = millis();
curs = 0;
delay(100);
start();
}
else if (curs > 10 && curs <20){
curs = 1;
lcd.clear();
time = millis();
}
else if (curs > 20 && curs <30){
curs = 2;
lcd.clear();
time = millis();
}
else if (curs > 30 && curs <40){
curs = 3;
lcd.clear();
time = millis();
}
else if (curs > 40 && curs <50){
curs = 4;
lcd.clear();
time = millis();
}
else if (curs > 50 && curs <60){
curs = 5;
lcd.clear();
time = millis();
}
delay(100);
}
//кнопка вверх
else if (digitalRead(up) == LOW && curs == 0) {//увеличение установленной температуры
lcd.backlight();//включение подсветки
time = millis();
TUS++;
EEPROM.put(0, TUS);
lcd.setCursor(3, 0);
lcd.print(TUS);
delay(100);
}
else if (digitalRead(up) == LOW && curs != 0){//пункты меню
curs ++;
lcd.clear();
time = millis();
if (curs > 5 && curs <10){
curs = 1;
lcd.clear();
time = millis();
}
else if (curs > 13 && curs <20){
curs = 11;
lcd.clear();
time = millis();
}
else if (curs > 23 && curs <30){
curs = 21;
lcd.clear();
time = millis();
}
else if (curs > 33 && curs <40){
curs = 31;
lcd.clear();
time = millis();
}
else if (curs > 43 && curs <50){
curs = 41;
lcd.clear();
time = millis();
}
else if (curs > 55){
curs = 51;
lcd.clear();
time = millis();
}
delay(100);
}
//кнопка вниз
else if (digitalRead(down) == LOW && curs == 0) {//уменьшение установленной температуры
lcd.backlight();//включение подсветки
time = millis();
TUS--;
EEPROM.put(0, TUS);
lcd.setCursor(3, 0);
lcd.print(TUS);
delay(100);
}
else if (digitalRead(down) == LOW && curs != 0){//пункты меню
curs --;
lcd.clear();
time = millis();
if (curs < 1){
curs = 5;
lcd.clear();
time = millis();
}
else if (curs < 11 && curs > 9){
curs = 13;
lcd.clear();
time = millis();
}
else if (curs < 21 && curs > 19){
curs = 23;
lcd.clear();
time = millis();
}
else if (curs < 31 && curs > 29){
curs = 33;
lcd.clear();
time = millis();
}
else if (curs < 41 && curs > 39){
curs = 43;
lcd.clear();
time = millis();
}
else if (curs < 51 && curs > 49){
curs = 55;
lcd.clear();
time = millis();
}
delay(100);
}
//кнопка вправо
else if (digitalRead(right) == LOW && curs == 0) {//вход в меню
lcd.backlight();//включение подсветки
lcd.clear();
time = millis();
curs = 1;//запись в переменную положение курсора
delay(100);
}
else if (digitalRead(right) == LOW && curs != 0){//вход в подменю, подтверждение
if (curs == 1){
curs = 11;
lcd.clear();
time = millis();
}
if (curs == 2){
curs = 21;
lcd.clear();
time = millis();
}
if (curs == 3){
curs = 31;
lcd.clear();
time = millis();
}
if (curs == 4){
curs = 41;
lcd.clear();
time = millis();
}
if (curs == 5){
curs = 51;
lcd.clear();
time = millis();
}
delay(100);
}
//меню
if (curs == 1){
lcd.setCursor(0, 0);
lcd.print("menu");
lcd.setCursor(0, 1);
lcd.print("ten1 ");
lcd.print(ten1);
lcd.print(" ");
}
else if (curs == 11){
lcd.setCursor(0, 0);
lcd.print("ten1");
lcd.setCursor(0, 1);
lcd.print("avtomat ");
if(ten1 == 'a'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 11 && ten1 != 'a'){
EEPROM.put(2, 'a');
}
}
else if (curs == 12){
lcd.setCursor(0, 0);
lcd.print("ten1");
lcd.setCursor(0, 1);
lcd.print("vklucheno ");
if(ten1 == '+'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 12 && ten1 != '+'){
EEPROM.put(2, '+');
}
}
else if (curs == 13){
lcd.setCursor(0, 0);
lcd.print("ten1");
lcd.setCursor(0, 1);
lcd.print("otklucheno ");
if(ten1 == '-'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 13 && ten1 != '-'){
EEPROM.put(2, '-');
}
}
else if (curs == 2){
lcd.setCursor(0, 0);
lcd.print("menu");
lcd.setCursor(0, 1);
lcd.print("ten2 ");
lcd.print(ten2);
lcd.print(" ");
}
else if (curs == 21){
lcd.setCursor(0, 0);
lcd.print("ten2");
lcd.setCursor(0, 1);
lcd.print("avtomat ");
if(ten2 == 'a'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 21 && ten2 != 'a'){
EEPROM.put(4, 'a');
}
}
else if (curs == 22){
lcd.setCursor(0, 0);
lcd.print("ten2");
lcd.setCursor(0, 1);
lcd.print("vklucheno ");
if(ten2 == '+'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 22 && ten2 != '+'){
EEPROM.put(4, '+');
}
}
else if (curs == 23){
lcd.setCursor(0, 0);
lcd.print("ten2");
lcd.setCursor(0, 1);
lcd.print("otklucheno ");
if(ten2 == '-'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 23 && ten2 != '-'){
EEPROM.put(4, '-');
}
}
else if (curs == 3){
lcd.setCursor(0, 0);
lcd.print("menu");
lcd.setCursor(0, 1);
lcd.print("ten3 ");
lcd.print(ten3);
lcd.print(" ");
}
else if (curs == 31){
lcd.setCursor(0, 0);
lcd.print("ten3");
lcd.setCursor(0, 1);
lcd.print("avtomat ");
if(ten3 == 'a'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 31 && ten3 != 'a'){
EEPROM.put(6, 'a');
}
}
else if (curs == 32){
lcd.setCursor(0, 0);
lcd.print("ten3");
lcd.setCursor(0, 1);
lcd.print("vklucheno ");
if(ten3 == '+'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 32 && ten3 != '+'){
EEPROM.put(6, '+');
}
}
else if (curs == 33){
lcd.setCursor(0, 0);
lcd.print("ten3");
lcd.setCursor(0, 1);
lcd.print("otklucheno ");
if(ten3 == '-'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 33 && ten3 != '-'){
EEPROM.put(6, '-');
}
}
else if (curs == 4){
lcd.setCursor(0, 0);
lcd.print("menu");
lcd.setCursor(0, 1);
lcd.print("nas ");
lcd.print(nas);
lcd.print(" ");
}
else if (curs == 41){
lcd.setCursor(0, 0);
lcd.print("nasos");
lcd.setCursor(0, 1);
lcd.print("avtomat ");
if(nas == 'a'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 41 && nas != 'a'){
EEPROM.put(8, 'a');
}
}
else if (curs == 42){
lcd.setCursor(0, 0);
lcd.print("nasos");
lcd.setCursor(0, 1);
lcd.print("vklucheno ");
if(nas == '+'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 42 && nas != '+'){
EEPROM.put(8, '+');
}
}
else if (curs == 43){
lcd.setCursor(0, 0);
lcd.print("nasos");
lcd.setCursor(0, 1);
lcd.print("otklucheno ");
if(nas == '-'){
lcd.setCursor(14, 1);
lcd.print('*');
}
else if (digitalRead(right) == LOW && curs == 43 && nas != '-'){
EEPROM.put(8, '-');
}
}
else if (curs == 5){
lcd.setCursor(0, 0);
lcd.print("menu ");
lcd.setCursor(0, 1);
lcd.print("narabotka");
}
else if (curs == 51){
lcd.setCursor(0, 0);
lcd.print("vremya raboti");
lcd.setCursor(0, 1);
EEPROM.get(10, nar1);
lcd.print("ten1");
lcd.setCursor(10, 1);
if (nar1 / 60 < 1 || nar1 / 60 > 4800){lcd.print("0");}
else{
lcd.print(nar1 / 60);}
}
else if (curs == 52){
lcd.setCursor(0, 0);
lcd.print("vremya raboti");
lcd.setCursor(0, 1);
EEPROM.get(20, nar2);
lcd.print("ten2");
lcd.setCursor(10, 1);
if (nar2 / 60 < 1 || nar1 / 60 > 4800){lcd.print("0");}
else{
lcd.print(nar2 / 60);}
}
else if (curs == 53){
lcd.setCursor(0, 0);
lcd.print("vremya raboti");
lcd.setCursor(0, 1);
EEPROM.get(30, nar3);
lcd.print("ten3");
lcd.setCursor(10, 1);
if (nar3 / 60 < 1 || nar1 / 60 > 4800){lcd.print("0");}
else{
lcd.print(nar3 / 60);}
}
else if (curs == 54){
lcd.setCursor(0, 0);
lcd.print("vremya raboti");
lcd.setCursor(0, 1);
EEPROM.get(40, narn);
lcd.print("nas");
lcd.setCursor(10, 1);
if (narn / 60 < 1 || nar1 / 60 > 4800){lcd.print("0");}
else{
lcd.print(narn / 60);}
}
else if (curs == 55){
lcd.setCursor(0, 0);
lcd.print("vremya raboti");
lcd.setCursor(0, 1);
lcd.print("sbrosit' vremya");
if (digitalRead(right) == LOW && curs == 55){
EEPROM.put(10, 0);
delay(100);
EEPROM.put(20, 0);
delay(100);
EEPROM.put(30, 0);
delay(100);
EEPROM.put(40, 0);
delay(100);
lcd.clear();
lcd.print("sbrosheno");
delay(2000);
curs = 51;
}
}
//сброс действий
if(time + 10000 <= millis()){//считаем время после включения или после нажатия кнопки
lcd.noBacklight();//отключение подсветки
}
//обновление экрана
if(zads + 60000 <= millis() && time + 60000 <= millis()){//задержка обновления экрана
curs = 0;
start();
}
if(time + 10000 <= millis() && curs != 0){//выход из меню по времени
curs = 0;
start();
}
/*защита от перегрева устройства
while (ds3.getTempCByIndex(0) >= 70){
digitalWrite (rel1, 0);
digitalWrite (rel2, 0);
digitalWrite (rel3, 0);
digitalWrite (reln, 0);
lcd.clear();
lcd.backlight();
lcd.print ("peregrev rele");
delay(20000);
ds3.requestTemperatures();
}
*/
rele();
}
/*работа реле*/
void rele(){
EEPROM.get(2, ten1);//опрос памяти состояня реле
EEPROM.get(4, ten2);
EEPROM.get(6, ten3);
EEPROM.get(8, nas);
/*rele1*/
if (ten1 == '+' && curs == 0){ //если реле принудительно включено
digitalWrite(rel1, 1);
lcd.setCursor(2, 1);
lcd.print('+');
lcd.setCursor(2, 1);
if (flag1 != 1){//установка флага состояния реле для счета времени
flag1 = 1;
zadp1 = millis();
}
else if(zadp1 + 600000 <= millis()){//считаем время работы реле 10 минутными отрезками
nar1 += 10;
EEPROM.put(10, nar1);
zadp1 = millis();
}
}
else if (ten1 == '-' && curs == 0){ //принудительное выключение реле
digitalWrite(rel1, 0);
lcd.setCursor(2, 1);
lcd.print('-');
lcd.setCursor(2, 1);
flag1 = 0;
}//автоматический режим работы по установленной температуре
else if (ten1 == 'a' && curs == 0 && TUS > ds1.getTempCByIndex(0) && millis() > 15000){
digitalWrite(rel1, 1);
lcd.setCursor(2, 1);
lcd.print('+');
lcd.setCursor(2, 1);
if (flag1 != 1){
flag1 = 1;
zadp1 = millis();
}
else if(zadp1 + 600000 <= millis()){
nar1 += 10;
EEPROM.put(10, nar1);
zadp1 = millis();
}
}
else if(ten1 == 'a' && curs == 0 && TUS <= ds1.getTempCByIndex(0) && millis() > 15000){
digitalWrite(rel1, 0);
lcd.setCursor(2, 1);
lcd.print('-');
lcd.setCursor(2, 1);
flag1 = 0;
}
/*rele2*/
if (ten2 == '+' && curs == 0){
digitalWrite(rel2, 1);
lcd.setCursor(6, 1);
lcd.print('+');
lcd.setCursor(6, 1);
if (flag2 != 1){
flag2 = 1;
zadp2 = millis();
}
else if(zadp2 + 600000 <= millis()){
nar2 += 10;
EEPROM.put(20, nar2);
zadp2 = millis();
}
}
else if (ten2 == '-' && curs == 0){
digitalWrite(rel2, 0);
lcd.setCursor(6, 1);
lcd.print('-');
lcd.setCursor(6, 1);
flag2 = 0;
}
else if (ten2 == 'a' && curs == 0 && TUS-1 > ds1.getTempCByIndex(0) && millis() > 15000){
digitalWrite(rel2, 1);
lcd.setCursor(6, 1);
lcd.print('+');
lcd.setCursor(6, 1);
if (flag2 != 1){
flag2 = 1;
zadp2 = millis();
}
else if(zadp2 + 600000 <= millis()){
nar2 += 10;
EEPROM.put(20, nar2);
zadp2 = millis();
}
}
else if(ten2 == 'a' && curs == 0 && TUS <= ds1.getTempCByIndex(0) && millis() > 15000){
digitalWrite(rel2, 0);
lcd.setCursor(6, 1);
lcd.print('-');
lcd.setCursor(6, 1);
flag2 = 0;
}
/*rele3*/
if (ten3 == '+' && curs == 0){
digitalWrite(rel3, 1);
lcd.setCursor(10, 1);
lcd.print('+');
lcd.setCursor(10, 1);
if (flag3 != 1){
flag3 = 1;
zadp3 = millis();
}
else if(zadp3 + 600000 <= millis()){
nar3 += 10;
EEPROM.put(30, nar3);
zadp3 = millis();
}
}
if (ten3 == '-' && curs == 0){
digitalWrite(rel3, 0);
lcd.setCursor(10, 1);
lcd.print('-');
lcd.setCursor(10, 1);
flag3 = 0;
}
else if (ten3 == 'a' && curs == 0 && TUS-2 > ds1.getTempCByIndex(0) && millis() > 15000){
digitalWrite(rel3, 1);
lcd.setCursor(10, 1);
lcd.print('+');
lcd.setCursor(10, 1);
if (flag3 != 1){
flag3 = 1;
zadp3 = millis();
}
else if(zadp3 + 600000 <= millis()){
nar3 += 10;
EEPROM.put(30, nar3);
zadp3 = millis();
}
}
else if(ten3 == 'a' && curs == 0 && TUS <= ds1.getTempCByIndex(0) && millis() > 15000){
digitalWrite(rel3, 0);
lcd.setCursor(10, 1);
lcd.print('-');
lcd.setCursor(10, 1);
flag3 = 0;
}
/*rele4*/
if (nas == '+' && curs == 0){
digitalWrite(reln, 1);
lcd.setCursor(15, 1);
lcd.print('+');
lcd.setCursor(15, 1);
if (flagn != 1){
flagn = 1;
zadpn = millis();
}
else if(zadpn + 600000 <= millis()){
narn += 10;
EEPROM.put(40, narn);
zadpn = millis();
}
}
else if (nas == '-' && curs == 0){
digitalWrite(reln, 0);
lcd.setCursor(15, 1);
lcd.print('-');
lcd.setCursor(15, 1);
flagn = 0;
}
else if (nas == 'a' && curs == 0 && ds2.getTempCByIndex(0) >= 80 && millis() > 15000){
digitalWrite(reln, 1);
lcd.setCursor(15, 1);
lcd.print('+');
lcd.setCursor(15, 1);
if (flagn != 1){
flagn = 1;
zadpn = millis();
}
else if(zadpn + 600000 <= millis()){
narn += 10;
EEPROM.put(40, narn);
zadpn = millis();
}
}
else if(nas == 'a' && curs == 0 && ds2.getTempCByIndex(0) <= 60 && millis() > 15000){
digitalWrite(reln, 0);
lcd.setCursor(15, 1);
lcd.print('-');
lcd.setCursor(15, 1);
flagn = 0;
}
}
void start(){
/*показания (прорисовка внешнего вида) данных на экране*/
lcd.clear();
lcd.print("tus");//температура установленная
lcd.setCursor(3, 0);
lcd.print(TUS);//пишем температуру
lcd.setCursor(6, 0);
lcd.print("tk");//температура комнаты
lcd.setCursor(11, 0);
lcd.print("tv");//температура воды
lcd.setCursor(0, 1);
lcd.print("1 ");//1 тэн
lcd.setCursor(1, 1);
lcd.print(ten1);//пишем состояние
lcd.setCursor(4, 1);
lcd.print("2 ");//2 тэн
lcd.setCursor(5, 1);
lcd.print(ten2);//пишем состояние
lcd.setCursor(8, 1);
lcd.print("3 ");//3 тэн
lcd.setCursor(9, 1);
lcd.print(ten3);//пишем состояние
lcd.setCursor(13, 1);
lcd.print("N ");//насос
lcd.setCursor(14, 1);
lcd.print(nas);
ds1.requestTemperatures();//опрашиваем температуру на датчике комнаты
ds2.requestTemperatures();//опрашиваем температуру на датчике воды
//ds3.requestTemperatures();//опрашиваем температуру на датчике защиты
lcd.setCursor(8, 0);
lcd.print(ds1.getTempCByIndex(0), 0);//вывод на экран температуры - 0-не пишется десятичные
lcd.setCursor(13,0);
lcd.print(ds2.getTempCByIndex(0), 0);//вывод на экран температуры
zads = millis();
}
Loading
ds18b20
ds18b20
Loading
ds18b20
ds18b20
Loading
ds18b20
ds18b20