датчик температуры ds18b20

mitos
Offline
Зарегистрирован: 11.12.2011

Получил несколько датчиков температуры .Хотел их проверить но скетч который нашел для проверки содержит ошибки ,я их найти и понять не смог .помогите их устранить .

 

#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:) 

}

 

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011
mitos
Offline
Зарегистрирован: 11.12.2011

 LEVV2006, по ссылке ошибка 404

и мне не ссылки надо , а понять где в скетче ошибка 

LEVV2006
LEVV2006 аватар
Offline
Зарегистрирован: 15.04.2011

Гы… у меня всё открывается. Я кинул тебе пример где всё детально рассказано как работать с датчиком. 

mitos
Offline
Зарегистрирован: 11.12.2011

 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  это температура , только на комнатную она не сильно похожа .подскажите куда смотреть , и что поправить ? 

soxy
Offline
Зарегистрирован: 09.02.2012
     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;

Вот кусочек кода, который отвечает за пересчет у меня. Проверил несколькими значениями из даташита по датчику все сходится.
 

Нужно только обявить переменные:

int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;

 Сам долго не понимал почему выдаются неправильные значения а вникать в формулу было влом. Этот кусок взял из какого то примера на основном сайте ардуины.

На выходе получаем три переменные целое, десятичное и знак (whole, fract и SignBit)

 

mitos
Offline
Зарегистрирован: 11.12.2011

посоветовали другую библиотеку и все встало на место

 _http://www.milesburton.com/?title=Dallas_Temperature_Control_Library

prosunriseman
Offline
Зарегистрирован: 16.04.2012

А у меня ни в какую компилироваться не хочет. Ни с той либой, ни с другой. Помогите, пожалуйста.

http://arduino.ru/forum/programmirovanie/1-wire-i-arduino-oshibka-kompilyatsii