Проблема с измерением температуры DS18B20
- Войдите на сайт для отправки комментариев
Пнд, 30/09/2013 - 21:05
Всем привет. Народ нужна ваша помощь. Ставлю стандартный скечь для измерения температуры датчиком DS18B20. http://cxem.net/arduino/arduino17.php вот делаю все так. Температуру измеряет только врет. градусах на 20-25 вроде все ок, но если мерить температуру воды на 70-80 градусах датчик уже занижмет температуру на 5-6 градусов, а на 100 уже где то 10. Сравнивал показания с ртутным градусником и эл. градусников, у них показания одинаковые, а вот датчик на ардуино врет (((
Пробывал уже на 3 датчиках. Все то же самое. (((
А что если обратиться. к первоисточникам?
А именно?
Есть библиотека. В ней есть примеры. С них и надо начинать.
Это для меня темный лес ))) . А так спасибо за помощь. )
Хотя скечь пооду взят из библиотеки
Под рукой только планшет, но примерно так:
В IDE Arduino файл - примеры - onewire -bla-bla
Прошиваешь скетч и смотришь результат.
Ок спасибо сейчас попробую ))
В примере скечь практически такой же ((
М.б. ты их голыми в кипяток опускаешь?
Ну да )))). Чуть ниже контчктов что бы не позамыкало ))). Не совсем в кипяток . А как надо тогда? ))))
Проблема решена!!! Заменой кабеля на экранированный и впайкой напрямую на ардуино )))
Какое расстояние от датчика до ардуины ? При длинной линии паразитное питание не пойдет и надо использовать полноценное..
такая проблема делаю как всё как описано из ресурса ту что ссылается аавтор но постоянно выскакивает ошибка
1
Arduino: 1.5.3 (Windows 7), Board: "Arduino Uno"
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:66:24: error: WConstants.h: No such file or directory
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In constructor 'OneWire::OneWire(uint8_t)':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:75: error: 'digitalPinToPort' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:76: error: 'digitalPinToBitMask' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:77: error: 'portOutputRegister' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:78: error: 'portInputRegister' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:79: error: 'portModeRegister' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'uint8_t OneWire::reset()':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:97: error: 'INPUT' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:97: error: 'pinMode' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:100: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:101: error: 'digitalRead' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:103: error: 'digitalWrite' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:104: error: 'OUTPUT' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:105: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'void OneWire::write_bit(uint8_t)':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:125: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'uint8_t OneWire::read_bit()':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:140: error: 'delayMicroseconds' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'void OneWire::write(uint8_t, uint8_t)':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:163: error: 'INPUT' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:163: error: 'pinMode' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:164: error: 'digitalWrite' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp: In member function 'void OneWire::depower()':
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:203: error: 'INPUT' was not declared in this scope
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:203: error: 'pinMode' was not declared in this scope
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
C:\Users\Администратор\Documents\Arduino\libraries\OneWire\OneWire.cpp:66:24: error: WConstants.h: No such file or directory --
используется старая библиотека - вот и ошибкаа такая ,упоминание WConstants.h в коде библиотеки надо заменить на Arduino.h
а чем править библеотеку чтобы не напортачить с кодировкой, в блокноте можно?
можно
Кстати я наблюдал тоже некоторые проблемы с этими датчиками. При использовании DC-DC преобразователя для питания ардуины и датчика, с датчиком неоднократно терялась связь или он переставал инициализироваться, учитывая то, что подключение датчика было полноценное, по 3 проводам.
обзавёлся и я проблемой на пустом месте
01
#include <OneWire.h>
02
03
// DS18B20 Temperature chip i/o
04
OneWire ds(2);
// пин подключения датчика
05
int
pin_test_ds=4;
//пин для проверки готовности датчика
06
int
pin_power_ds=3;
//пин подачи питания
07
08
void
setup
() {
09
Serial
.begin(9600);
10
pinMode(pin_power_ds, OUTPUT);
11
digitalWrite(pin_power_ds, HIGH);
12
pinMode(pin_test_ds, INPUT);
13
}
14
15
void
loop
() {
16
temperature();
17
18
}
19
20
21
void
temperature() {
//чтение температуры
22
byte
i;
23
byte
present = 0;
24
byte
type_s;
25
byte
data[12];
26
byte
addr[8];
27
float
t;
28
29
if
( !ds.search(addr)) {
//поиск адресов
30
ds.reset_search();
31
delay(250);
32
Serial
.println();
33
return
;
34
}
35
String id=String(addr[0], HEX);
for
( i = 1; i < 7; i++) {id=id+
'.'
+String(addr[i], HEX);}
//выделениие идентификатора из имени
36
37
if
(OneWire::crc8(addr, 7) != addr[7]) {
//проверка контрольной суммы
38
Serial
.print(
'#'
);
39
Serial
.print(id);
40
Serial
.println(
"error"
);
41
return
;
42
}
else
{
43
44
switch
(addr[0]) {
// определение типа датчика
45
case
0x10:
//DS18S20
46
type_s = 1;
break
;
47
case
0x28:
//DS18B20
48
type_s = 0;
break
;
49
case
0x22:
//DS1822
50
type_s = 0;
break
;
51
default
:
Serial
.println(
"unknown_device"
);
return
;
52
}
53
54
ds.reset();
55
ds.select(addr);
56
ds.write(0x44, 1);
//команда на начало конвертации температуры
57
while
(!digitalRead(pin_test_ds)) {}
// задержка конвертации 0-конвертация, 1-окончание конвертации
58
59
present = ds.reset();
//-------------------------------
60
ds.select(addr);
61
ds.write(0xBE);
// Read Scratchpad
62
63
for
( i = 0; i < 9; i++) { data[i] = ds.read();}
// чтение данных
64
65
int16_t raw = (data[1] << 8) | data[0];
//смещение разрядности и сложение байт
66
if
(type_s) {
67
raw = raw << 3;
// 9 bit resolution default
68
if
(data[7] == 0x10) {
69
// "count remain" gives full 12 bit resolution
70
raw = (raw & 0xFFF0) + 12 - data[6];
71
}
72
}
else
{
73
byte
cfg = (data[4] & 0x60);
74
// at lower res, the low bits are undefined, so let's zero them
75
if
(cfg == 0x00) raw = raw & ~7;
// 9 bit resolution, 93.75 ms
76
else
if
(cfg == 0x20) raw = raw & ~3;
// 10 bit res, 187.5 ms
77
else
if
(cfg == 0x40) raw = raw & ~1;
// 11 bit res, 375 ms
78
//// default is 12 bit resolution, 750 ms conversion time
79
}
80
t = (
float
)raw / 16.0;
81
Serial
.print(id);
82
Serial
.print(
" t= "
);
83
Serial
.print(t);
84
Serial
.println();
85
Serial
.flush();
86
}
87
}
//------temperature()
Датчики зацеплены по 3х проводной схеме, плюс дополнительный контрольный пин(см. строку 57 скетча) к информационной линии. По даташиту после команды на конвертации данных нужно дождаться окончания и после появления высокого уровня можно начинать чтение данных. На макетке с мегой всё отлично заработало (4 датчика). Начал перетаскивать на нану и паять распределительный шлейф для разноса датчиков по заданным точкам. Получилось вот что, всё работает до касания любой части схемы (даже пальцем), оно обрывает чтение данных на некоторое время. Замена строки ожидания на delay проблему решает полностью. Но так как на этом же контроллере будут и иные устройства, то delay вариант плохой.
Т.к. информационная линия по даташиту же притянута к +5 через 4.7кОм, то почему не удаётся читать статус датчика непонятно. Ради интереса попробовал зацепить нану к заземлённому компу и к планшету, эффект одинаковый. Есть ли у вас какие нибудь предложения как это побороть?
А чем этот вайл от делая отличается ? В обоих случаях программа висит в ожидании. Можно применять псевдомультизадачность , у мня замечательно работает http://blog.ksduino.org/post/42862084042/pseudo-multitasking-using-timer-in-arduino-sketch
Датчики надо вешать гирляндой , но не звездой. На каждый датчик по питанию полезно навесить 0.1 мкф керамику и 10 мкф электролит. Подтяжку надо ставить на самом дальнем датчике. Провод применять лучше всего двупарную витую пару. Одна пара - питание , вторая пара - дата и земля.
и еще ... Можно один раз толкнуть Все датчики на измерение, потом подождать секунду и опрашивать подряд без задержек, но, для такого режима надо смотреть напругу питания на дальнем датчике - может просесть (выдать 87 градусов) тогда надо увеличивать электролит в конце.
разница в том, что while фактически несколько миллисекунд для тех датчиков которые у меня есть, но если появятся датчики из иной партии, то может быть и 500мс. Само собой не о какой многозадачности и речи быть не может, если будет выставлен delay по наихудшему датчику (4 датчика это уже 2 секунды, много). Ожидается использование иных 1-wire устройств, будет пара серв. Точно нужно будет следить за serial и по запросу или выполнять что сказано или отдавать данные. Короче первое же устройстов не должно хавать столько временных ресурсов контроллера.
Код конечно я перепишу и скорее всего датчики будут читаться по индивидуальному запросу. Кстати спасибо за идею, вероятно вероятно данные конвертить лучше всего разом.
А почему звездой нельзя?
Наверно звездой можно, но сбоит нещадно от косого взляда...
Использую 12 -ю точность, потому время преобразования 0.75 сек. Мне достаточно данных по температуре не чаще раза в 1 сек. Потому в псевдомульте я делаю так : в сетупе толкаю первый раз на преобразоаание, потом выставляю для процесса термо следующий запуск через секунду ( это произойдет по прерыванию от таймера) и занимаюсь прочими делами, пока Все датчики преобразовывают одновременно и независимо от того, чем занимается программа( тупо ждет, или обслуживает там и интернет и сервы и всеЧтоУгодно) но, через секунду, запускается процесс термо, считывает температуры с датчиков, распихивает по глобальным ( не забыть volatile) переменным , толкает запуск преобразования и завершается. РАДУЮСЬ ;)
Поставьте 1 - 1.5 килоома виесто 4.7 .......
И желательно не делать " звезду " , а подключать разные шлейфы к разным пинам....
"к разным пинам" а смысл в 1-wire тогда? Так бы я элементарными терморезисторами обошелся.
А про звезду разъясниет подробнее, мне природа проблемы не понятна. Электрический контакт всё равно один и тот же, что в гирлянде, что в звезде. На макетке датчики грубо говоря тоже звездой тыкаются.
Про многозадачность, я понимаю, что оптимизировать можно любую проблему. Но штука в том, что если фича с единицей на линии по окончанию конвертации в даташите есть, то хотелось бы понимать почему как задано не работает. По своей сути для 1-wire мелкая статика и наводки страшны быть не должны, а тут на тебе.. Когда доберусь до работы, проверю, может элементарно дуинка у меня подгорелая...
Природа тут вторична. Шлейфом у меня около 60 датчиков на 80 метровом кабеле в окружении кучи железа работают идеально , подключенные как описано выше, и сбоят только когда варят электричеством рядом.
Со звездой экспериментируйтe сами, получится расскажете ;)
Контакт один и тот же, а маршрут сигнала разный. 1-wire это линейная сеть. Грубо говоря, при линейной топологии один сигнал идет от контроллера и, пройдя всю линию, в виде паразитного "эха" возвращается обратно к МК, затем приходит ответ от датчиков. Протоколом это предусмотрено, поэтому коллизии очень редки.
При топологии "звезда" один сигнал уходит от МК и несколько паразитных приходит (лучей-то несколько), причём с разными временными задержками, забивая таймслоты, которые МК держит для ответа. И в это время приходят ответы от датчиков - а двери-то уже закрыты. Имеем пропуски полезного сигнала.
На макетке расстояния сантиметры, эхо даже в звезде успевает пройти раньше ответа от датчиков, на обьекте расстояния в метрах, эхо накладывается на ответ от датчиков. Так понятно?
Это не так. Читайте первоисточники.
Скорость света 300 000 000 м/с, эхо с 10 метров 300 000 000 /10 /2=15 МГц (это без учёта неизвестного коэффициента укорочения). Про уровни отраженного сигнала несогласованной линии и вовсе можно умолчать, до логической единици он даже в теории дотянуть не сможет. А свой косяк я нашел, в монтаже. Так что способ замены dalay из строки 57 является действенным и стабильным. delay из строки 31 был также удалён. Опрос единичного датчика проходит быстрее чем за 50мс (забыл померить точно). Причём если не печатать такую уйму данных в ком-порт, то интервал между чтением следующего датчика совершенно не существенный. Конвертация данных в датчике занимает где то в 2-3 раза меньше времени, чем само чтение этих данных контроллером. Видимо дополнительную оптимизацию в этом направлении проводить не нужно. Завтра наверное проверю идею звезда/гирлянда на линиях более 10м (причём обязательно в помещении сильно замусоренном паразитными излучениями разных диаппазонов).
один вопрос, может не втему... а как подключить 2 и более (Ds18b20 иди DS18S20) в герлянду... сшемотехнику я кажится понял а как к ним обрашаться... програмна...
один вопрос, может не втему... а как подключить 2 и более (Ds18b20 иди DS18S20) в герлянду... сшемотехнику я кажится понял а как к ним обрашаться... програмна...
взгляд немного выше, может заметите скетч и даже с описанием и русскими комментариями..
я этот скец использова... но там только один дачик работае... когда второй включаю все встает...
Можно попробовать включить правильно. У вас должно быть гирлянда советская, последовательная, а надо по европейскому образцу, параллельную.
По сцылке хорошая статья, в которой в тч есть и про подключение датчиков.
http://habrahabr.ru/post/161359/
... Да сам сайт интереснн.
Отчитываюсь по подключениям датчиков по разным схемам. Испытания проводились в аппаратном зале FM-передатчиков. Нарыл на складе три мотка аккустического провода разного качества (витухи отрезками не нашлось, а от бухты резать не стал). На информационный линию у дуины зацепил осцилограф. Подтягивающий резистор в 4.7к был напаян на дуине. Тут же выяснилось, что шумы всего на одном шлейфе в 10 метров очень даже не слабые, хотя два датчика гирляндой читались. Пришлось заземлиться как положено (ну почти как положено). Добавление ещё одного шлейфа без датчика в случае звезды полный срыв синхронизации, в случае гирлянды частичный срыв (контрольная сумма не сходилась). В итоге (по рекомендациям выше) был добавлен ещё один резистор 4.7к на дальний край линии (т.е. выпаивать первый мне лень было, но сопрротивление снизил и дальний край нагрузил). В итоге из 3х шлейфов (4 датчика) были собраны все доступные комбинации (звезда, дерево, гирлянда). Чтение данных во всех комбинациях стабильное, безразрывное. Наличие или отсутствие конденсаторов (для 3х проводной линии) видимого эффекта не давало. Общая длина шлейфов была 30-40 метров. Для квартирного применения этого с запасом хватит.
как заземлились?
Резистор на дальнем конце сильно уменьшил шум?
Я так и не смог заставить работать больше 4-х датчиков на одной линии, причем длина хоть 20, хоть 120 метров - всё одно.
Я вешаю резистор ( терминатор) только в конце линии. Получено тестированием на новой бухте витухи ( порядка 300м)
конденсаторы при такой длине тоже актуальны - керамика от вч помех, электролит в качестве буфера питания при большом количестве датчиков .
что есть терминатор? Резистор между DATA и GND? Какой номинал?
Терминирующим устройством я называю резистор подтяжки на плюс и конденсаторы по питанию, собранные в конструктивный моноблок на разъеме rj-45 , фтыкаемые на конце линии с датчиками ( по аналогии с терминаторами на коаксиальных 10 мбт ethernet-ах начала 90гг)
Заземлился элементарно, там всё же промышленное здание, РЕ-шина даже до большей части настольных ламп дотянута, накрутил канатик на ближайшую и дотянул до осцилографа, а он в свою очередь через щуп до дуины на grn. Резюк на дальнем конце погасил шумы значительно. Проблема ещё в том, что когда датчик отдаёт данные, его логический уровень падает (хотя вроде бы при наличии линии питания не должен). Очень заметны были сетевые наводки 50Гц (но при использовании витухи оно не должно быть актуально).
Для того , чтобы при преобразовании и ответе лог единица не проседала я и ставлю на питание электролит, типа водонапорной башни, которая поддерживает давление ( напряжение ) в системе. Надеюсь никто не использует паразитное питание ?
вообщетто надо питание подавать 12в отдельным проводом, а 5в делать на месте, около датчика с помощью lm7805. При этом исключаются просадки питания на длинном проводе.
По ссылке на харбу использовали паразитное.. Да и датчик не создаёт нагрузки на линии, когда тыкал кондёры, форма проседания не менялась, оно случается скорее всего из за разряда внутреннего кондёра. А так как он по структуре зацеплен через диоды, то разница напряжений между полуразряженным внутренним и линией обязана быть. Питать отдельными напряжениями с преобразованием на месте это уже промышленный подход, где предполагаются не только датчики, но и исполнительные устройства. Большинству здесь оно не нужно, не пугайте сложностями, пожгут ведьне одну дуинку после таких советов.
Когда я начинал, то тоже пробовал паразитное, однако количество сбоев было удручающее...
такая вот проблема,
01
Arduino: 1.5.3 (Windows 7), Board:
"Arduino Uno"
02
03
sketch_dec21b.ino: In function
'void temperature()'
:
04
sketch_dec21b:35: error: call of overloaded
'String(byte&, int)'
is
ambiguous
05
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:73: note: candidates are: String::String(
double
,
int
)
06
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:72: note: String::String(
float
,
int
)
07
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:71: note: String::String(
long
unsigned
int
, unsigned
char
)
08
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:70: note: String::String(
long
int
, unsigned
char
)
09
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:69: note: String::String(unsigned
int
, unsigned
char
)
10
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:68: note: String::String(
int
, unsigned
char
)
11
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:67: note: String::String(unsigned
char
, unsigned
char
)
12
sketch_dec21b:35: error: call of overloaded
'String(byte&, int)'
is
ambiguous
13
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:73: note: candidates are: String::String(
double
,
int
)
14
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:72: note: String::String(
float
,
int
)
15
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:71: note: String::String(
long
unsigned
int
, unsigned
char
)
16
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:70: note: String::String(
long
int
, unsigned
char
)
17
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:69: note: String::String(unsigned
int
, unsigned
char
)
18
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:68: note: String::String(
int
, unsigned
char
)
19
D:\arduino\arduino-1.5.3\hardware\arduino\avr\cores\arduino/WString.h:67: note: String::String(unsigned
char
, unsigned
char
)
20
21
This report would have more information with
22
"Show verbose output during compilation"
23
enabled
in
File > Preferences.
Arduino: 1.5.3 это нестабильная ветка среды
Помогите у меня чтото не так , я как новичёк в этом и делаю всё как в данной статье http://cxem.net/arduino/arduino17.php , подключяю всё как по схемме и у меня выскакивает ошыбка
http://i.imgur.com/yIumCIt.jpg
у тебя не подключена библиотека OneWire
Первая строчка должна быть не #include , а #include <OneWire.h>
ОК спосибо, попробую а температуру будет показывать в мониторе порта да? только эту библеотеку подключять?
Tomasina ничего не получяется, вот что выдаёт монитор порта
http://i.imgur.com/Js8OS0N.jpg
01
#include <OneWire.h>
02
03
/*
04
* получаем температуру от DS18S20
05
*/
06
07
OneWire ds(10);
// линия 1-Wire будет на pin 10
08
09
void
setup
(
void
)
10
{
11
Serial
.begin(9600);
12
}
13
14
15
void
loop
(
void
)
16
{
17
byte
i;
18
byte
present = 0;
19
byte
data[12];
20
byte
addr[8];
21
22
if
( !ds.search(addr)) {
23
//Serial.print("No more addresses.\n");
24
ds.reset_search();
25
return
;
26
}
27
28
/*Serial.print("R=");
29
for( i = 0; i < 8; i++) {
30
Serial.print(addr[i], HEX);
31
Serial.print(" ");
32
}*/
33
34
if
( OneWire::crc8( addr, 7) != addr[7]) {
35
Serial
.print(
"CRC is not valid!\n"
);
36
return
;
37
}
38
39
if
( addr[0] != 0x10) {
40
Serial
.print(
"Device is not a DS18S20 family device.\n"
);
41
return
;
42
}
43
44
ds.reset();
45
ds.select(addr);
46
ds.write(0x44,1);
// запускаем конвертацию
47
48
delay(5000);
// скорее всего достаточно 750ms
49
// we might do a ds.depower() here, but the reset will take care of it.
50
51
present = ds.reset();
52
ds.select(addr);
53
ds.write(0xBE);
// считываем ОЗУ датчика
54
55
/*Serial.print("P=");
56
Serial.print(present,HEX);
57
Serial.print(" ");*/
58
for
( i = 0; i < 9; i++) {
// обрабатываем 9 байт
59
data[i] = ds.read();
60
//Serial.print(data[i], HEX);
61
//Serial.print(" ");
62
}
63
/*Serial.print(" CRC=");
64
Serial.print( OneWire::crc8( data, 8), HEX);
65
Serial.println();*/
66
67
// высчитываем температуру :)
68
int
HighByte, LowByte, TReading, Tc_100;
69
LowByte = data[0];
70
//Serial.print("LB= ");Serial.print(LowByte,HEX);
71
HighByte = data[1];
72
//Serial.print(" HB= ");Serial.print(HighByte,HEX);
73
TReading = (HighByte << 8) + LowByte;
74
Tc_100 = TReading/2;
75
Serial
.print(
" T = "
);
Serial
.print(Tc_100);
76
Serial
.println();
77
}
Мне кажется код из статье левый, там написанно DS18B20 а в коде DS18S20 ,
Поставьте библиотеку DallasTemperature (ссылка, справа кнопка Download ZIP) и проверьте гарантированно работающий скетч из примеров (Файл - Примеры - Dallas...)
Если работает - значит датчик исправный и можно двигаться дальше.