2016-11-25 107 views
0

我一直在試圖讓一個DS18B20防水溫度傳感器與我的Arduino的工作。這是我使用的代碼:防水DS18B20溫度傳感器Arduino的代碼錯誤

#include <OneWire.h> 

int SensorPin = 2; 


OneWire ds(SensorPin); 

void setup(void) { 
Serial.begin(9600); 
} 

void loop(void) { 
float temp = getTemp(); 
Serial.println(temp); 

delay(100); 

} 


float getTemp(){ 


byte data[12]; 
byte addr[8]; 

if (!ds.search(addr)) { 
//no more sensors on chain, reset search 
ds.reset_search(); 
return -1000; 
} 

if (OneWire::crc8(addr, 7) != addr[7]) { 
Serial.println("CRC is not valid!"); 
return -1000; 
} 

if (addr[0] != 0x10 && addr[0] != 0x28) { 
Serial.print("Device is not recognized"); 
return -1000; 
} 

ds.reset(); 
ds.select(addr); 
ds.write(0x44,1); 

byte present = ds.reset(); 
ds.select(addr); 
ds.write(0xBE); 


for (int i = 0; i < 9; i++) { 
data[i] = ds.read(); 
} 

ds.reset_search(); 

byte MSB = data[1]; 
byte LSB = data[0]; 

float TRead = ((MSB 8) | LSB); 
float Temperature = TRead/16; 

return Temperature; 

} 

我不斷收到以下錯誤:

在funtion '漂浮gerTemp()': 錯誤:之前的數字常量 錯誤預期 ')':預期「 )'之前';'令牌

我無法弄清楚這些意味着什麼或如何解決它。有人能幫我嗎?謝謝!

回答

0

好吧,如果你看看有錯誤的線路:

float TRead = ((MSB 8) | LSB); 

你可以看到MSB 8 - 有這些參數之間沒有操作。根據上下文,它應該是:

float TRead = ((MSB << 8) | LSB); 

甚至(只是要確定):

float TRead = (((uint16_t)MSB << 8) | LSB); 
+0

的感謝!它的工作,並且錯誤不會彈出了,但我不知道如何讀的溫度。沒有任何溫度讀數顯示出來。也許那部分代碼缺失?有人能告訴我那部分代碼是什麼嗎?我無法弄清楚。謝謝! –

相關問題