首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DHT-11传感器获取NAN读数

从DHT-11传感器获取NAN读数
EN

Stack Overflow用户
提问于 2016-11-30 04:06:44
回答 10查看 37.5K关注 0票数 8

我正在尝试用arduino uno R3读取DHT-11传感器的温度和湿度。

代码语言:javascript
复制
#include <DHT.h>
#include <LiquidCrystal.h>

#define DHTPIN A3
#define DHTTYPE DHT11

DHT dht(DHTPIN,DHTTYPE);
LiquidCrystal lcd(5,8,9,10,11,12);

String hum="Humidity:";
String temptext="Temp:";

void setup() {

    Serial.begin(9600);
    lcd.clear();
    lcd.begin(16,2);
    dht.begin();
}

void loop() {

    float humidity = dht.readHumidity();
    delay(500);
    float temp = dht.readTemperature();
    delay(500);
      Serial.println(hum+humidity);
      Serial.println(temptext+temp);
      lcd.clear();
      lcd.print(hum + humidity);
      lcd.setCursor(0,2);
      lcd.print(temptext+temp);
      delay (5000);


}

我确信我的接线是正确的。DHT-11除了NAN之外什么也不报告,可能的原因是什么?它会不会坏了(我刚把它打开了)?

EN

回答 10

Stack Overflow用户

发布于 2017-05-16 17:49:06

逆序:

问:它可能坏了吗?

答:不太可能。唯一一次我有一个坏的是当我连接电压向后太长时间。如果只是很短的一段时间,它就可以存活下来。但是当它太长的时候,它就会融化。

问:使用NaN的可能原因是什么?

答:可能的原因:

1)您正在使用模拟引脚接收数字信号。

2)一根电线松了

我经常运行几个传感器站,上面有2到3个DHT-22,我使用数字引脚。其中一些离阿杜伊诺河20英尺远。

但如果电线松动了,我可以肯定地看到0.00。

这里是我问如何处理这些问题的问答:gnuplot: Faulty sensor sometimes reading 0.00 - how to convert them to missing?

当然,传感器并不是真的有问题。总是我拉了一根电线,它就松了。与任何引脚失去联系时,读数始终为0.00。

所以把它转换成数字引脚,看看它是如何工作的。

下面是我的代码:

在setup()之前,执行以下操作:

代码语言:javascript
复制
//     2 devices:  Input pins D2 and D5
#include <Adafruit_Sensor.h>
#include "DHT.h"
#define DHTPIN 2    
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define DHT2PIN 5 
#define DHT2TYPE DHT22
DHT dht2(DHT2PIN, DHT2TYPE);

然后

代码语言:javascript
复制
void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float df = t*(9.0/5.0)+32;
  if (isnan(h) || isnan(t)) { h=0; df=0; }
  float h2 = dht2.readHumidity();
  float t2 = dht2.readTemperature();
  float df2 = t2*(9.0/5.0)+32;
  if (isnan(h2) || isnan(t2)) { h2=0; df2=0; }
  Serial.print(h);  Serial.print("\t");
  Serial.print(df);  Serial.print("\t");
  Serial.print(h2);  Serial.print("\t");
  Serial.println(df2);
  delay(30000);
  }
票数 6
EN

Stack Overflow用户

发布于 2018-03-29 16:36:08

NaN代表“不是一个数字”。有时传感器无法读取,并会给出一个NaN值。您无法对其执行任何操作,但是在DHT.h库中有一个名为isnan()的函数。所以你可以在存储最后一个正确的值时创建一个备份变量。然后,您可以检查您的传感器是否显示为nan,如果他显示,您可以打印出备份变量:

代码语言:javascript
复制
float temperature;
float bTemperature;

temperature = dht.readTemperature();

if(!isnan(temperature)){
  bTemperature = temperature;
  Serial.println(temperature);

}
else{
  Serial.println(bTemperature);
}
票数 1
EN

Stack Overflow用户

发布于 2020-12-12 22:29:32

我已经在我的项目中解决了这个问题,在温度和湿度之间设置了10毫秒的延迟:

代码语言:javascript
复制
void loop()
{
  float h = dht.readHumidity();
  delay(10);
  float t = dht.readTemperature();

  Serial.print('\n');
  Serial.print("Current humidity = ");
  Serial.print(h);
  Serial.print("%  ");
  Serial.print("temperature = ");
  Serial.print(t); 
  delay(1000);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40874880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档