【问题标题】:DS18B20 waterproof temp sensor arduino code errorDS18B20防水温度传感器arduino代码错误
【发布时间】:2016-11-25 21:16:53
【问题描述】:

我一直在尝试让 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;

}

我不断收到以下错误:

在函数'float gerTemp()'中: 错误:数字常量之前应为“)” 错误:预期 ')' 在 ';' 之前令牌

我无法弄清楚这些是什么意思或如何解决它。有人能帮我吗?谢谢!

【问题讨论】:

    标签: arduino


    【解决方案1】:

    好吧,如果你看看有错误的行:

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

    您可以看到MSB 8 - 这些参数之间没有运算符。根据上下文,应该是:

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

    也许甚至(只是为了确定):

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

    【讨论】:

    • 谢谢!它起作用了,并且不再出现错误,但是我不确定如何读取温度。没有任何温度读数出现。也许那部分代码丢失了?有人能告诉我那部分代码是什么吗?我想不通。谢谢!
    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多