You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
}

关键修改说明

  1. 移除setup()中变量声明的int关键字,确保读取到的传感器数据赋值给全局变量h和t
  2. 在loop()循环中添加传感器数据读取逻辑,保证每次循环都获取最新的温湿度值
  3. 增加了传感器读取失败的判断逻辑,方便排查潜在的连接问题

内容的提问来源于stack exchange,提问作者Alexey Kalachev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 16:25:09