Проблема с получением значений с экрана Nextion на Arduino
В настоящее время у меня есть установка с датчиком Arduino BME 280 и 4,3-дюймовым экраном Nextion. Что делает моя программа, так это отправляет все вычисленные значения из BME в числа и индикаторы выполнения в моем следующем шаге на экране под названием "Выполнить".
Эта страница состоит из 3 значений: Дельта T, Температура и влажность, а также 3 кнопок для сигнализации. Каждое из этих отображаемых значений подключено к своему собственному индикатору выполнения. Каждое из отдельных значений имеет нижнюю и верхнюю настройки будильника, которые можно настроить на следующем экране под названием "Настройки".
Поэтому в основном то, что я борюсь с заключается в получении в получении значения из моего "настройки", чтобы написать "если" функция в моем Ардуино я.е (если кнопка доступна на странице бегать и значение меньше, чем X на странице "настройки" или более г на странице "настройки", бить тревогу).
Я использовал функцию .GetValue, но она не возвращает значение моей программе Arduino. Может ли кто-нибудь, пожалуйста, помочь. Мы будем вам очень признательны.
// Include required libraries
#include <NexTouch.h>
#include <NexDualStateButton.h>
#include <NexNumber.h>
#include <NexProgressBar.h>
#include <NexText.h>
#include <Nextion.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
//Define BME parameters
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // I2C
//Define variables
int Delta_T;
int Temp_disp;
float Temp_wb;
float Temp;
int rh;
//Define NEXTION variables
//Transport Page
NexNumber Trans_deltaT = NexNumber(2, 10, "n0");
NexNumber Trans_T = NexNumber(2, 11, "n1");
NexNumber Trans_H = NexNumber(2, 12, "n2");
//Run Page
NexNumber Run_deltaT = NexNumber(3, 14, "n0");
NexNumber Run_T = NexNumber(3, 15, "n1");
NexNumber Run_H = NexNumber(3, 16, "n2");
NexDSButton Delta_Temp= NexDSButton(3, 12, "bt0");
NexDSButton Temperature= NexDSButton(3, 22, "bt1");
NexDSButton Hum= NexDSButton(3, 13, "bt2");
//Settings Page
NexNumber DT_min= NexNumber(4, 5, "n6");
NexNumber DT_max= NexNumber(4, 12, "n3");
NexNumber T_min= NexNumber(4, 6, "n7");
NexNumber T_max= NexNumber(4, 14, "n4");
NexNumber Hum_min= NexNumber(4, 7, "n8");
NexNumber Hum_max= NexNumber(4, 16, "n5");
NexTouch *nex_listen_list[] = {
&Delta_Temp,
&Temperature,
&Hum,
&Run_deltaT,
// &DT_min,
// &DT_max,
// &T_min,
// &T_max,
// &Hum_min,
// &Hum_max
NULL
};
void Delta_TempPopCallback(void*ptr) {
uint32_t DT = 0; // Button State
uint32_t DT_act = 0;
uint32_t DelT_min = 0; //Define DT_min setting
uint32_t DelT_max = 0; //Define DT_max setting
DT_min.getValue(&DelT_min);
DT_max.getValue(&DelT_max);
Delta_Temp.getValue(&DT);
Run_deltaT.getValue(&DT_act);
Serial.println();
Serial.println();
Serial.println(DelT_min);
// Read value of dual state button to know the state (0 or 1)
if (DT == 0 && DT_act < DelT_min || DT_act > DelT_max) { // If dual state button is equal to 1 (meaning is ON)...
digitalWrite(2, HIGH); // Turn ON internal LED
Serial.println("ON");
} else { // Since the dual state button is OFF...
digitalWrite(2, LOW); // Turn OFF internal LED
Serial.println("OFF");
}
}
void setup() {
Serial.begin(9600);
bme.begin();
pinMode(2, OUTPUT);
Delta_Temp.attachPop(Delta_TempPopCallback);
}
void loop() {
Temp = bme.readTemperature();
Temp_disp = Temp;
// Serial.print("Temperature = ");
// Serial.print(Temp);
// Serial.println(" *C");
rh=bme.readHumidity();
// Serial.print("Humidity = ");
// Serial.print(rh);
// Serial.println(" %");
Temp_wb = atan(0.151977 * pow(rh + 8.313659, 0.5)) * Temp + atan(Temp + rh) - atan(rh - 1.676331) + 0.00391838 * pow(rh, 1.5) * atan(0.023101 * rh) - 4.686035;
// Serial.print("Wet Bulb Temp= ");
// Serial.print(Temp_wb);
// Serial.println(" *C");
Delta_T=Temp-Temp_wb;
// Serial.print("Delta T=");
// Serial.print(Delta_T);
// Serial.println(" *C");
// Serial.println();
Trans_deltaT.setValue(Delta_T);
Trans_T.setValue(Temp_disp);
Trans_H.setValue(rh);
Run_deltaT.setValue(Delta_T);
Run_T.setValue(Temp_disp);
Run_H.setValue(rh);
nexLoop(nex_listen_list);
delay(50);
}
1 ответ
Мне пришлось повторить код getvalue несколько раз, похоже, есть ошибка, на которую указал ютубер в своем видео. https://github.com/rvxfahim/AHU-Firmware/blob/main/development_HMI.ino вы можете видеть из строки 133, я звонил ему так много раз, чтобы быть в безопасности, потому что иногда он ничего не возвращал или, возможно, возвращал ноль, я не помню, чтобы это было давно.
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Низкая частота обновления 1,8-дюймового TFT-дисплея
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Как Arduino может проверить, подключен ли он к ПК и включен ли компьютер?
- Как отправлять и получать беззнаковые целые (unsigned int) от одного arduino к другому arduino
- Использование последовательных контактов TX/ RX для связи по USB
Что вы подразумеваете под "не возвращает значение"? Почему бы вам не распечатать больше значений, которые вы пытаетесь прочитать, чтобы получить больше информации об отладке - по крайней мере, все те, которые вы используете в "если"? Также я бы рекомендовал вам вставлять парены в выражения типа " a && b || c
.
(a&&b)||c " и "a&&(b||c)" очень разные, и правила приоритета C не всегда интуитивно понятны., @Mat