DHT11 传感器为温度和湿度提供 NAN

问题描述 投票:0回答:1

我正在开发带有 RTC 模块和 DHT11 温度传感器的 Arduino 智能手表。由于我收到了温度和湿度的 NAN,因此我尚未连接 RTC 模块。我检查过,面包板上没有松动的电线。我正在使用带有 Arduino Uno 和 10K 欧姆电位计的 SH1106 OLED 屏幕。

以下是代码:

#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <Adafruit_SH1106.h>

#define OLED_RESET 4
Adafruit_SH1106 display(OLED_RESET);

#define DHT_TYPE DHT11
#define DHT_PIN 2
DHT HT(DHT_PIN, DHT_TYPE);
float humi;
float tempC;
float tempF;

int current_menu;
int menu_knob_state;

void setup()
{
  Serial.begin(9600);
  display.begin(SH1106_SWITCHCAPVCC, 0x3C);
 
  display.display();
  display.clearDisplay();

  HT.begin();
}

void mainmenu()
{ 
  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.setTextColor(BLACK, WHITE);
  display.print("Archimedes V1 - Menu ");
  display.setTextSize(2);
  display.setCursor(15, 20);
  display.setTextColor(WHITE);
  display.print("12:00:00");
  display.setTextSize(1);
  display.setCursor(35, 40);
  display.setTextColor(WHITE);
  display.print("01/01/1900");
  display.display();
  // delay(500);
}

void tempmenu(float tempC, float tempF, float humi){

  display.clearDisplay();
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.setTextColor(BLACK, WHITE);
  display.print("Archimedes V1 - Temp.");
  display.setTextSize(2);
  display.setCursor(3, 20);
  display.setTextColor(WHITE);
  display.print(tempF);
  display.setCursor(40, 20);
  display.print("F");
  display.setCursor(73, 20);
  display.print(tempC);
  display.setCursor(110, 20);
  display.print("C");
  display.setTextSize(1);
  display.setCursor(20, 40);
  display.print("Humidity:");
  display.setCursor(80, 40);
  display.print(humi);
  display.print("%");
  display.display();
  // delay(500);
}

void loop()
{
  menu_knob_state = analogRead(A0);
  Serial.println(menu_knob_state);

  humi = HT.readHumidity();
  tempC = HT.readTemperature();
  tempF = HT.readTemperature(true);
  
  if(menu_knob_state <= 256){
    current_menu = 0;
    mainmenu();
  } else if((menu_knob_state > 256)){
    current_menu=1;
    tempmenu(tempC, tempF, humi);
  }
} 

任何帮助将不胜感激。

arduino
1个回答
0
投票

我已经从 Adafruit 编辑了 DHT11 传感器的示例,并让它在 Arduino UNO 上运行。您可以在您的设置中尝试这个简单的代码,以帮助缩小问题范围。我发现如果我在代码中将传感器设置为 DH22 而不是 DHT11,它会返回 NAN - 因此您可能使用了错误的传感器。有些传感器的标签几乎难以辨认。我还发现,如果传感器输出引脚未连接,我会再次收到 NAN 响应。因此,有可能您的连接不良,或者您没有使用与代码中相同的输出引脚。最后,大多数传感器都包含一个内部上拉电阻。如果你的没有,Vcc 上的 10k 电阻应该可以解决这个问题。

// Written by ladyada, public domain

// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor

#include "DHT.h"

#define DHTPIN 7

#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  Serial.println(F("DHTxx test!"));

  dht.begin();
}

void loop() {
  delay(2000);

  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.println(F("% "));
  Serial.print(F("Temperature: "));
  Serial.print(t);
  Serial.println(F(" C "));
}
© www.soinside.com 2019 - 2024. All rights reserved.