Два датчика ds18b20 показывают -127
- Войдите на сайт для отправки комментариев
Пт, 26/03/2021 - 14:28
3драствуйте, есть скетч контроллер холодильника, Проблема в том что 2 датчика температур ds18b20 показывают -127, при том что в тестовой прошивке от библиотеки dallas-temperature все ок, работало и с адресами и с индексом. Прикрепляю прошивку
#include <OneWire.h> #include <Wire.h> #include <DallasTemperature.h> #include <iarduino_RTC.h> #include <LiquidCrystal_I2C.h> #define ONE_WIRE_BUS 15 iarduino_RTC time(RTC_DS3231); OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); LiquidCrystal_I2C lcd(0x27,16,2); uint8_t sensor1[8] = {0x28, 0xD0, 0x03, 0x07, 0xD6, 0x01, 0x3C, 0x03}; uint8_t sensor2[8] = {0x28, 0x90, 0xB4, 0x07, 0xD6, 0x01, 0x3C, 0x68}; unsigned long period_time = 2000; unsigned long my_timer; bool btnStateU; bool btnStateD; bool btnStateS; byte num; int Mor; int Hol; int menu = 1; int temH; int temM; int setH = 5; int setM = -5; int arr; int FirstStart = 0; int pinReleH = 11; int pinReleM = 12; int pinReleVent = 3; int pinReleK = 2; int pinLed = 9; int pinPiezo = 9; int ButtU = 4; int ButtD = 5; int ButtS = 6; bool flagU = false; bool flagD = false; bool flagS = false; bool flagSuccH = 0; bool flagSuccM = 0; bool StateM = 0; bool StateH = 0; void setup() { Serial.begin(9600); pinMode(pinReleH, OUTPUT); pinMode(pinReleM, OUTPUT); pinMode(pinReleVent, OUTPUT); pinMode(pinReleK, OUTPUT); pinMode(pinLed, OUTPUT); pinMode(ButtU, INPUT_PULLUP); pinMode(ButtD, INPUT_PULLUP); pinMode(ButtS, INPUT_PULLUP); digitalWrite(pinReleH, HIGH); digitalWrite(pinReleM, HIGH); digitalWrite(pinReleVent, HIGH); digitalWrite(pinReleK, HIGH); time.begin(); time.settime(0, 30, 18, 12, 6, 20, 5); // 0 сек, 30 мин, 18 часов, 12, июня, 2020, четверг sensors.begin(); lcd.init(); lcd.backlight(); } void loop() { sensors.requestTemperatures(); Serial.print("Sensor 1: "); Serial.println(sensors.getTempC(sensor1)); temH = sensors.getTempC(sensor1); Serial.print("Sensor 2: "); Serial.println(sensors.getTempC(sensor2)); temM = sensors.getTempC(sensor2); if (millis() - my_timer >= period_time) { lcd.clear(); my_timer = millis(); } btnStateU = !digitalRead(ButtU); btnStateD = !digitalRead(ButtD); btnStateS = !digitalRead(ButtS); // Селект // if (btnStateS && !flagS && menu == 1) { flagS = true; menu = 2; } if (!btnStateS && flagS) flagS = false; if (btnStateS && !flagS && menu == 2) { flagS = true; if (arr == 1) { arr = 0; menu = 1; } if (arr == 0) { arr = 1; } } if (!btnStateS && flagS) flagS = false; // ПЕРШЕ ВКЛЮЧЕННЯ // if (FirstStart == 0) { if (temH != setH && flagSuccH == 0) { Holod(); } if (temM != setM && flagSuccM == 0 && flagSuccH == 1 ) { Moroz(); } if (flagSuccH == 1 && flagSuccM == 1) { FirstStart = 1; digitalWrite(pinReleK, HIGH); flagSuccH = 0; flagSuccM = 0; } } if (FirstStart == 1) { if (((temH > setH + 3 || temH < setH - 3) && StateM == 0) || Hol == 1) { Hol = 1; Holod(); if (flagSuccH == 1) { digitalWrite(pinReleK, HIGH); flagSuccH = 0; Hol = 0; } } if (((temM > setM + 3 || temM < setM - 3) && StateH == 0) || Mor == 1) { Mor = 1; Moroz(); if (flagSuccM == 1) { digitalWrite(pinReleK, HIGH); flagSuccM = 0; Mor = 0; } } } /* if(temM == -127 || temH == -127){ menu =3; } */ switch (menu) { case 1: menu1(); break; case 2: menu2(); break; case 3: menu3(); break; } } void menu1() { if (millis() % 1000 == 0) { lcd.setCursor(4,0); lcd.print(time.gettime("H:i:s")); } lcd.setCursor(0, 1); lcd.print("Hol:"); lcd.print(temH); lcd.setCursor(8, 1); lcd.print("Mor:"); lcd.print(temM); } void menu2() { lcd.setCursor(0, 0); lcd.print("Set temp H:"); lcd.print(setH); if (arr == 0) { lcd.print("<<"); } lcd.setCursor(0, 1); lcd.print("Set temp M:"); lcd.print(setM); if (arr == 1) { lcd.print("<<"); } if (arr == 0) { if (btnStateU && !flagU) { flagU = true; if (setH < 10) { setH++; } } if (!btnStateU && flagU) flagU = false; if (btnStateD && !flagD) { flagD = true; if (setH > 5) { setH--; } } if (!btnStateD && flagD) flagD = false; } if (arr == 1) { if (btnStateU && !flagU) { flagU = true; if (setM < 0) { setM++; } } if (!btnStateU && flagU) flagU = false; if (btnStateD && !flagD) { flagD = true; if (setM > -18) { setM--; } } if (!btnStateD && flagD) flagD = false; } } void menu3() { lcd.clear(); lcd.setCursor(5, 0); lcd.print("ERROR!"); lcd.setCursor(2, 1); lcd.print("CHECK SENSOR"); digitalWrite(pinLed, HIGH); tone(pinPiezo, 1000, 500); if(temM == -127 || temH == -127){ digitalWrite(pinLed, LOW); menu = 1; } } void Holod() { if (StateH == 0) { digitalWrite(pinReleH, LOW); digitalWrite(pinReleVent, LOW); digitalWrite(pinReleK, LOW); delay(1000); digitalWrite(pinReleH, HIGH); StateH = 1; } if (temH == setH || temH == setH + 1 || temH == setH - 1) { flagSuccH = 1; StateH = 0; } } void Moroz() { if (StateM == 0) { digitalWrite(pinReleM, LOW); digitalWrite(pinReleVent, HIGH); digitalWrite(pinReleK, LOW); delay(1000); digitalWrite(pinReleM, HIGH); StateM = 1; } if (temM == setM || temM == setM + 1 || temM == setM - 1) { flagSuccM = 1; StateM = 0; } }
Пробний скетч с библиотеки
#include <OneWire.h> #include <DallasTemperature.h> OneWire oneWire(15); // порт подключения датчиков (A1) DallasTemperature ds(&oneWire); byte num; // количество подключенных датчиков void setup() { Serial.begin(9600); // инициализация монитора порта ds.begin(); // инициализация датчика ds18b20 num = ds.getDeviceCount(); // узнаем количество датчиков Serial.print("Number: "); // выводим полученное количество Serial.println(num); } void loop() { // выполняем цикл столько, сколько найдено датчиков на шине for (byte i = 0; i < num; i++){ Serial.print("Sensor "); Serial.print(i); Serial.print(": "); ds.requestTemperatures(); // считываем температуру с датчика Serial.print(ds.getTempCByIndex(i)); Serial.println("C"); } Serial.println(""); }
Тестовая работала или работает?
Паузу в секунду добавьте между 24 и 25 строк в пробную программу - всё заработает
попробуйте так. Библиотека dallas temperature тем более задерживает loop.
Сейчас попробую бе3 библиотеки dallas
Тестовая работает хорошо, а вот в моей пишет -127
Тестовая работала или работает?
Работает тестовая
Тестовая работает хорошо, а вот в моей пишет -127
А сделайте тестовую с 2 датчиками. Уверен - работать не будет.
Кстати в библиотеке: