DS18b20 + диагностика
- Войдите на сайт для отправки комментариев
Сб, 15/02/2014 - 14:31
Добрый день соконфетники)) Возникла вот такая причуда...все используют для подключения библиотеку OneWire.h для подключения датчика температуры. Все замечательно, много примеров с выводом на экран и все такое. Но вот хочется немного диагностики, в частности: если датчик отвалился то регулирование будет происходить по 85гр. ( откидываю провод получаю это значение). Но дело не в этом, можно было написать условие и все такое, но вот я думаю должно быть в библиотеке средства для диагностики. Вот например с часами все ясно:
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
return;
}
Подскажите куда копать. Заранее благодарен)
В нормальных условиях, они не отваливаются. Так что - нет смысла в таком коде. Тем более, что если действительно отвалился - то не будет идентификатора 1-wire на шине.
в примерах, которые идут с библиотекой DallasTemperature, есть код диагностики - см. Multiple
if (Tp == 85) {} else {T=Tp;} // это для того, чтобы при глюке датчика (обычно при переключениях // выдача температуры 85 град не приводила к переходу на другой шаг программыа если эти глюки постоянны? Tp = 27, 27, 26, 27, 85, 85, 85, 85, 85, 85...
Тогда система и не узнает о неисправности и будет использовать старое значение темрературы черт знает сколько времени.
Уж лучше так:
void tempLine1() // какая-то функция чтения температуры с датчиков { // в начале этой функции надо объявить переменные static signed int oldTp; static byte flagWarning; // счетчик глюков if (Tp == 85 || Tp == -127) { // если поймали глюк или обрыв датчика flagWarning++; // увеличиваем счетчик на единицу if (flagWarning > 5) // если больше 5 глюков подряд { // пищим, выводим сообщение, что-то делаем } if (Tp != oldTp) {flagWarning = 0} // если глюки не подряд, то сбрасываем счетчик oldTp = Tp; // запоминаем текущее значение } else { T=Tp; } }// конец функцииПри таком раскладе система не будет реагировать на случайные отклонения: 27, 27, 26, 85, 27, 25, 23...
Но среагирует на перманентное отклонение: 27, 27, 26, 85, 27, 25, 23, 85, 85, 85, 85, 85, 85...
P.S. надо еще проверить, как правильно: 85 или 85.0
код диагностики - см. Multiple
DS18b20 отследить отказ измерения
Спасибо за материал для размышления. Хочется именно силами библиотеки...по уму все сделать, а не условиями границы ставить.