Сравнение текстовой строки с текстовым выводом (DHT22)

Недавно я получил датчик DHT22. Я начал создавать небольшую станцию контроля температуры и влажности. Одна из вещей, которые я заметил, заключалась в том, что если вы вытаскивали датчик во время использования, он отображал «нан». Что я хотел сделать, так это то, что если переменная «temp» (для температуры) равна «nan», мой ЖК-дисплей отобразит сообщение. Но я продолжаю получать объем, преобразование и объявлять ошибки. Я пробовал каждую переменную и множество онлайн-форумов, документации и официального справочного сайта Arduino. Мой код выглядит так:

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <LiquidCrystal.h>

const int rs = 53, en = 51, d4 = 49, d5 = 52, d6 = 48, d7 = 47;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

#define DHTPIN 27    
#define DHTTYPE DHT22   
DHT dht(DHTPIN, DHTTYPE); 

int chk;
float hum;  
float temp; 

byte bigdot[8] = {
  B00000,
  B00000,
  B00000,
  B01110,
  B01110,
  B01110,
  B00000,
  B00000
};

byte circle[8] = {
  B00110,
  B01001,
  B01001,
  B00110,
  B00000,
  B00000,
  B00000,
  B00000
};

void setup() {
  lcd.createChar(0, bigdot);
  lcd.createChar(1, circle);
  lcd.begin(16, 2);
  dht.begin();
  do {
  lcd.setCursor(5,1);
  lcd.write(byte(2));
  lcd.setCursor(4,0);
  lcd.print("Loading");
  delay(500);
  lcd.clear();
  lcd.setCursor(7,1);
  lcd.write(byte(2));
  lcd.setCursor(4,0);
  lcd.print("Loading");
  delay(500);
  lcd.clear();
  lcd.setCursor(9,1);
  lcd.write(byte(2));
  lcd.setCursor(4,0);
  lcd.print("Loading");
  delay(500);
  lcd.clear();
  dht.readHumidity();
  dht.readTemperature();
  } while (hum > 90 || temp > 50.00);
  Serial.begin(9600);


}

void loop() {
    hum = dht.readHumidity();
    temp = dht.readTemperature();
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Temp: ");
    lcd.print(temp);
    lcd.write(byte(1));
    lcd.print("C");

    lcd.setCursor(0,1);
    lcd.print("RH:   ");
    lcd.print(hum);
    lcd.print("%");

    if (temp == a) {
      lcd.clear();
      lcd.home();
      lcd.print("Whoops! An");
      lcd.setCursor(0,1);
      lcd.print("error occured!");
    };
    Serial.print("Humidity: ");
    Serial.print(hum);
    Serial.print(" %, Temp: ");
    Serial.print(temp);
    Serial.println(" Celsius");
    delay(2000); //Delay 2 sec.
 }

Заранее спасибо!

, 👍1

Обсуждение

пожалуйста, добавьте полное сообщение об ошибке в свой пост, @jsotola


1 ответ


1

Число с плавающей запятой может иметь несколько возможных состояний, помимо того, что оно просто является числом (однако его никогда нельзя сравнивать со строкой):

  • Настоящее число с плавающей запятой
  • Бесконечность
  • Что-то недопустимое число.

Вам нужно последнее, т. е. внутренние данные переменной с плавающей запятой не представляют допустимого числа.

В стандартной математической библиотеке есть две функции, которые делают это за вас.

  • Является ли число бесконечностью? ininf(x)
  • Это неверный номер? isnan(x)

Чтобы использовать:

if (isnan(temp)) {
    lcd.print("Invalid");
}
,