Closed brightproject closed 6 months ago
Читать документацию к библиотеке OneWire
В вашей библиотеке
microDS18B20.h
Это строка?
if (!oneWire_reset(DS_PIN)) return;
Из документации:
По импульсу RESET ведомое устройство приводит себя в готовность и не позже 60 микросекунд отвечает мастеру импульсом присутствия (PRESENCE), удерживая линию у земли на 60-240 микросекунд. После выдачи импульса устройство отпускает шину.
OneWire.reset() Отправляет сигнал сброса на все устройства. При обнаружении хотя бы одного устройства возвращает true, в противном случае — false.
Получается если на шине больше одного датчика, команда будет выдавать true даже при наличии хотя бы одного. Как определять наличие каждого датчика?
OneWire.reset()
Не относится к библиотеке microDS18b20. Читайте документацию на OneWire.h
В вашей библиотеке
Читать документацию к моей библиотеке
bool online(); // проверить связь с датчиком
bool online(uint8_t idx); // проверить связь (датчик под номером idx)
Но лучше просто использовать
bool readTemp();
В ней уже встроена обработка всех возможных ошибок на линии
Что за переменная idx? Это просто сквозная нумерация датчиков на линии - 1,2,3 и т.д.?
Номер адреса в массиве. Как в примере https://github.com/GyverLibs/microDS18B20/blob/main/examples/async_read_many/async_read_many.ino
Номер адреса в массиве. Как в примере https://github.com/GyverLibs/microDS18B20/blob/main/examples/async_read_many/async_read_many.ino
В чем принципиальное отличие от async_read_many_bus и async_read_many_bus_pgm?
Ну как бы в использовании PROGMEM для хранения адресов..
Ну как бы в использовании PROGMEM для хранения адресов...
С PROGMEM понятно, а отличие async_read_many_bus от async_read_many просто в коде или по скорости работы есть отличия или в количестве одновременных сенсоров на шине?
Режим progmem даёт возможность хранить адреса в progmem памяти, преимущество только в этом, других отличий нет
Режим progmem даёт возможность хранить адреса в progmem памяти, преимущество только в этом, других отличий нет
С этим понятно, спасибо за пояснения.
Подскажите пожалуйста, у меня на шине 2 датчика, адреса очень разные, похоже из разных партий датчики.
Читаю температуру с обоих датчиков так:
sensor[i].getTemp();
i в цикле перебирает два сенсора, дело в том, что один датчик выдает информацию с точностью до десяты и кратность 0.5
А второй датчик выдает точность до сотой, с кратностью 0.01
Что это и как два датчика из разных партий заставить выводить с одинаковой градацией?
Задавать setResolution?
Не очень понял про кратность и точность. Количество знаков после запятой зависит от того, как вывести значение. Если обе температуры выводятся одинаковым способом в цикле - то да, копать в сторону установки одинакового разрешения
Не очень понял про кратность и точность. Количество знаков после запятой зависит от того, как вывести значение. Если обе температуры выводятся одинаковым способом в цикле - то да, копать в сторону установки одинакового разрешения
А если setResolution не установлено, то по умолчанию каждый датчик будет "кто в лес, кто по дрова"?
Это зависит от китайцев и конкретного подвала, в котором сделан датчик. Разрешение оригинальных датчиков 12 бит по умолчанию
Когда используют "голый" код без библиотек, то используют такого вида конструкцию:
Каким образом определить наличие или отвал датчика в случае с использованием библиотеки OneWire?