Разбираюсь с этими датчиками. С одного датчика считать данные проблем нет. А вот как работать с двумя и более воткнутыми в один порт понять не могу.
По идее же надо сначала определить их ИД а уже потом по ИД с ними работать. Но не могу Duino заставить искать все ИД датчиков. Она находит один и успокаивается.

12 комментариев на «“вопрос по DS18B20”»
с несколькими датчиками работать не пробовал 🙁
думаю, стоит начать поиски отсюда:
Вопрос возможно глупый. А для чего CRC проверять?
проверка правильности переданных данных 🙂
так и если этот тест не проходит то в чем может быть причина. Когда убираю этот тест все прекрасно работает
хм… получается — либо CRC неправильно считается, либо данные идут с помехами.
CRC неправильно это как? 🙂
Помехи. Пока работает — они в каком-нибудь малозначащем разряде.
🙂 просто описал все возможности :)))
Все равно не понимаю. Датчики воткнуты в монтажку и к Ардуино проводок ну сантимов 10. Откуда помехи то?
1. контакт в монтажке
2. контакт в проводке к ардуино.
3. попробуй по одному датчику отцеплять — может сам датчик глючит.
Почему успокаивается?
По идее должно работать так (см. комментарии):
#include <OneWire.h> OneWire ds(1wirePin); void setup(void) { Serial.begin(9600); } void loop(void) { byte addr[8]; if (!ds.search(addr)) { // поиск нового датчика ds.reset_search(); // если не нашли, сбрасываем поиск в начало return; // и возвращаемся в самое начало главного цикла void loop(void) } // Часть кода, которая ниже, выполняется только если // найден новый датчик, с которым ещё не работали в // главном цикле до сброса поиска if (OneWire::crc8( addr, 7) != addr[7]) { // Проверка CRC Serial.print("CRC is not valid!\n"); return; // Если не пройдена, то в начало главного цикла и продолжаем поиск других датчиков } if (addr[0] != 0x28) { // Проверка того, что найденное устройство - температурный датчик DS18B20 Serial.print("Device is not a DS18B20 family device.\n"); return; // Если не он, то опять в начало главного цикла на продолжение поиска } ds.reset(); ds.select(addr); // И вот после этого селекта делаем с очередным найденным датчиком что хотим // После возврата в начало цикла поиск будет продолжен, пока не сработает первое условие и не выполнится ds.reset_search(). }Единственное подозрение на ds.reset(); — я не особо понимаю зачем там сброс шины происходит. Попробуй убрать.
Работает. Делаю работу на ошибками над своим кодом.