在定时中断中获取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;
}
} 是不是你的 DHT11 库中用到了中断?所以在中断中调用是不行的?
你研究一下库吧
页:
[1]