Arduino UNO搭配3针DHT11温湿度始终显示0的故障求助
解决DHT11温湿度传感器显示0的问题
你的代码存在两个关键问题,导致串口和LCD始终显示0:
问题1:局部变量覆盖全局变量
在setup()函数中,你重新声明了局部变量h和t:
int h = dht.readHumidity(); int t = dht.readTemperature();
这会覆盖你在全局定义的同名变量,导致全局的h和t始终保持初始值0,而读取到的传感器数据仅存在于setup()的局部作用域中,执行完setup()后就被销毁了。
问题2:loop()中未实时读取传感器数据
当前代码仅在setup()中读取了一次传感器数据,之后loop()循环只是重复打印初始的0值,没有重新获取最新的温湿度数据。
修正后的代码
#include <DHT.h> #include <LiquidCrystal.h> #include <Arduino.h> #define DHTTYPE DHT11 #define DHTPIN 7 DHT dht(DHTPIN, DHTTYPE); const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); int t; int h; void setup() { lcd.begin(16,2); dht.begin(); Serial.begin(9600); // 去掉int,直接给全局变量赋值 h = dht.readHumidity(); t = dht.readTemperature(); delay(2000); } void loop() { delay(2000); // 每次循环都重新读取温湿度数据 h = dht.readHumidity(); t = dht.readTemperature(); // 可选:添加读取失败判断 if (isnan(h) || isnan(t)) { Serial.println("读取传感器数据失败"); lcd.clear(); lcd.setCursor(0,0); lcd.print("Sensor Error"); delay(2000); lcd.clear(); return; } Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C, "); Serial.print("Humidity: "); Serial.print(h); Serial.println(" %"); lcd.setCursor(0,0); lcd.print("Temp: "); lcd.print(t); lcd.print((char)223); lcd.print("C"); lcd.setCursor(0,1); lcd.print("Humidity: "); lcd.print(h); lcd.print("%"); delay(2000); }
关键修改说明
- 移除
setup()中变量声明的int关键字,确保读取到的传感器数据赋值给全局变量h和t - 在
loop()循环中添加传感器数据读取逻辑,保证每次循环都获取最新的温湿度值 - 增加了传感器读取失败的判断逻辑,方便排查潜在的连接问题
内容的提问来源于stack exchange,提问作者Alexey Kalachev
相关产品推荐
相关产品推荐

