我试图从带有arduino uno R3的DHT-11传感器读取温度和湿度
#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);
}
我确信我的接线是正确的 . 除了NAN之外,DHT-11只能报告什么?可能会被打破(我刚打开它)?
3 回答
NaN代表“不是数字” . 有时传感器无法读取并为您提供nan值 . 你不能对它做任何事情,但在DHT.h库中有一个叫做isnan()的函数 . 因此,如果存储了最后一个正确的值,则可以创建备份变量 . 然后你可以检查你的传感器是否读为nan,如果是,你可以打印出备份变量:
相反的顺序:
问:可能会被打破吗?
答:不太可能 . 我唯一一次变坏的是当我将电压向后连接太久时 . 如果它只是短暂的一段时间它可以幸存下来 . 但是当它太长时间它就融化了 .
问:看到NaN的可能原因是什么?
答:可能的原因:
1)您正在使用模拟引脚接收数字信号 .
2)电线松动
我经常运行几个有2个或3个DHT-22的传感站,我使用数字引脚 . 其中一些距离Arduino有20英尺 .
但如果电线松动我肯定会看到0.00 .
这是一个问答,我问如何处理这些问题:gnuplot: Faulty sensor sometimes reading 0.00 - how to convert them to missing?
当然传感器并没有真正的故障 . 我总是拉着电线然后松开了 . 与任何引脚失去接触总是给出0.00读数 .
So switch it over to a digital pin and see how it acts.
这是我的代码:
在setup()之前,执行以下操作:
然后
我第一次使用DHT11一切都很顺利 . 我尝试了DHT11用于另一个应用程序,我遇到了这个问题,我的LCD1602和串行监视器上的
nan
. 我认为这是DHT11有缺陷,所以我重新加载我的旧程序来测试DHT11 . 该程序在新的DHT11上运行良好,因此它不是DHT11 . 所以我再次尝试了我的新程序,仍有nan
读数......我发现,如果你要求2个或更多读数太快(在我的情况下,我只是要求温度),两个
dht.getTemperature();
或两个dht.readTemperature();
之间没有延迟,具体取决于你使用的是哪个库,第二个和下面的读数将是给你一个nan
(非数字)值,直到它再次回到想要的读数,依此类推 . 所以我在读数之间放了2秒(delay(2000);
)的延迟,它解决了我的问题 .我希望这可以帮到你! :)