датчик температуры ds18b20
- Войдите на сайт для отправки комментариев
Ср, 08/02/2012 - 21:21
Получил несколько датчиков температуры .Хотел их проверить но скетч который нашел для проверки содержит ошибки ,я их найти и понять не смог .помогите их устранить .
#include <OneWire.h>
//init the one wire interface on pin 12
OneWire ow (12);
void setup (void) {
Serial.begin (9600);
lookUpSensors ();
}
void lookUpSensors (){
byte address[8];
int i=0;
byte ok = 0, tmp = 0;
//start the search
Serial.println ("Search started");
while (ow.search (address)){
tmp = 0;
//0x10 = DS18S20
if (address[0] == 0x10){
Serial.print ( "Device is a DS18S20:");
tmp = 1;
} else {
//0x28 = DS18B20
if (address[0] == 0x28){
Serial.print (" Device is a DS18B20:");
tmp = 1;
}
}
//display the address, if tmp is ok
if (tmp == 1){
if (OneWire::crc8 (address, 7)! = address[7]){
Serial.println (" but it doesn't have a valid CRC!");
} else {
//all is ok, display it
for (i=0;i<8;i++){
if (address[i] < 9){
Serial.print ( "0");
}
Serial.print (address[i],HEX);
if (i<7){
Serial.print ("-");
}
}
Serial.println ("");
ok = 1;
}
}//end if tmp
}//end while
if (ok == 0){
Serial.println ( "No devices were found");
}
Serial.println ("--Search ended-");
}
void loop (void) {
//do nothing:)
}
http://robocraft.ru/blog/arduino/136.html
LEVV2006, по ссылке ошибка 404
и мне не ссылки надо , а понять где в скетче ошибка
Гы… у меня всё открывается. Я кинул тебе пример где всё детально рассказано как работать с датчиком.
LEVV2006, спасибо .
со второй попытки ссылка открылась . тот скетч заработал .
только вот данные получаются несколько странные
R=28 DA 31 3B 3 0 0 64 P=1 32 1 4B 46 7F FF E 10 1E CRC=1E
LB= 32 HB= 1 T = 153
если я правильно понял то T=153 это температура , только на комнатную она не сильно похожа .подскажите куда смотреть , и что поправить ?
LowByte = data[0]; HighByte = data[1]; TReading = (HighByte << 8) + LowByte; SignBit = TReading & 0x8000; // test most sig bit if (SignBit) // negative { TReading = (TReading ^ 0xffff) + 1; // 2's comp } Tc_100 = (6 * TReading) + TReading / 4; Whole = Tc_100 / 100; // separate off the whole and fractional portions Fract = Tc_100 % 100;Вот кусочек кода, который отвечает за пересчет у меня. Проверил несколькими значениями из даташита по датчику все сходится.
Нужно только обявить переменные:
Сам долго не понимал почему выдаются неправильные значения а вникать в формулу было влом. Этот кусок взял из какого то примера на основном сайте ардуины.
На выходе получаем три переменные целое, десятичное и знак (whole, fract и SignBit)
посоветовали другую библиотеку и все встало на место
_http://www.milesburton.com/?title=Dallas_Temperature_Control_Library
А у меня ни в какую компилироваться не хочет. Ни с той либой, ни с другой. Помогите, пожалуйста.
http://arduino.ru/forum/programmirovanie/1-wire-i-arduino-oshibka-kompilyatsii