极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12505|回复: 1

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

[复制链接]
发表于 2015-12-9 16:53:58 | 显示全部楼层 |阅读模式
本帖最后由 szumaky 于 2015-12-9 16:55 编辑

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

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

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

  1. //...
  2. #define DHT11_PIN     A4
  3. volatile double myTemp [4];
  4. //...
  5. void setup(){
  6. //...
  7.   MsTimer2::set(2000,receiveSensorData);
  8.   MsTimer2::start();
  9. //...
  10. }
  11. void loop(){
  12. //...
  13. readSerial();
  14. //...
  15. }
  16. void receiveSensorData(){
  17.   Serial.println("");
  18.   //read data
  19.   getTemperature();
  20.   delay(200);

  21. //print data
  22.   Serial.print("H");
  23.   Serial.print(myTemp[0]);
  24.   Serial.print("C");
  25.   Serial.print(myTemp[1]);
  26. }

  27. void getTemperature(){
  28.   myTemp[0] = 0.0;
  29.   myTemp[1] = 0.0;
  30.   myTemp[2] = 0.0;
  31.   myTemp[3] = 0.0;
  32.   int chk = DHT11.read(DHT11_PIN);
  33.   switch (chk)
  34.   {
  35.   case DHTLIB_OK:
  36.     myTemp[0] =DHT11.humidity;
  37.     myTemp[1] =DHT11.temperature;
  38.     myTemp[2] =Fahrenheit(DHT11.temperature);
  39.     myTemp[3] =dewPoint(DHT11.temperature, DHT11.humidity);
  40.     break;
  41.   case DHTLIB_ERROR_CHECKSUM:
  42.     //Checksum error
  43.     myTemp[0] = -1001.0;
  44.     break;
  45.   case DHTLIB_ERROR_TIMEOUT:
  46.     //Time out error
  47.     myTemp[0] = -1002.0;
  48.     break;
  49.   default:
  50.     //Unknown error
  51.     myTemp[0] = -1009.0;
  52.     break;
  53.   }
  54. }
复制代码
回复

使用道具 举报

发表于 2015-12-9 21:31:43 | 显示全部楼层
是不是你的 DHT11 库中用到了中断?所以在中断中调用是不行的?

你研究一下库吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 04:21 , Processed in 0.063337 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表