DS18b20 + диагностика

MUSulmanin
Offline
Зарегистрирован: 12.02.2014

Добрый день соконфетники)) Возникла вот такая причуда...все используют для подключения библиотеку OneWire.h для подключения датчика температуры. Все замечательно, много примеров с выводом на экран и все такое. Но вот хочется немного диагностики, в частности: если датчик отвалился то регулирование будет происходить по 85гр. ( откидываю провод получаю это значение). Но дело не в этом, можно было написать условие и все такое, но вот я думаю должно быть в библиотеке средства для диагностики. Вот например с часами все ясно:

 if (! rtc.isrunning()) {

    Serial.println("RTC is NOT running!");

    return;
  }
Подскажите куда копать. Заранее благодарен)
Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

В нормальных условиях, они не отваливаются. Так что - нет смысла в таком коде. Тем более, что если действительно отвалился - то не будет идентификатора 1-wire на шине.

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

в примерах, которые идут с библиотекой DallasTemperature, есть код диагностики - см. Multiple

 

dim
Offline
Зарегистрирован: 09.01.2012
if (Tp == 85) {} else {T=Tp;}            // это для того, чтобы при глюке датчика (обычно при переключениях 
    // выдача температуры 85 град не приводила к переходу на другой шаг программы

 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

а если эти глюки постоянны? 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

maksim
Offline
Зарегистрирован: 12.02.2012

Tomasina пишет:

код диагностики - см. Multiple

Это не код диагностики, а всего лишь пример работы с несколькими датчиками.

DS18b20 отследить отказ измерения

MUSulmanin
Offline
Зарегистрирован: 12.02.2014

Спасибо за материал для размышления. Хочется именно силами библиотеки...по уму все сделать, а не условиями границы ставить.