Помогите найти ошибку
- Войдите на сайт для отправки комментариев
Сб, 18/02/2017 - 01:33
Написал код терморегулятора, используется 3 датчика ds18b20. Добавил уставки по включению/выключение реле, в зависимости от температуры. При отладке в протеусе, не зависимо какая температура на датчиках, постоянно включается реле на пине D5. Помогите найти косяк, а то сам не нахожу
#include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <EEPROM.h> #define plus 2 #define minus 3 #define next 4 #define rele1 5 #define rele2 6 #define rele3 7 #define rele4 8 #define rele5 9 #define rele6 10 LiquidCrystal_I2C lcd(63, 16, 2); OneWire oneWire(15);// вход датчиков 18b20 DallasTemperature ds(&oneWire); byte value0, value1, value2, value3, value4, value5; int d1, d2, d3; byte qty; // количество градусников на шине ////////Переменная для сохранения значения пункта меню//////// int menu = 1; ////////Переменные для хранение времени вкл/откл таймера//////// int on1 = 50; int off1 = 53; int on2 = 50; int off2 = 53; int on3 = 50; int off3 = 53; ////////Переменная для сохранения значения пункта меню//////// int adr_on1 = 0; int adr_off1 = 1; int adr_on2 = 2; int adr_off2 = 3; int adr_on3 = 4; int adr_off3 = 5; void setup() { pinMode(rele1, OUTPUT); pinMode(rele2, OUTPUT); pinMode(rele3, OUTPUT); pinMode(rele4, OUTPUT); pinMode(rele5, OUTPUT); pinMode(rele6, OUTPUT); ////////Сверка значение времени с EEPROM//////// if (int(EEPROM.read(adr_on1)) == 255) { EEPROM.update(adr_on1, byte(on1)); } else { on1 = int(EEPROM.read(adr_on1)); } if (int(EEPROM.read(adr_off1)) == 255) { EEPROM.update(adr_off1, byte(off1)); } else { off1 = int(EEPROM.read(adr_off1)); } if (int(EEPROM.read(adr_on2)) == 255) { EEPROM.update(adr_on2, byte(on2)); } else { on2 = int(EEPROM.read(adr_on2)); } if (int(EEPROM.read(adr_off2)) == 255) { EEPROM.update(adr_off2, byte(off2)); } else { off2 = int(EEPROM.read(adr_off2)); } if (int(EEPROM.read(adr_on3)) == 255) { EEPROM.update(adr_on3, byte(on3)); } else { on3 = int(EEPROM.read(adr_on3)); } if (int(EEPROM.read(adr_off3)) == 255) { EEPROM.update(adr_off3, byte(off3)); } else { off3 = int(EEPROM.read(adr_off3)); } lcd.init(); lcd.backlight(); ds.begin(); qty = ds.getDeviceCount(); } void loop() { ds.requestTemperatures(); // считываем температуру с датчиков d1 = ds.getTempCByIndex(0); d2 = ds.getTempCByIndex(1); d3 = ds.getTempCByIndex(2); // if (menu == 1) { lcd.setCursor(0, 0); lcd.print(d1); lcd.print(" "); lcd.print(d2); lcd.print(" "); lcd.print(d3); } if (menu == 2) { lcd.setCursor(0, 0); lcd.print("1temp ON"); lcd.setCursor(1, 0); lcd.print(on1); if (digitalRead(minus)) { on1 = on1 - 1; } if (digitalRead(plus)) { on1 = on1 + 1; } } if (menu == 3) { lcd.setCursor(0, 0); lcd.print("1temp OFF"); lcd.setCursor(1, 0); lcd.print(off1); if (digitalRead(minus)) { off1 = off1 - 1; } if (digitalRead(plus)) { off1 = off1 + 1; } } if (menu == 4) { lcd.setCursor(0, 0); lcd.print("2temp ON"); lcd.setCursor(1, 0); lcd.print(on2); if (digitalRead(minus)) { on2 = on2 - 1; } if (digitalRead(plus)) { on2 = on2 + 1; } } if (menu == 5) { lcd.setCursor(0, 0); lcd.print("2temp OFF"); lcd.setCursor(1, 0); lcd.print(off2); if (digitalRead(minus)) { off2 = off2 - 1; } if (digitalRead(plus)) { off2 = off2 + 1; } } if (menu == 6) { lcd.setCursor(0, 0); lcd.print("3temp ON"); lcd.setCursor(1, 0); lcd.print(on3); if (digitalRead(minus)) { on3 = on3 - 1; } if (digitalRead(plus)) { on3 = on3 + 1; } } if (menu == 6) { lcd.setCursor(0, 0); lcd.print("3temp OFF"); lcd.setCursor(1, 0); lcd.print(off3); if (digitalRead(minus)) { off3 = off3 - 1; } if (digitalRead(plus)) { off3 = off3 + 1; } } if (digitalRead(next)) { delay(50); if (menu == 6) { menu = 0; } else { menu = menu + 1; } } if (off1 > d1 <on1){ digitalWrite(rele1,1); }else{ digitalWrite(rele1,0); } if (off2 > d2 <on2){ digitalWrite(rele1,1); }else{ digitalWrite(rele1,0); } if (off3 > d3 <on3){ digitalWrite(rele1,1); }else{ digitalWrite(rele1,0); } }
В коментарии особо не смотрите, побольшой части там бред
В коментарии особо не смотрите, побольшой части там бред
Может, перед тем, как размещать тему на форуме, следовало бы поправить комментарии?
Попробуйте так :
Увы, все равно так же
Я в таких случаях вставляю в скетч побольше отладочных Serial.println() и смотрю в мониторе последовательного порта, как на самом деле всё происходит, а дальше разбираюсь, чем реальность отличается от моих о ней представлений и пытаюсь свести их воедино ))).
В коментарии особо не смотрите, побольшой части там бред
А вы не пытались навести в программе порядок. А то при бардаке и маленький косяк становится трагедией.
Чуть подчистил. Но за вас писать вашу программу не собираюсь.