Форум ModelldepO

Форум ModelldepO (http://forum.modelldepo.ru/index.php)
-   Arduino (http://forum.modelldepo.ru/forumdisplay.php?f=220)
-   -   A21 + дисплей Nextion (http://forum.modelldepo.ru/showthread.php?t=19868)

laba 21.03.2019 14:14

A21 + дисплей Nextion
 
Вложений: 14
Решил всё-таки выделить в отдельную тему, т.к. история получилась с продолжением.
Как говорится, аппетит приходит во время еды.
Начало было здесь.
В ходе дальнейшей интеграции дисплея, в процесс управления полкой, родилась идея расширения возможностей по управлению A21, при помощи него.
Концепция складывается следующая..........
После стартовой заставки открывается главный экран.

http://forum.modelldepo.ru/attachmen...1&d=1553165104

В верхней части расположено окно, где выводится ток бустера(красные цифры).
Чуть ниже расположена кнопка вкл/выкл бустера, которая имеет несколько функций, по аналогии с кнопкой на Z21.

http://forum.modelldepo.ru/attachmen...1&d=1553165104

Длительное нажатие на неё, в режиме выключенного бустера, вызывает программную перезагрузку Ардуино, а короткое нажатие, включит бустер станции. При этом кнопка изменит свой цвет с синего на красный.
В режиме включенного бустера, длительное нажатие на кнопку выключит его(кнопка снова станет синей), а короткое нажатие, переведёт станцию в режим экстренной остановки. При этом, рядом с кнопкой, появится соответствующий значок.

http://forum.modelldepo.ru/attachmen...1&d=1553165104

Также в этой области будут отображаться другие состояния станции.
При коротком замыкании там отобразится значок К.З.

http://forum.modelldepo.ru/attachmen...1&d=1553165104

А при программировании, значок сервисного режима

http://forum.modelldepo.ru/attachmen...1&d=1553165104

Из главного меню, нажав на соответствующий значок, можно попасть на следующие страницы дисплея:

1. Управления стрелками

http://forum.modelldepo.ru/attachmen...1&d=1553165104

2. Записи и чтения CV

http://forum.modelldepo.ru/attachmen...1&d=1553165104

3. Управления локомотивом

http://forum.modelldepo.ru/attachmen...1&d=1553165104

5. Подменю управления функциями полки(икнока с горящим фонарём),

http://forum.modelldepo.ru/attachmen...1&d=1553165104

откуда можно попасть на следующие страницы:
а. Страница выбора RGB пресетов

http://forum.modelldepo.ru/attachmen...1&d=1553165104

б. Страница ручной настройки и записи пресетов

http://forum.modelldepo.ru/attachmen...1&d=1553165104

в. Страница управления реле и прочее

http://forum.modelldepo.ru/attachmen...1&d=1553165104

Ввод стрелочных и локомотивных адресов, а также номера CV и его значения, осуществляется с помощью виртуальной клавиатуры, которая появляется, при нажатии на экране, в зоне соответствующих числовых полей.

http://forum.modelldepo.ru/attachmen...1&d=1553165104

Возврат в главное меню и подменю управления полкой, осуществляется нажатием на эту область экрана:

http://forum.modelldepo.ru/attachmen...1&d=1553167993

Как-то так пока.....

laba 27.03.2019 16:55

Вложений: 1
Есть кое-какие результаты.......
Функционал управления A21 почти полностью реализован. Единственное, что есть мысль сделать страницу с некой библиотекой локов, из которой можно было бы выбирать лок для управления или настройки.
Весь скетч для A21 выкладывать не буду, т.к. он есть в соседней теме и кроме того ещё там ещё есть чего подчистить.
Для любителей поковыряться выложу кусок кода, которые парсит сообщения от дисплея.
Этот код помещается в Loop.
Скрытый текст
//-------------------- Функция программного сброса(перевод стека в начало програмного кода) -----------
void (*resetFunc)(void) = 0;//Программа начинает исполнятся с самого начала
//-----------------------------------------------------------------------------------------------------
if(Serial2.available()>0){// Если есть данные принятые от дисплея, то
String inString; // Объявляем строку для получения этих данных
int intVal=0;
int intVal2=0;
while (Serial2.available()) {
char inChar = Serial2.read(); delay(2);
inString += inChar;
//if (inChar=='\n')inString="";//конец строки - обнуляем строку
if (inChar == '#') {
String ID_command = getValue(inString, ':', 0);// ID команды
String val = getValue(inString, ':', 1);// значение
String sub_val = getValue(inString, ':', 2);// subID команды
intVal = val.toInt();// перевод строки в числовое значение
if(sub_val=="#")Serial.println("No sub_val!!! ");
else{
intVal2 = sub_val.toInt();// перевод строки в числовое значение
Serial.print("sub_val: ");
Serial.println(intVal2,DEC);}
inString="";
if(ID_command.equals("LAdr")){// если получили адрес лока, записываем его в переменную адреса
LocAddress = intVal;
Speed = intVal2;
notifyz21LocoSpeed(LocAddress, Speed, 28);
}
else if(ID_command.equals("FL")){// если получили команду вкл/выкл света
//Func_State = intVal;
notifyz21LocoFkt(LocAddress, intVal, 0);
}
else if(ID_command.equals("F")){// если получили команду вкл/выкл F
Serial.print("F");
Serial.print(intVal,DEC);// номер функции
Serial.print(" state ");
Serial.println(intVal2,DEC);// состояние функции
notifyz21LocoFkt(LocAddress, intVal2, intVal);
}
else if(ID_command.equals("ON")){// если получили команду "ON"
globalPower(csNormal);//
}
else if(ID_command.equals("OFF")){// если получили команду "OFF"
globalPower(csTrackVoltageOff);//
}
else if(ID_command.equals("ESTOP")){// если получили команду "ESTOP"
globalPower(csEmergencyStop);//
}
else if(ID_command.equals("RESET")){// если получили команду "RESET"
page_0();//отправляем команду дисплею, для отображения стартовой заставки
resetFunc();//вызываем функцию программного сброса
}
else if(ID_command.equals("ReadCV")){// если получили команду чтения CV
CV = intVal;
notifyz21CVREAD(0, CV-1);//читаем CV
}
else if(ID_command.equals("WriteCV")){// если получили команду записи CV
CV = intVal;
notifyz21CVWRITE(0, CV-1, intVal2);//пишем CV
}
else if(ID_command.equals("SW_R")){//
notifyz21Accessory(intVal, 1, 1);
}
else if(ID_command.equals("SW_G")){//
notifyz21Accessory(intVal, 0, 1);
}
}
// else if(inChar == '&'){
//Serial.print("RGB_Command: ");
//Serial.println(inString);}
}
}


Структура сообщения от дисплея следующая:
<Буквенный префикс><разделитель{:}><первое числовое значение><разделитель{:}><второе числовое значение><разделитель{:}><символ окончания строки(#)>
Например, имеем сообщение: LAdr:3:27:#
LAdr - сообщение относится к управлению локомотивом
3 - адрес декодера
27 - скорость
# - при получении этого символа, A21 обрабатывает полученные данные.
Несколько сообщений могут идти друг за другом.
LAdr:3:27:#FL:1:#F:1:1:#
Это сообщение отправит на лок с адресом 3, команду установки 27 шагов скорости, с включением головного освещения и активации F1.

Также ещё потребуется добавить в скетч, вне Loop, функцию парсинга сообщений от дисплея:
Скрытый текст
// Функция парсинга строки
String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = {0, -1 };
int maxIndex = data.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex){
found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;}
}
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}

Во вложении, находится проект для дисплея Nextion 3,5 дюйма(480х320), открывается в среде разработки Nextion Edition.

BR95009 27.03.2019 18:01

Круто!!!

А почем сей телевизор нонче?

laba 27.03.2019 18:19

Цитата:

Сообщение от BR95009 (Сообщение 340779)
А почем сей телевизор нонче?

3,5 дюйма около 1600 р. Меньше диагональ брать не стоит, больше - можно, но там и ценник будет другой.

laba 28.03.2019 20:49

Вложений: 5
Цитата:

Сообщение от laba (Сообщение 340778)
Единственное, что есть мысль сделать страницу с некой библиотекой локов

Мысль эта засела очень плотно и посему начала воплощаться в жизнь.
Пока думаю сделать следующим образом.....
На стартовой странице, нажимаем иконку с логотипом A21.

http://forum.modelldepo.ru/attachmen...4&d=1553794432

Открывается страница со списком или же с иконками локомотивов.

http://forum.modelldepo.ru/attachmen...1&d=1553794433

http://forum.modelldepo.ru/attachmen...1&d=1553794433

Выбираем нужный нам локомотив, нажав на соответствующую область дисплея, в результате чего, откроется карточка локомотива.

http://forum.modelldepo.ru/attachmen...1&d=1553794433

В нижней части карточки, есть поле, в котором будет отображаться некая информация о локомотиве, возможно в режиме бегущей строки. Если извратиться, то можно и аудиогид приделать, чтобы он рассказал краткую историю прототипа и самой модели, но это уже на десерт.

Чтобы выбрать локомотив для управления, нажимаем на область с картинкой локомотива, при этом переходим на страницу управления локом, куда автоматически прописывается адрес декодера этого локомотива.

http://forum.modelldepo.ru/attachmen...1&d=1553794433

Вообщем пока как-то так......

Max63 28.03.2019 21:04

Very interesting project, good work! I wrote from Italy and read the post with automatic translation, sorry for mistake.
Can't wait to see the work done, I've make a wireless controller for the DCC++ central station with Nextion lcd panel, you can see the demo on youtube (don't know if I can post the link).
Very interesting project, good work!
Massimo from Italy

https://www.youtube.com/watch?v=_ZNKBvOV-C4

Очень интересный проект, хорошая работа! Я написал из Италии и прочитал пост с автоматическим переводом, извините за ошибку.
Не могу дождаться, чтобы увидеть проделанную работу, я сделал беспроводной контроллер для центральной станции DCC ++ с панелью Nextion lcd, вы можете увидеть демо на YouTube (не знаю, смогу ли я опубликовать ссылку).
Большое спасибо за вашу работу.

laba 01.04.2019 20:35

Вроде бы все хотелки реализовал, в той или иной мере. Память в дисплее подходит к концу. Поэтому текстовые сообщения для карточек локомотивов, будут храниться в А21 и отправляться в дисплей по его запросу. С этим связан небольшой косяк, с передачей символов кириллицы из Ардуино в дисплей. Если отправлять их в чистом виде, то на дисплее будут отображаться "крякозябры". Поэтому сначала русский текст нужно перевести в коды символов, потом вбивать их в скетч и отправлять эти массивы, по запросу в дисплей.
Возможно есть какой-то вариант по-проще, но мне для этого не хватает знаний, а может и желания.
Ещё пока не знаю, как красиво реализовать изменения этих массивов с кодами, "на лету", допустим при изменении того или иного значения CV, при программировании декодера. А вообще конечно шрифты в дисплее оставляют желать лучшего.

P.S. Крайние варианты скетча для A21 и проекта для дисплея, выложу позднее, когда более-менее причешу их и откомментирую.

Anatole 01.04.2019 20:57

У Вас избыточность визуальной информации. Я специально от этого уходил

---------- Сообщение добавлено в 20:52 ---------- Предыдущие сообщение было в 20:50 ----------

В SQL проще реализовать. Лично мне нужно проще

---------- Сообщение добавлено в 20:57 ---------- Предыдущие сообщение было в 20:52 ----------

Управление стрелками у меня только на планшете, смартфон маловат. Забавно вшло с обратной связью от поезда к стрелке и обратно. Фигня в необходимости ставить на поезда оптопары на приём и передачу

pandrey 01.04.2019 22:35

Anatole, как то больно витиевато Вы толкуете. О чем речь то?

BR95009 01.04.2019 23:24

Подожди, Андрей, не спугни. Судя по тексту, треад обещает быть томным.:)

Уже одни только слова SQL и оптопара в одном предложении уже интересно

laba 01.04.2019 23:34

Цитата:

Сообщение от Anatole (Сообщение 341167)
У Вас избыточность визуальной информации. Я специально от этого уходил

Каждому своё.....
оффтопик

---------- Сообщение добавлено в 23:34 ---------- Предыдущие сообщение было в 23:27 ----------

Цитата:

Сообщение от pandrey (Сообщение 341183)
О чем речь то?

Цитата:

Сообщение от BR95009 (Сообщение 341185)
Подожди, Андрей, не спугни

оффтопик

via982 02.04.2019 12:26

Цитата:

Сообщение от Anatole (Сообщение 341167)
У Вас избыточность визуальной информации. Я специально от этого уходил

Смысл тогда за Некстион кучу бабла отваливать? Дуня, клава 4х4 и LCD символьник 20х4 - дешево и сердито. А сам факт применения графического дисплея с хорошим разрешением подразумевает в итоге "финтифлюшки, свистелки и перделки" в смысле оформления интерфейса...

Anatole 03.04.2019 22:43

Не обижайтесь. Я имел в виду избыточность цветовой информации, на мой взгляд. У меня на смартфоне Блютузка элементарная - только управление поездами и программирование по NMRA, на планшет я добавил управление стрелками, тоже по Блютузу. А на Raspberry и Windows уже полный комплект. Единственное, наворотил я в общении поездов со стрелками и т.п., Свето и фотодиоды ИК... осилю/
Кстати, я действительно у Вас тоже кое-что позаимствовал из функций на дисплее, да и сой облагородил

pandrey 05.04.2019 08:26

Цитата:

Сообщение от Anatole (Сообщение 341321)
А на Raspberry и Windows уже полный комплект

Вероятно я упускаю что то, но подскажите как?

Max63 23.04.2019 15:11

Цитата:

Сообщение от laba (Сообщение 341165)
PS Versioni estreme dello schizzo per la A21 e il progetto per il display, disposte in seguito, quando più o meno le pettinate e commentate.
__________________

Any news about the software? Have a good work!

james 04.11.2019 17:32

Цитата:

Сообщение от laba (Сообщение 340778)
Во вложении, находится проект для дисплея Nextion 3,5 дюйма(480х320), открывается в среде разработки Nextion Edition.

Hi
I'm writing in english .. sorry for that,because it was hard to know how to make a reply in Russian
I wonder if this last Nextion HMI uses the same sketch 4.79 or you made another one. It would also be important to know which pin to connect Nextion's Tx and Rx to Mega
Thanks for the info and congratulations for the great work

laba 05.11.2019 22:39

Вложений: 2
Цитата:

Сообщение от james (Сообщение 348137)
It would also be important to know which pin to connect Nextion's Tx and Rx to Mega

Serial2

Во вложениях крайние бета-версии ПО. Возможны глюки.

BR95009 05.11.2019 23:32

Цитата:

Сообщение от james (Сообщение 348137)
Hi
I'm writing in english .. sorry for that,because it was hard to know how to make a reply in Russian
I wonder if this last Nextion HMI uses the same sketch 4.79 or you made another one. It would also be important to know which pin to connect Nextion's Tx and Rx to Mega
Thanks for the info and congratulations for the great work

Здравствуй
Я пишу по-английски .. извините за это, потому что было сложно узнать, как ответить на русском.
Интересно, использует ли последний HMI Nextion тот же эскиз 4.79, или вы сделали другой. Также было бы важно знать, какой контакт соединяет Tx и Rx Nextion с Mega
Спасибо за информацию и поздравляю за отличную работу.

---------- Сообщение добавлено в 01:32 ---------- Предыдущие сообщение было в 01:29 ----------

james,

Hello, James, just use google translator. It works nowadays perfectly due to usage of neural network.

Здравствуйте, Джеймс, просто используйте Google Переводчик. В настоящее время он отлично работает благодаря использованию нейронной сети.

james 06.11.2019 13:43

Привет ЛАБА
Спасибо за быстрый ответ и файлы.
Я следил за этим сайтом и нашел много хорошего о DCC. Продолжайте в том же духе.

BR95009 Я думаю, я уже говорю по-русски :)

james 22.01.2020 01:09

Привет лаба (извините мой русский гугл)
Я использовал вашу версию Z21 с помощью Nextion (пост 17), и она отлично работает. Теперь я хочу установить и настроить модуль LDT S88n.
используя стандартные выходы S88n и распиновку, как указано в конфигурации MCU, однако я не добился успеха. В приложении я высылаю описание модуля, чтобы вы знали, если вы его еще не знаете.

Не могли бы вы дать мне свет, где я не прав или почему это не работает.
спасибо

https://www.ldt-infocenter.com/dokuw...d=en:rm-gb-8-n

laba 22.01.2020 19:02

Цитата:

Сообщение от james (Сообщение 352084)
Не могли бы вы дать мне свет, где я не прав или почему это не работает.
спасибо

Привет!
Вот моя схема, которая работает с этим скетчем.
http://forum.modelldepo.ru/attachmen...7&d=1521986725

james 23.01.2020 00:16

Лаба
Я думаю, что вы ошиблись насчет диаграммы. Эта диаграмма для ЖК-дисплея с интерфейсом, а не для Nextion

laba 26.01.2020 22:18

Цитата:

Сообщение от james (Сообщение 352142)
Эта диаграмма для ЖК-дисплея с интерфейсом, а не для Nextion

Вы кажется спрашивали про S88?
Конечно же Nextion подключается по-другому, чем указано на этой схеме, а именно к Serial2.

james 27.01.2020 00:19

Цитата:

Сообщение от laba (Сообщение 352395)
Вы кажется спрашивали про S88?
Конечно же Nextion подключается по-другому, чем указано на этой схеме, а именно к Serial2.

Я не думаю, что я объяснил это правильно. Мне было интересно, есть ли способ подключить этот модуль RM GB 8 N к его коду 4.79 с Nextion непосредственно на Arduino Mega или мне нужен интерфейс

laba 27.01.2020 10:05

У меня мои модули S88 работают, но они DIY, однако имеют стандартный разъём S88-N.


Текущее время: 17:12. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Copyright © ModelldepO.ru 2006 -