Панель Nextion. Код или/или

Прошу помощи у программистов!

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Панель Nextion. Код или/или

#1

Сообщение Siberian » 05.12.2020{, 12:21}

Здравствуйте, Коллеги!
В написании кода (С), или другого, я полный бамбук, поэтому прошу помощи у Программистов.
Погуглил, может зрение старческое, или руки кривые... Ничего не нашел.
Если использовать #else#, то это не совсем то, что мне нужно.

Код: Выделить всё

if(bt1.val==1)              // Если bt1.val==1
{
  t1.txt="1"                 // Текст "1"
}else if(bt2.val==0)         // Если bt2.val==0
{
  t1.txt="1"                 // Текст "1"
 
}else if(bt3.val==1)        // Если bt3.val==1
{
  t1.txt="1"                 // Текст "1"
 }
Нужно постоянно прописывать, что нужно для #else if#

Мне нужно по другому:
Перечислить мои хотелки для bt1.val==1, bt2.val==0, bt3.val==1
И получить результат : t1.txt="1"
Типа так:

Код: Выделить всё

(Если bt1.val==1, или bt2.val==0, или bt3.val==1)
{
  t1.txt="1"                 // Текст "1"
 }
Только не при условии:

Код: Выделить всё

//-----------------------------------------------//
 if(bt1.val==1||bt2.val==0||bt3.val==1)
 //-----------//
 if(bt1.val==1&&bt2.val==0&&bt3.val==1)
 //-----------------------------------------------//
А при условии (или-или)

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Панель Nextion. Код или/или

#2

Сообщение Dryundel » 05.12.2020{, 12:43}

Siberian писал(а):
05.12.2020{, 12:21}
Только не при условии:

//-----------------------------------------------//
if(bt1.val==1||bt2.val==0||bt3.val==1)
//-----------//
if(bt1.val==1&&bt2.val==0&&bt3.val==1)
//-----------------------------------------------//

А при условии (или-или)
Не совсем понятно что требуется? XOR что ли?

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Панель Nextion. Код или/или

#3

Сообщение Siberian » 05.12.2020{, 12:51}

Dryundel,
Извините, я не знаю, что такое XOR...
Мне нужно задать такой код в Nextion.

Код: Выделить всё

(Если bt1.val==1, или bt2.val==0, или bt3.val==1)
{
  t1.txt="1"                 // Текст "1"
 }

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Панель Nextion. Код или/или

#4

Сообщение Dryundel » 05.12.2020{, 14:52}

Siberian писал(а):
05.12.2020{, 12:51}
Мне нужно задать такой код в Nextion.
Кароч, тут все зависит от ситуации.
Если к примеру надо что бы в текстовом поле появлялась 1 по нажатию любой из кнопок на дисплее, то просто прописываешь в каждой кнопке t1.txt="1" и всё.

Если другой вариант, описывай какой. Как присваиваешь bt1.val единицу, если не нажатием кнопки, тыкая по ней на дисплее?

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

Панель Nextion. Код или/или

#5

Сообщение Labu559 » 05.12.2020{, 16:34}

Исправился. :smile44:
Последний раз редактировалось Labu559 05.12.2020{, 17:33}, всего редактировалось 1 раз.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Панель Nextion. Код или/или

#6

Сообщение Dryundel » 05.12.2020{, 16:52}

Labu559, если бы в Nextion все было бы точно так же как в Arduino IDE, то и вопросов бы у Siberian наверняка не возникло бы.
Суть во первых в том, что Nextion штука событийная.
Во вторых правила кодирования в нем, с легкой руки разработчиков, несколько отличаются. К примеру можете забыть про привычную точку с запятой после инструкции.
И в третьих, Вы куда этот код предлагаете вписать? В какое место?

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Панель Nextion. Код или/или

#7

Сообщение Sancho » 05.12.2020{, 16:54}

Siberian, Описание Nextion
СпойлерПоказать
25 if Block Conditionally execute code block if boolean condition is met
– execute commands within block { } if (conditions) is met.
– nested conditions using () is not allowed. invalid: ((h0.val+3)>0)
– block opening brace { must be on line by itself
– no space between block close brace } and else. valid: }else invalid: } else
– Text comparison supports ==, !=
– Numerical comparison supports >, <, ==, !=, >=, <=
– conditions can be joined with && or || with no spaces used
– nested “if” and “else if” supported.
usage: if condition block [else if condition block] [else block]
– (conditions) is a simple non-complex boolean comparison evaluating left to right
valid: (j0.val>75) invalid: (j0.val+1>75) invalid: (j0.val<now.val+60)
if(t0.txt=="123456")
{
page 1
}

if(t0.txt=="123456"||sys0==14&&n0.val==12)
{
page 1
}

if(t0.txt=="123456"&&sys0!=14)
{
page 1
}

if(n0.val==123)
{
b0.txt="stop"
}else
{
b0.txt="start"
}

if(rtc==1)
{
t0.txt="Jan"
}else if(rtc1==2)
{
t0.txt="Feb"
}else if(rtc1==3)
{
t0.txt="Mar"
}else
{
t0.txt="etc"
}
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Панель Nextion. Код или/или

#8

Сообщение Dryundel » 05.12.2020{, 17:07}

Sancho, все это здорово, но в Nextion без события, просто код не работает. Такая вот бяда. Если к примеру мы изменяем переменную кнопки (val) с помощью команды из UART, то код работать не будет. И даже если тычем на кнопку, а опираемся на переменную, а не на событие нажатия и код находится в основном блоке, тоже не срабатывает.
Как вариант, добавляем таймер, который каждые n милисекунд вызывает событие сработки таймера и уже в него пишем инструкции по условию.
Может конечно я чего то не понял, но у меня по другому не получилось.
Просвети если в курсах.

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Панель Nextion. Код или/или

#9

Сообщение Siberian » 05.12.2020{, 17:51}

Не работает, пробовал по всяко-разному...

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Панель Nextion. Код или/или

#10

Сообщение Dryundel » 05.12.2020{, 17:56}

Siberian писал(а):
05.12.2020{, 17:51}
Не работает, пробовал по всяко-разному...
Дык описывайте конкретно ситуацию, не кодом, а на пальцах, что хотите сделать.

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Панель Nextion. Код или/или

#11

Сообщение Siberian » 05.12.2020{, 19:06}

Мне нужно, чтобы не прописывать постоянно в else if одно и тоже:
t0.txt="77"
t1.txt="77"
t2.txt="77"
t3.txt="77"
а просто перечислить, если bt0.val==1 или bt1.val==1, или bt2.val==1, то в результате будет
t0.txt="77"
t1.txt="77"
t2.txt="77"
t3.txt="77"
Код нужно прописывать не в кнопках, а в таймере.
Пример во вложении, только в нем постоянное перечисление в else if, то, от чего я хочу избавиться.
Вложения
_Test_.HMI
(1.03 МБ) 28 скачиваний

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Панель Nextion. Код или/или

#12

Сообщение Dryundel » 05.12.2020{, 19:33}

Siberian, ну вот, давно бы так.
Держи -
_Test_NEW.HMI
(1.02 МБ) 35 скачиваний
Так ты хотел?

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Панель Nextion. Код или/или

#13

Сообщение Siberian » 05.12.2020{, 19:52}

Dryundel, Спасибо!
Я когда гуглил, то не совсем въехал в функции, поэтому и задал такой вопрос.
Сейчас объясню в коде.

Код: Выделить всё

if(bt0.val==1&&bt1.val==1&&bt2.val==1) // первый вариант
if(bt0.val==1||bt1.val==1||bt2.val==1) // второй вариант
Я понял, что ( && ) и ( || ) это одно и тоже, но оказалось не совсем так.
Если на пальцах, то в первом варианте должны быть все кнопки одновременно val=1,
А во втором варианте любая из этих кнопок val=1.

Еще раз Спасибо!

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Панель Nextion. Код или/или

#14

Сообщение Dryundel » 05.12.2020{, 20:04}

Siberian писал(а):
05.12.2020{, 19:52}
Dryundel, Спасибо!
........
Еще раз Спасибо!
Siberian, нарушаете правила форума. П.п. 2.12
Вроде не новичок.
:)

Аватара пользователя
Siberian
Лейтенант
Сообщения: 475
Зарегистрирован: 07.09.2015{, 11:51}
Репутация: 8
Откуда: СССР
Имя: Александр

Панель Nextion. Код или/или

#15

Сообщение Siberian » 05.12.2020{, 20:07}

Dryundel писал(а):
05.12.2020{, 20:04}
Siberian писал(а):
05.12.2020{, 19:52}
Dryundel, Спасибо!
........
Еще раз Спасибо!
Siberian, нарушаете правила форума. П.п. 2.12
Вроде не новичок.
:)
Будем считать мелким нарушением... :)

Ответить

Вернуться в «Спросить у знатоков»