我正在开发带有 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);
}
}
任何帮助将不胜感激。
我已经从 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 "));
}