首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已从DHT22获得NaN应答

已从DHT22获得NaN应答
EN

Stack Overflow用户
提问于 2018-02-09 03:04:53
回答 1查看 5.1K关注 0票数 0

我正在尝试从DHT22读取温度和湿度,代码如下:

代码语言:javascript
复制
#include "fsm_config.h"
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

#define DHTPIN D4          // what pin we're connected to
#define DHTTYPE DHT22     // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE); //// Initialize DHT sensor for normal 16mhz Arduino
const int buttonPin = D5;    // definicao do pino utilizado pelo botao
const int ledPin = D7;       // definicao do pino utilizado pelo led
const char* ssid = "augusto-Aspire-E5-571"; // id da rede
const char* password = "sLPCwZqX"; // senha da rede
const char* mqtt_server = "things.ubidots.com"; // server    

int buttonState = LOW;             // armazena a leitura atual do botao
int lastButtonState = LOW;         // armazena a leitura anterior do botao
unsigned long lastDebounceTime = 0;  // armazena a ultima vez que a leitura da entrada variou
unsigned long debounceDelay = 50;    // tempo utilizado para implementar o debounce
float umidade;  //Stores humidity value
float temperatura; //Stores temperature value
String hum = "{\"value\":";
String temp = "{\"value\":";
char humChar[50];
char tempChar[50];

WiFiClient espClient;
PubSubClient client(espClient);
int lastMsg = 1000;
int now;
char msg[60];
char msg1[60];

int send_data() {
  dht.begin();
  umidade = dht.readHumidity();
  temperatura = dht.readTemperature();
  //Print temp and humidity values to serial monitor
  Serial.print("Humidity: ");
  Serial.print(umidade);
  Serial.print(" %, Temp: ");
  Serial.print(temperatura);
  Serial.println(" Celsius");
  temp.concat(temperatura);
  temp.concat("}");
  hum.concat(umidade);
  hum.concat("}");
  temp.toCharArray(tempChar, 50);
  hum.toCharArray(humChar, 50);
  String hum = "{\"value\":";
  String temp = "{\"value\":";
  client.publish("/v1.6/devices/wemos/umidade", humChar);
  client.publish("/v1.6/devices/wemos/temp", humChar);

  delay(10000); //Delay 2 sec.
  return true;
}

但是我只得到了"NaN“作为答案,应该发生什么?我在这里寻找了一些其他问题,但没有一个对我有用。

这里是连接图像的链接:

EN

回答 1

Stack Overflow用户

发布于 2018-03-29 16:32:31

NaN代表“不是一个数字”。有时传感器无法读取,并会给出一个NaN值。您无法对其执行任何操作,但是在DHT.h库中有一个名为isnan()的函数。所以你可以在存储最后一个正确的值时创建一个备份变量。然后,您可以检查您的传感器是否显示为nan,如果他显示,您可以打印出备份变量:

代码语言:javascript
复制
float temperature;
float bTemperature;

temperature = dht.readTemperature();

if(!isnan(temperature)){
  bTemperature = temperature;
  Serial.println(temperature);

}
else{
  Serial.println(bTemperature);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48692988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档