Обращение к dallas 18b20 по его адресу
- Войдите на сайт для отправки комментариев
Пнд, 15/12/2014 - 19:09
Подскажите как обратиться к датчику по его адресу?
DallasTemperature sensors(&oneWire); //=========== Присваиваем имена датчикам Dallas =============== DeviceAddress ulicaDeviceAddress; // датчик - УЛИЦА DeviceAddress vxodDeviceAddress; // датчик - ВХОД DeviceAddress kuxhyDeviceAddress; // датчик - КУХНЯ DeviceAddress spalnyDeviceAddress; // датчик - СПАЛЬНЯ DeviceAddress zalDeviceAddress; // датчик - ЗАЛ DeviceAddress xolDeviceAddress; // датчик - ХОЛ 2 этаж DeviceAddress spalny2DeviceAddress; // датчик - СПАЛЬНЯ 2 этаж DeviceAddress tvodaDeviceAddress; // датчик - Теплоносителя //============ Устанавливаем значения по умолчанию ============= float ulica = 0; //переменная температуры - УЛИЦА float vxod = 0; //переменная температуры - ВХОДА float kuhny = 0; //переменная температуры - КУХНЯ float spalny = 0; //переменная температуры - СПАЛЬНЯ float zal = 0; //переменная температуры - ЗАЛ float xol = 0; //переменная температуры - ХОЛ float spalny2 = 0; //переменная температуры - СПАЛЬНЯ 2 этаж float tvody = 0; //переменная температуры - температура в болере float AverageTemp = 0; //переменная среднего значения температуры void loop() { sensors.requestTemperatures(); sensors.getAddress(ulicaDeviceAddress, 0); ulica = sensors.getTempC(ulicaDeviceAddress); sensors.getAddress(vxodDeviceAddress, 1); vxod = sensors.getTempC(vxodDeviceAddress); sensors.getAddress(kuxhyDeviceAddress, 2); kuhny = sensors.getTempC(kuxhyDeviceAddress); sensors.getAddress(spalnyDeviceAddress, 3); spalny = sensors.getTempC(spalnyDeviceAddress); sensors.getAddress(zalDeviceAddress, 4); zal = sensors.getTempC(zalDeviceAddress); sensors.getAddress(xolDeviceAddress, 5); xol = sensors.getTempC(xolDeviceAddress); sensors.getAddress(spalny2DeviceAddress, 6); spalny2 = sensors.getTempC(spalny2DeviceAddress); sensors.getAddress(tvodaDeviceAddress, 7); tvody = sensors.getTempC(tvodaDeviceAddress); Serial.println (); Serial.println (); Serial.print ("Temperature na ulice: "); Serial.println (ulica); Serial.println ("-------------------------"); Serial.print ("Humidity: "); Serial.println (humidity, 2); Serial.print ("Temperature: "); Serial.println (temperature, 2); Serial.println ("-------------------------"); Serial.print ("Temperature na vxode: "); Serial.println (vxod); Serial.print ("Temperature na kuhne: "); Serial.println (kuhny); Serial.print ("Temperature v spalne: "); Serial.println (spalny); Serial.print ("Temperature v zale: "); Serial.println (zal); Serial.print ("Temperature v hole: "); Serial.println (xol); Serial.print ("Temperature v spalne 2 etaz: "); Serial.println (spalny2); Serial.println ("-------------------------"); Serial.print ("Average temperature: "); Serial.println (AverageTemp); Serial.println ("-------------------------"); Serial.print ("Temperature v bake: "); Serial.println (tvody); Serial.println ("-------------------------"); }
в этом случае температура считывается призвольно с датчиков, если датчики например ulica и spalny поменять местами при подключении, то датчик с ulica будет показывать температуру в спальне.
как правильно указать, что датчик 28FFBE943C040014 - улицы, 28FF9480561403A6 - спальня и соответственно к ним обращаться?
Добавить к адресу байт идентификатора.
Добавить к адресу байт идентификатора.
хрень получится
Добавить к адресу байт идентификатора.
хрень получится
Если не перекидывать их местами вручную, то никакой хрени, 8 байт адрес, 9-й место нахождения. Все в EEPROM.
как правильно указать, что датчик 28FFBE943C040014 - улицы, 28FF9480561403A6 - спальня и соответственно к ним обращаться?
1.Убираете все "именные" переменные.
2.Создаете структуру данных, или три массива "название датчика - адрес датчика - температура".
3.В цикле опрашиваете датчики.
4.В цикле выводите данные.
как правильно указать, что датчик 28FFBE943C040014 - улицы, 28FF9480561403A6 - спальня и соответственно к ним обращаться?
1.Убираете все "именные" переменные.
2.Создаете структуру данных, или три массива "название датчика - адрес датчика - температура".
3.В цикле опрашиваете датчики.
4.В цикле выводите данные.
Не проведете маленький ликбез про структуры, учил бейсик и фортран, по сию пору не пойму что это и как с ним работать. Благодарю.
опрос по адресу
насколько я понимаю, проблема-то у Тс не в том, как к датчику обращаться и как называется переменная, куда значение температуры заносится.
в этом случае температура считывается призвольно с датчиков, если датчики например ulica и spalny поменять местами при подключении, то датчик с ulica будет показывать температуру в спальне.
ЭТО НЕВОЗМОЖНО!
если вы датчик из спальни вынесете на улицу, то как вы к нему ни обращайтесь - хоть по имени, хоть по адресу, он станет показывать температуру улицы, а не спальни. и вместо него не станет отвечать тот датчик, который оказался в спальне. если вы обращаетесь к датчику по адресу, то ответит именно тот датчик, который вы опрашиваете, где бы он не стоял - на улице, в спальне или вообще в другом месте. а где он именно сейчас стоит - никак не узнать. только заранее, перед установкой определять его адрес и прописывать в коде, какой адрес у датчика на улице, а какой в спальне.
Если не перекидывать их местами вручную, то никакой хрени, 8 байт адрес, 9-й место нахождения. Все в EEPROM.
не понимаю, поясните, а зачем это?
если уж возиться с eeprom (возиться или нет - отдельная тема), то, имхо, считывайте в осмысленные переменные
если, конечно, датчиков конечное количество и оно известно на стадии разработки
Если законченное устройство, то с EEPROM возится. Иначе после каждой замены датчика или дублирования устройства будете по новой код править. Поскольку начальное опознание идет по возрастающей адресов, то сперва считываем, а потом идентифицируем (если нет желания расставить вручную по порядку).
в этом примере почему то переодически у датчиков проскакивает значение -127.00 как будто датчик отсутствует. С чем это может быть связано и как поправить?
Проверьте задержки между периодами считывания и заодно контакты
Не проведете маленький ликбез про структуры, учил бейсик и фортран, по сию пору не пойму что это и как с ним работать. Благодарю.
Увы, я со структурами не работал, поэтому вряд ли чем смогу помочь..
Задержка зависит от требуемой точности (см. setResolution()) и нужна между вызовом requestTemperatures() и чтением данных.
Вот значения задержки для разных Resolution:
int16_t DallasTemperature::millisToWaitForConversion(uint8_t bitResolution)
{
switch (bitResolution)
{
case 9:
return 94;
case 10:
return 188;
case 11:
return 375;
default:
return 750;
}
}
И еще там есть функция setWaitForConversion().
И еще замечу, что делать задержки по условию типа if(millis()%1000==0), конечно, красиво, но некорректно. Что будет, если программа "проскочит" момент, когда millis()%1000==0 ? Да ничего ведь не будет.
можно заменить на delay(1000). Если проскочит, то на следующую секунду сделает замер. а также можно более красиво сделать
if((millis()%1000<20) так для обработки есть окно 20 мс(Подобрано для примера).
помогите разобраться с подключением. Ардуино у меня несколько дней много чего незнаю. Делаю по инструкции http://arduino-project.net/podklyuchenie-ds18b20-arduino/ и http://nnm.me/blogs/pencraft/upravlenie-obogrevom-komnaty-pri-pomoshi-arduino-i-dallas18b20/ скачал вначале библиотеку Далас 2 дня назад подключат датчик dht22 все работает сейчас решил проверить 18b20 не пошло выходит ошибка нет Onware.h скачал эту библиотеку кинул в папку с библ перезагрузил компилирую ошибка нет библ далас.h
что делаю не так? Может в одну папку надо 2 библиотеки кинуть или ещё что? В инструкциях больше ни слова что надо еще что то делать
скачал oneware eверсию2.2 компилирую первый пример ошибка
Для компиляции никакого железа не надо. Куда библиотеки кидаете?
Если из архива распаковывали, проверьте, что нет внутри распакованной еще одной папки с таким именем.
Для компиляции никакого железа не надо. Куда библиотеки кидаете?
в папку libraries ардуно\програм файл. нашел библ онваре http://arduino.ru/forum/programmirovanie/fail-onewireh здесь работает но там нет примера чтоб адрес датчика определить библиотека далас с 1820 нехочет работать
Если из архива распаковывали, проверьте, что нет внутри распакованной еще одной папки с таким именем.
в точку. тоже думал есть разница или нет далас был папка в папке. теперь вопрос по адресу как узнать в монииторе порта запись адрес 000000000000 все нули вобщем мож изза резистора хотя провод 10см
Резистор поищите какой есть, я думаю от 1К до 15К должно подойти.
Как это нет примера. Он вроде во всех есть - DS18x20. Там и адрес кажет.
Как это нет примера. Он вроде во всех есть - DS18x20. Там и адрес кажет.
спасбо все нашел все поучилось. я искал пример multiple думал только он адрес показывает. датчик данные только изза резистора не передавал
опять примерно такая же фигня. Немогу разобраться почему не компилирует, долго не подходил к ардуино. чето подзабыл, что то с рабочего стала стер, что-то переместил. Сейчас удалил все скачан новую версию ардуино ide библиотеки распоковал, вроде норм не папка в папке и опять хрень какая то, ошибка вот скрины [URL=http://radikal.ru/fp/428a71eabc254c8b8172adef280e14f1][IMG]http://i056.radikal.ru/1512/27/a43a3ec65de2t.jpg[/IMG][/URL] [URL=http://radikal.ru/fp/0ddceac9206141499173d15a26795b19][IMG]http://s017.radikal.ru/i428/1512/5f/394862a8415dt.jpg[/IMG][/URL]
А ошибку выдает