防水DS18B20温度传感器Arduino的代码错误
问题描述:
我一直在试图让一个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()': 错误:之前的数字常量 错误预期 ')':预期“ )'之前';'令牌
我无法弄清楚这些意味着什么或如何解决它。有人能帮我吗?谢谢!
答
好吧,如果你看看有错误的线路:
float TRead = ((MSB 8) | LSB);
你可以看到MSB 8
- 有这些参数之间没有操作。根据上下文,它应该是:
float TRead = ((MSB << 8) | LSB);
甚至(只是要确定):
float TRead = (((uint16_t)MSB << 8) | LSB);
的感谢!它的工作,并且错误不会弹出了,但我不知道如何读的温度。没有任何温度读数显示出来。也许那部分代码缺失?有人能告诉我那部分代码是什么吗?我无法弄清楚。谢谢! –