Кнопка двойного состояния Nextion
У меня возникла проблема с моим дисплеем Nextion. Я загрузил следующий код через Arduino IDE на Arduino MEGA 2560.
Мой редактор Nextion показывает кнопку как ID: 9
на странице 0 с
именем floor
. Я не совсем уверен, что приведенный ниже код верен. У меня была одна проблема, из-за которой загрузка с ноутбука на Mega не завершалась, но мне удалось обойти эту проблему, отключив Nextion и заменив кабели RX и TX от Nextion во время загрузки. Не знаете, как еще я мог бы решить эту проблему? (Если у кого-нибудь есть какие-то идеи, ха-ха)
Все, что должно произойти, - это когда изменяется состояние с двумя кнопками, встроенный индикатор LED_BUILTIN
устанавливается на ВЫСОКИЙ
, а если он находится во втором состоянии, устанавливается на НИЗКИЙ
.
код
#include "Nextion.h"
NexDSButton bt0 = NexDSButton(0, 9, "floor");
int ledPin = LED_BUILTIN;
char buffer[100] = {0};
NexTouch *nex_listen_list[] =
{
&bt0,
NULL
};
void bt0PopCallback(void *ptr)
{
uint32_t dual_state;
NexDSButton *btn = (NexDSButton *)ptr;
dbSerialPrintln("b0PopCallback");
dbSerialPrint("ptr=");
dbSerialPrintln((uint32_t)ptr);
memset(buffer, 0, sizeof(buffer));
if(dual_state)
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
}
void setup(void)
{
nexInit();
bt0.attachPop(bt0PopCallback, &bt0);
dbSerialPrintln("setup done");
pinMode(ledPin, OUTPUT);
}
void loop(void)
{
nexLoop(nex_listen_list);
}
Моя проблема заключается в том, что MEGA идентифицирует событие касания (поскольку индикатор TX на MEGA мигает), однако он не включает встроенный встроенный светодиод MEGA.
Любая помощь будет очень признательна!
@Anake.me, 👍0
Обсуждение2 ответа
Это часть кода, который я использовал для вытяжного вентилятора, текст кнопки проверяется, и если кнопка соответствует команде, вентилятор включается или выключается, а текст кнопки соответствующим образом изменяется. Надеюсь, это поможет.
void b19PopCallback(void *ptr) //Вытяжной вентилятор
{
NexButton *btn = (NexButton *)ptr;
memset(buffer, 0, sizeof(buffer));
btn->getText(buffer, sizeof(buffer));
if (strcmp(buffer, "ON"))
{
//ВОЗВРАЩАЕТСЯ КАК FALSE (0), ЕСЛИ ОБЕ СТРОКИ СОВПАДАЮТ
digitalWrite(b_motor, LOW);
strcpy(buffer, "ON");
btn->setText(buffer);
}
else
{
digitalWrite(b_motor, HIGH);
strcpy(buffer, "OFF");
btn->setText(buffer);
}
}
strcmp
не возвращает true
или false
, поэтому ваш комментарий о том, что он возвращает FALSE, если обе строки совпадают, немного вводит в заблуждение. См. [strcmp](http://www.cplusplus.com/reference/cstring/strcmp /) - strcmp
предназначен для возврата числа < 0 if string1 is less than string2, 0 if they are the same, and >0, если string1 больше string2 (в последовательности сортировки)., @Nick Gammon
Независимо от ошибки в описании возвращаемого типа strcmp, я считаю, что это действительно то, чего не хватает OP. Код в OP никогда не проверяет строку и не присваивает любое значение dual_state ., @Delta_G
Вы можете попробовать использовать int ledPin=13 вместо led_builtin . Встроенный светодиод подключается 13-контактным разъемом. Большинство Arduino имеют встроенный светодиод, которым вы можете управлять. На UNO, MEGA и ZERO он подключается к цифровому контакту 13. Попробуй вот это.
#include "Nextion.h"
int ledPin = 13;
NexDSButton bt0 = NexDSButton(0, 1, "bt0");
uint32_t dual_state=0;
void setup(){
nexInit();
pinMode(ledPin, OUTPUT);
}
void loop(){
bt0.getValue(&dual_state);
delay(200);
if(dual_state==1) //При нажатии кнопки двойного состояния dual_state =1
{
digitalWrite(ledPin, HIGH);
}
else if(dual_state==0)
{
digitalWrite(ledPin,LOW );
}
}
- Использование модуля JYETech 2.4 Inch LCD Display Screen Module с Arduino?
- Драйвер Arduino ESP32F-TFT-1.44
- LCD TFT 2.4" изменяет значения аналогового считывания Arduino Mega
- Нужен дисплей в виде полосы для моего проекта Arduino
- mcufriend 2.4 tft мега 2560
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- ЖК-дисплей 16x2, показывающий блоки под текстом
- Запуск двух шаговых двигателей с двумя поворотными энкодерами
Вы выбрали аппаратный последовательный порт для nexSerial? Вы видите текст "настройка завершена"? Вы видите текст "b0PopCallback"? Вы включили это событие в редакторе nextion? Пожалуйста, дополните свой первоначальный вопрос дополнительной информацией., @Jot
Я не делал никакого кодирования в редакторе Nextion, так как думал, что Arduino IDE обрабатывает все кодирование. Как бы я мог включить событие в Nextion?, @Anake.me
Признаю, что я загрузил этот код из образца скетча, предоставленного Nextion, однако я использовал ТОЛЬКО код и никогда не заглядывал в .Файл HMI. Я мог бы просмотреть это и попытаться понять, что вы имеете в виду, включив событие в Nextion :), @Anake.me
В обратном вызове, где он присваивает значение dual_state ?, @Delta_G