Мониторинг ошибок датчика DS18B20
- Войдите на сайт для отправки комментариев
Вс, 07/05/2017 - 20:05
Доброго времени суток. Подскажите, пожалуйста, как сделать мониторинг ошибок DS18B20 с выводом на lcd16x2.
в коде есть мониторинг ошибок датчика DHT11. Задача стоит такая же: при неисправности датчика(отсутствие питания или сигнала) реле отключает от сети нагреватель и виводиться код ошибки на дисплей.
include <dht11.h> #define DHT11_PIN 6 dht11 DHT; #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3f,16,2); int RelayTemp = 7; int RelayHum = 8; float t = 0; int h = 0; int Hum = 50; int chk; void setup() { sensors.begin(); pinMode(RelayTemp, OUTPUT); pinMode(RelayHum, OUTPUT); lcd.init(); lcd.backlight(); } void loop() { delay(1000); sensors.requestTemperatures(); t = sensors.getTempCByIndex(0); if (t < Temp){digitalWrite(RelayTemp, LOW);} else {digitalWrite(RelayTemp, HIGH);} chk = DHT.read(DHT11_PIN); h = DHT.humidity,1 ; switch (chk){ case DHTLIB_OK: lcd.clear(); lcd.setCursor(0, 0); lcd.print("Bo\2o\3i\4\5\6 = %"); lcd.setCursor(12, 0); lcd.print(h); if (h < Hum){digitalWrite(RelayHum, LOW);} else {digitalWrite(RelayHum, HIGH);} break; case DHTLIB_ERROR_CHECKSUM: lcd.clear(); lcd.setCursor(0, 0); lcd.print("Bo\2o\3i\4\5\6 = %"); lcd.setCursor(12, 0); lcd.print("err1"); digitalWrite(RelayHum, HIGH); break; case DHTLIB_ERROR_TIMEOUT: lcd.clear(); lcd.setCursor(0, 0); lcd.print("Bo\2o\3i\4\5\6 = %"); lcd.setCursor(12, 0); lcd.print("err2"); digitalWrite(RelayHum, HIGH); break; default: lcd.clear(); lcd.setCursor(0, 0); lcd.print("Bo\2o\3i\4\5\6 = %"); lcd.setCursor(12, 0); lcd.print("err3"); digitalWrite(RelayHum, HIGH); break; } }
забыл дописать код вначале
Чтобы мониторить ошьибки DS18B20, нужьно сначала что-то получить с DS18B20. Где в скетче работа с DS18B20?
задача стоит в том что при невозможности считывания показаний отключалось реле нагревателя и выводился условный код(номер) ошыбки.
Можно открыть исходники "далласовской" библы и посмотреть -
Функция вернёт или температуру или константу DEVICE_DISCONNECTED_C, которая имеет значение минус 127.
задача стоит в том что при невозможности считывания показаний отключалось реле нагревателя и выводился условный код(номер) ошыбки.
Если с DS18B20 не считывается температура, библиотека вроде выдает -127 градусов. Можно добавить условие if, в котором сравнивать выдаваемую температуру с этим значением.
Спасибо вмем! Изменил код так:
вот это
можно спокойно вынести перед switch, ибо нефиг повторяться, плюс читаемость кода выше.
Команду digitalWrite(RelayTemp, HIGH); можно оставить как есть, идущая перед ней команда digitalWrite(RelayTemp, LOW); для медленного реле не преграда.