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

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Аватара пользователя
Siberian
Лейтенант
Сообщения: 635
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 35 раз
Поблагодарили: 5 раз

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

Сообщение Siberian »

Здравствуйте, Коллеги!
В написании кода (С), или другого, я полный бамбук, поэтому прошу помощи у Программистов.
Погуглил, может зрение старческое, или руки кривые... Ничего не нашел.
Если использовать #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
Полковник
Сообщения: 2457
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 6 раз
Поблагодарили: 31 раз

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

Сообщение Dryundel »

Siberian писал(а): 05 дек 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
Лейтенант
Сообщения: 635
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 35 раз
Поблагодарили: 5 раз

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

Сообщение Siberian »

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

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

(Если bt1.val==1, или bt2.val==0, или bt3.val==1)
{
  t1.txt="1"                 // Текст "1"
 }
Аватара пользователя
Dryundel
Полковник
Сообщения: 2457
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 6 раз
Поблагодарили: 31 раз

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

Сообщение Dryundel »

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

Если другой вариант, описывай какой. Как присваиваешь bt1.val единицу, если не нажатием кнопки, тыкая по ней на дисплее?
Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25 янв 2018, 22:23
Откуда: Bukovyna
Имя: Василий

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

Сообщение Labu559 »

Исправился. :smile44:
Последний раз редактировалось Labu559 05 дек 2020, 17:33, всего редактировалось 1 раз.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2457
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 6 раз
Поблагодарили: 31 раз

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

Сообщение Dryundel »

[ref]Labu559[/ref], если бы в Nextion все было бы точно так же как в Arduino IDE, то и вопросов бы у [ref]Siberian[/ref] наверняка не возникло бы.
Суть во первых в том, что Nextion штука событийная.
Во вторых правила кодирования в нем, с легкой руки разработчиков, несколько отличаются. К примеру можете забыть про привычную точку с запятой после инструкции.
И в третьих, Вы куда этот код предлагаете вписать? В какое место?
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

[ref]Siberian[/ref], Описание Nextion
[spoiler]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"
}
[/spoiler]
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2457
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 6 раз
Поблагодарили: 31 раз

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

Сообщение Dryundel »

[ref=#ff8000]Sancho[/ref], все это здорово, но в Nextion без события, просто код не работает. Такая вот бяда. Если к примеру мы изменяем переменную кнопки (val) с помощью команды из UART, то код работать не будет. И даже если тычем на кнопку, а опираемся на переменную, а не на событие нажатия и код находится в основном блоке, тоже не срабатывает.
Как вариант, добавляем таймер, который каждые n милисекунд вызывает событие сработки таймера и уже в него пишем инструкции по условию.
Может конечно я чего то не понял, но у меня по другому не получилось.
Просвети если в курсах.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 635
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 35 раз
Поблагодарили: 5 раз

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

Сообщение Siberian »

Не работает, пробовал по всяко-разному...
Аватара пользователя
Dryundel
Полковник
Сообщения: 2457
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 6 раз
Поблагодарили: 31 раз

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

Сообщение Dryundel »

Siberian писал(а): 05 дек 2020, 17:51 Не работает, пробовал по всяко-разному...
Дык описывайте конкретно ситуацию, не кодом, а на пальцах, что хотите сделать.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 635
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 35 раз
Поблагодарили: 5 раз

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

Сообщение Siberian »

Мне нужно, чтобы не прописывать постоянно в 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, то, от чего я хочу избавиться.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2457
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 6 раз
Поблагодарили: 31 раз

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

Сообщение Dryundel »

[ref]Siberian[/ref], ну вот, давно бы так.
Держи -
_Test_NEW.HMI
Так ты хотел?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Siberian
Лейтенант
Сообщения: 635
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 35 раз
Поблагодарили: 5 раз

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

Сообщение Siberian »

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

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

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
Полковник
Сообщения: 2457
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 6 раз
Поблагодарили: 31 раз

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

Сообщение Dryundel »

Siberian писал(а): 05 дек 2020, 19:52 [ref]Dryundel[/ref], Спасибо!
........
Еще раз Спасибо!
[ref]Siberian[/ref], нарушаете правила форума. П.п. 2.12
Вроде не новичок.
:)
Аватара пользователя
Siberian
Лейтенант
Сообщения: 635
Зарегистрирован: 07 сен 2015, 11:51
Откуда: СССР
Имя: Александр
Благодарил (а): 35 раз
Поблагодарили: 5 раз

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

Сообщение Siberian »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя