GyverLibs / microDS18B20

Легкая и удобная в обращении библиотека для работы с 1-Wire термометрами DS18B20
MIT License
45 stars 11 forks source link

Определение наличия датчика на шине #17

Closed brightproject closed 6 months ago

brightproject commented 1 year ago

Когда используют "голый" код без библиотек, то используют такого вида конструкцию:

    if ( !ds.search(addr))
    {
      //Serial.println("1-wire scan ended.");
      ds.reset_search();
      delay(250);
      SensorFound = false;
      //return;
    }

Каким образом определить наличие или отвал датчика в случае с использованием библиотеки OneWire?

GyverLibs commented 1 year ago

Читать документацию к библиотеке OneWire

brightproject commented 1 year ago

В вашей библиотеке

microDS18B20.h

Это строка? if (!oneWire_reset(DS_PIN)) return; Из документации:

По импульсу RESET ведомое устройство приводит себя в готовность и не позже 60 микросекунд отвечает мастеру импульсом присутствия (PRESENCE), удерживая линию у земли на 60-240 микросекунд. После выдачи импульса устройство отпускает шину.

OneWire.reset() Отправляет сигнал сброса на все устройства. При обнаружении хотя бы одного устройства возвращает true, в противном случае — false.

Получается если на шине больше одного датчика, команда будет выдавать true даже при наличии хотя бы одного. Как определять наличие каждого датчика?

GyverLibs commented 1 year ago

OneWire.reset()

Не относится к библиотеке microDS18b20. Читайте документацию на OneWire.h

В вашей библиотеке

Читать документацию к моей библиотеке

bool online();    // проверить связь с датчиком
bool online(uint8_t idx);   // проверить связь (датчик под номером idx)

Но лучше просто использовать

bool readTemp();

В ней уже встроена обработка всех возможных ошибок на линии

brightproject commented 1 year ago

Что за переменная idx? Это просто сквозная нумерация датчиков на линии - 1,2,3 и т.д.?

GyverLibs commented 1 year ago

Номер адреса в массиве. Как в примере https://github.com/GyverLibs/microDS18B20/blob/main/examples/async_read_many/async_read_many.ino

brightproject commented 1 year ago

Номер адреса в массиве. Как в примере https://github.com/GyverLibs/microDS18B20/blob/main/examples/async_read_many/async_read_many.ino

В чем принципиальное отличие от async_read_many_bus и async_read_many_bus_pgm?

GyverLibs commented 1 year ago

Ну как бы в использовании PROGMEM для хранения адресов..

brightproject commented 1 year ago

Ну как бы в использовании PROGMEM для хранения адресов...

С PROGMEM понятно, а отличие async_read_many_bus от async_read_many просто в коде или по скорости работы есть отличия или в количестве одновременных сенсоров на шине?

GyverLibs commented 1 year ago

Режим progmem даёт возможность хранить адреса в progmem памяти, преимущество только в этом, других отличий нет

brightproject commented 1 year ago

Режим progmem даёт возможность хранить адреса в progmem памяти, преимущество только в этом, других отличий нет

С этим понятно, спасибо за пояснения. Подскажите пожалуйста, у меня на шине 2 датчика, адреса очень разные, похоже из разных партий датчики. Читаю температуру с обоих датчиков так: sensor[i].getTemp(); i в цикле перебирает два сенсора, дело в том, что один датчик выдает информацию с точностью до десяты и кратность 0.5 А второй датчик выдает точность до сотой, с кратностью 0.01 Что это и как два датчика из разных партий заставить выводить с одинаковой градацией? Задавать setResolution?

GyverLibs commented 1 year ago

Не очень понял про кратность и точность. Количество знаков после запятой зависит от того, как вывести значение. Если обе температуры выводятся одинаковым способом в цикле - то да, копать в сторону установки одинакового разрешения

brightproject commented 1 year ago

Не очень понял про кратность и точность. Количество знаков после запятой зависит от того, как вывести значение. Если обе температуры выводятся одинаковым способом в цикле - то да, копать в сторону установки одинакового разрешения

А если setResolution не установлено, то по умолчанию каждый датчик будет "кто в лес, кто по дрова"?

GyverLibs commented 1 year ago

Это зависит от китайцев и конкретного подвала, в котором сделан датчик. Разрешение оригинальных датчиков 12 бит по умолчанию