|
|
本帖最后由 szumaky 于 2015-12-9 16:55 编辑
我在loop循环读取串口的数据,每5秒触发一次中断,获得DHT11的数值后通过串口发送给上位机。
但是在中断中获取DHT11是总是报错DHTLIB_ERROR_CHECKSUM。无法获取温湿度。
直接放在loop中可以获得。
想问下怎样才能获得温湿度的数据?
或者如何能实现在不阻塞串口的情况下,定时获取DHT11温湿度数值?
- //...
- #define DHT11_PIN A4
- volatile double myTemp [4];
- //...
- 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[0]);
- Serial.print("C");
- Serial.print(myTemp[1]);
- }
- void getTemperature(){
- myTemp[0] = 0.0;
- myTemp[1] = 0.0;
- myTemp[2] = 0.0;
- myTemp[3] = 0.0;
- int chk = DHT11.read(DHT11_PIN);
- switch (chk)
- {
- case DHTLIB_OK:
- myTemp[0] =DHT11.humidity;
- myTemp[1] =DHT11.temperature;
- myTemp[2] =Fahrenheit(DHT11.temperature);
- myTemp[3] =dewPoint(DHT11.temperature, DHT11.humidity);
- break;
- case DHTLIB_ERROR_CHECKSUM:
- //Checksum error
- myTemp[0] = -1001.0;
- break;
- case DHTLIB_ERROR_TIMEOUT:
- //Time out error
- myTemp[0] = -1002.0;
- break;
- default:
- //Unknown error
- myTemp[0] = -1009.0;
- break;
- }
- }
复制代码 |
|