szumaky 发表于 2015-12-9 16:53:58

在定时中断中获取DHT11温湿度数值的问题

本帖最后由 szumaky 于 2015-12-9 16:55 编辑

我在loop循环读取串口的数据,每5秒触发一次中断,获得DHT11的数值后通过串口发送给上位机。
但是在中断中获取DHT11是总是报错DHTLIB_ERROR_CHECKSUM。无法获取温湿度。
直接放在loop中可以获得。

想问下怎样才能获得温湿度的数据?

或者如何能实现在不阻塞串口的情况下,定时获取DHT11温湿度数值?

//...
#define DHT11_PIN   A4
volatile double myTemp ;
//...
void setup(){
//...
MsTimer2::set(2000,receiveSensorData);
MsTimer2::start();
//...
}
void loop(){
//...
readSerial();
//...
}
void receiveSensorData(){
Serial.println("");
//read data
getTemperature();
delay(200);

//print data
Serial.print("H");
Serial.print(myTemp);
Serial.print("C");
Serial.print(myTemp);
}

void getTemperature(){
myTemp = 0.0;
myTemp = 0.0;
myTemp = 0.0;
myTemp = 0.0;
int chk = DHT11.read(DHT11_PIN);
switch (chk)
{
case DHTLIB_OK:
    myTemp =DHT11.humidity;
    myTemp =DHT11.temperature;
    myTemp =Fahrenheit(DHT11.temperature);
    myTemp =dewPoint(DHT11.temperature, DHT11.humidity);
    break;
case DHTLIB_ERROR_CHECKSUM:
    //Checksum error
    myTemp = -1001.0;
    break;
case DHTLIB_ERROR_TIMEOUT:
    //Time out error
    myTemp = -1002.0;
    break;
default:
    //Unknown error
    myTemp = -1009.0;
    break;
}
}

zoologist 发表于 2015-12-9 21:31:43

是不是你的 DHT11 库中用到了中断?所以在中断中调用是不行的?

你研究一下库吧
页: [1]
查看完整版本: 在定时中断中获取DHT11温湿度数值的问题