Форум ModelldepO  

Вернуться   Форум ModelldepO > Моделизм > Электрика и DCC > Arduino
Ответ
 
Опции темы Опции просмотра
Старый 21.03.2019, 14:14   #1
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,573
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,598
Поблагодарили 4,615 раз(а) в 1,758 сообщениях
Репутация: репутация неоспорима (4883)
По умолчанию A21 + дисплей Nextion

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



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



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



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



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



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

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



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



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



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



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



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



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



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



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



Как-то так пока.....
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!

Последний раз редактировалось laba; 21.03.2019 в 18:31.
laba вне форума   Вверх
14 пользователя(ей) сказали cпасибо:
Старый 27.03.2019, 16:55   #2
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,573
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,598
Поблагодарили 4,615 раз(а) в 1,758 сообщениях
Репутация: репутация неоспорима (4883)
По умолчанию

Есть кое-какие результаты.......
Функционал управления 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.
Вложения:
Тип файла: rar A21_Nextion_Control.rar (3.33 Мб, 8 просмотров)
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!

Последний раз редактировалось laba; 27.03.2019 в 18:20.
laba вне форума   Вверх
6 пользователя(ей) сказали cпасибо:
Старый 27.03.2019, 18:01   #3
BR95009
Mit Volldampf durch Har
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 6,173
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 53 раз(а) в 44 сообщениях
Сказал(а) спасибо: 5,112
Поблагодарили 6,572 раз(а) в 2,236 сообщениях
Репутация: репутация неоспорима (6621)
По умолчанию

Круто!!!

А почем сей телевизор нонче?
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
Пользователь сказал cпасибо:
Старый 27.03.2019, 18:19   #4
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,573
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,598
Поблагодарили 4,615 раз(а) в 1,758 сообщениях
Репутация: репутация неоспорима (4883)
По умолчанию

Цитата:
Сообщение от BR95009 Посмотреть сообщение
А почем сей телевизор нонче?
3,5 дюйма около 1600 р. Меньше диагональ брать не стоит, больше - можно, но там и ценник будет другой.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
2 пользователя(ей) сказали cпасибо:
Старый 28.03.2019, 20:49   #5
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,573
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,598
Поблагодарили 4,615 раз(а) в 1,758 сообщениях
Репутация: репутация неоспорима (4883)
По умолчанию

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



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





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



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

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



Вообщем пока как-то так......
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
9 пользователя(ей) сказали cпасибо:
Старый 28.03.2019, 21:04   #6
Max63
Новичок
 
Регистрация: 28.03.2019
Адрес: Italia
Сообщений: 1
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 1
Поблагодарили 6 раз(а) в 1 сообщении
Репутация: пока неопределено (6)
По умолчанию

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



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

Последний раз редактировалось laba; 28.03.2019 в 22:11.
Max63 вне форума   Вверх
6 пользователя(ей) сказали cпасибо:
Старый 01.04.2019, 20:35   #7
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,573
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,598
Поблагодарили 4,615 раз(а) в 1,758 сообщениях
Репутация: репутация неоспорима (4883)
По умолчанию

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

P.S. Крайние варианты скетча для A21 и проекта для дисплея, выложу позднее, когда более-менее причешу их и откомментирую.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!

Последний раз редактировалось laba; 08.04.2019 в 13:20.
laba вне форума   Вверх
2 пользователя(ей) сказали cпасибо:
Старый 01.04.2019, 20:57   #8
Anatole
Новичок
 
Регистрация: 01.04.2019
Адрес: Москва
Сообщений: 2
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: пока неопределено (0)
По умолчанию

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

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

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

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

Управление стрелками у меня только на планшете, смартфон маловат. Забавно вшло с обратной связью от поезда к стрелке и обратно. Фигня в необходимости ставить на поезда оптопары на приём и передачу
Anatole вне форума   Вверх
Старый 01.04.2019, 22:35   #9
pandrey
Местный
 
Аватар для pandrey
 
Регистрация: 12.01.2010
Адрес: Геленджик
Сообщений: 2,311
Сказал(а) 'не согласен(а)'!: 13
Сказали 'не согласен'! 4 раз(а) в 4 сообщениях
Сказал(а) спасибо: 5,733
Поблагодарили 4,311 раз(а) в 1,082 сообщениях
Репутация: репутация неоспорима (4343)
По умолчанию

Anatole, как то больно витиевато Вы толкуете. О чем речь то?
pandrey вне форума   Вверх
Старый 01.04.2019, 23:24   #10
BR95009
Mit Volldampf durch Har
 
Аватар для BR95009
 
Регистрация: 27.04.2012
Адрес: Msk
Сообщений: 6,173
Сказал(а) 'не согласен(а)'!: 20
Сказали 'не согласен'! 53 раз(а) в 44 сообщениях
Сказал(а) спасибо: 5,112
Поблагодарили 6,572 раз(а) в 2,236 сообщениях
Репутация: репутация неоспорима (6621)
По умолчанию

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

Уже одни только слова SQL и оптопара в одном предложении уже интересно
__________________
H0 - DR/DB, Ep.III + G и H0m - HSB
Московский Модуль H0-присоединяйтесь!
BR95009 вне форума   Вверх
3 пользователя(ей) сказали cпасибо:
Старый 01.04.2019, 23:34   #11
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,573
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,598
Поблагодарили 4,615 раз(а) в 1,758 сообщениях
Репутация: репутация неоспорима (4883)
По умолчанию

Цитата:
Сообщение от Anatole Посмотреть сообщение
У Вас избыточность визуальной информации. Я специально от этого уходил
Каждому своё.....
оффтопик

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

Цитата:
Сообщение от pandrey Посмотреть сообщение
О чем речь то?
Цитата:
Сообщение от BR95009 Посмотреть сообщение
Подожди, Андрей, не спугни
оффтопик
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!

Последний раз редактировалось laba; 08.04.2019 в 13:18.
laba вне форума   Вверх
2 пользователя(ей) сказали cпасибо:
Старый 02.04.2019, 12:26   #12
via982
Заглянувший
 
Регистрация: 27.01.2014
Адрес: Україна, Одеса
Сообщений: 219
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 48
Поблагодарили 605 раз(а) в 139 сообщениях
Репутация: - это имя известно всем (605)
По умолчанию

Цитата:
Сообщение от Anatole Посмотреть сообщение
У Вас избыточность визуальной информации. Я специально от этого уходил
Смысл тогда за Некстион кучу бабла отваливать? Дуня, клава 4х4 и LCD символьник 20х4 - дешево и сердито. А сам факт применения графического дисплея с хорошим разрешением подразумевает в итоге "финтифлюшки, свистелки и перделки" в смысле оформления интерфейса...
via982 вне форума   Вверх
2 пользователя(ей) сказали cпасибо:
Старый 03.04.2019, 22:43   #13
Anatole
Новичок
 
Регистрация: 01.04.2019
Адрес: Москва
Сообщений: 2
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: пока неопределено (0)
По умолчанию

Не обижайтесь. Я имел в виду избыточность цветовой информации, на мой взгляд. У меня на смартфоне Блютузка элементарная - только управление поездами и программирование по NMRA, на планшет я добавил управление стрелками, тоже по Блютузу. А на Raspberry и Windows уже полный комплект. Единственное, наворотил я в общении поездов со стрелками и т.п., Свето и фотодиоды ИК... осилю/
Кстати, я действительно у Вас тоже кое-что позаимствовал из функций на дисплее, да и сой облагородил
Anatole вне форума   Вверх
Старый 05.04.2019, 08:26   #14
pandrey
Местный
 
Аватар для pandrey
 
Регистрация: 12.01.2010
Адрес: Геленджик
Сообщений: 2,311
Сказал(а) 'не согласен(а)'!: 13
Сказали 'не согласен'! 4 раз(а) в 4 сообщениях
Сказал(а) спасибо: 5,733
Поблагодарили 4,311 раз(а) в 1,082 сообщениях
Репутация: репутация неоспорима (4343)
По умолчанию

Цитата:
Сообщение от Anatole Посмотреть сообщение
А на Raspberry и Windows уже полный комплект
Вероятно я упускаю что то, но подскажите как?
pandrey вне форума   Вверх
Пользователь сказал cпасибо:
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


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


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