Сравнение текстовой строки с текстовым выводом (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.
}
Заранее спасибо!
@Hoseasack, 👍1
Обсуждение1 ответ
Число с плавающей запятой может иметь несколько возможных состояний, помимо того, что оно просто является числом (однако его никогда нельзя сравнивать со строкой):
- Настоящее число с плавающей запятой
- Бесконечность
- Что-то недопустимое число.
Вам нужно последнее, т. е. внутренние данные переменной с плавающей запятой не представляют допустимого числа.
В стандартной математической библиотеке есть две функции, которые делают это за вас.
- Является ли число бесконечностью?
ininf(x)
- Это неверный номер?
isnan(x)
Чтобы использовать:
if (isnan(temp)) {
lcd.print("Invalid");
}
- Проблемы с преобразованием byte[] в String
- Недопустимое преобразование из 'char' в 'const char*' [-fpermissive] в строке
- Чтение из SPIFFS - Как лучше всего работать со строковым (или char) массивом с неопределенной длиной?
- Чтение и запись в EEPROM
- Для управления переключением реле в nextion с помощью микроконтроллера esp32
- Я не могу правильно получить строку, которую я отправил через nrf
- Второй элемент в массиве не назначается из объекта структуры, ArduinoJson
- Еще один простой и глупый вопрос о строках C++
пожалуйста, добавьте полное сообщение об ошибке в свой пост, @jsotola