Пульт-игра симулятор космического корабля по типу игры «Звёздный патруль»

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Приветствую!

Вдруг кому-то будет интересно.

Суть задумки в следующем.

Сделать небольшой пульт со встроенной электронной игрой наподобие старой текстовой «Стартрек» (один из более поздних вариантов назывался «звёздный патруль»), но с красивым отображением всех элементов.

Примерный внешний вид предполагается таким:

https://s8.hostingkartinok.com/uploads/images/2019/12/8eea325e2ec84d0d3cf54fdfce2edd48.png

Используемые модули обозначены на этой схеме:

https://s8.hostingkartinok.com/uploads/images/2019/12/c260bf5a49510ba3221c40e239657e7d.png

Предполагаемое время исполнения (в упрощённом варианте) – полгода-год.

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

Предыдущее подобное (по назначению, но не по функционалу) изделие было собрано мной без применения цифровых элементов, и поэтому не удалось реализовать очень много из «хотелок».

Долго думал, выбрать MEGA или DUE, всё же решил пока остановится на Меге.

Пока тестирую скетчи на УНО.

Если кто-то дочитал до этого места, то кратко об успехах и фейлах на данный момент.

Успехи:

- освоено подключение и работа с адресными светодиодами (относительно легко)

- освоено подключение и работа с модулем ТМ1638 (относительно легко)

- освоено подключение и работа с клавиатурой PS/2 (не с первого раза, но получилось)

- освоено подключение и работа с экраном 1,8 TFT ST7735 160х128 (получилось не всё, что хотел, но на данный момент этого достаточно)

- освоено подключение и работа с SD card (пока только вывод на экран изображений, без чтения/записи файлов)

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

Фейлы:

- при проверке умудрился сжечь аж три барграфа (жёлтые сегменты) – сам виноват, не посмотрел описание, не думал, что производитель заложил свое напряжение на каждый цвет!!!

- не получилось задействовать ММС карточки – ни одна не заработала, только SD (и те не все). Размерность – все 2 Гб или меньше. Почему не каждая SD карточка работает, так и не понял – форматировал все одинаково. Так или иначе, есть несколько рабочих, пока этого достаточно.

- не получилось ускорить вывод картинки с карточки на экран (полный экран 160х128 выводится примерно за 1 с, что в некоторых ситуациях слишком долго). В результате пока остановился на выводе в «боевом» режиме монохромных картинок, которые выводятся намного быстрее, хотя и занимают место в памяти. Но пока их немного, это не так критично.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Красиво. А куда поставите потом? 

Картинку быстро выводить на дисплей для ардуины - это не просто. Надо контроллер дисплея с двумя страницами искать - пока с одной рефрешится, на другую выводится.

Так же - можно посмотреть в сторону HMI-дисплеев. Часть из них хранят картинки унутре и позволяют просто переключаться между ними.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Вопрос куда ставить для меня сейчас второстепенный, программу бы осилить, чтобы всё работало как надо :)

Вероятнее всего, в какой-нибудь чемоданчик вмонтирую.

По поводу картинки - пробовал менять частоту SPI, но или она не менялась, или это не влияет на скорость вывода (скорее всего второе). Так же пробовал выводить 16 битные картинки вместо 24 битных, но у них оказалась та же скорость вывода (насколько я понял, из-за того, что 24 бита перед выводом преобразуются в 16 бит).

Уменьшение картинки тоже не сильно помогло.

Единственный способ, мной не опробованный, это применить DUE - но такой платы у меня нет. 

А вот монохром реально быстро работает, и мне должно этого хватить для "боя".

Там же, где скорость не критична, можно и подождать 800-1000 мс, пока полноцветная картинка высветится.

sadman41
Offline
Зарегистрирован: 19.10.2016

Я давеча на ютубах смотрел обзоры дисплеев для ардуин - народ высказывает мнение, что проблема в связке МК-SD. Надо стараться этот этап исключить.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

На самом деле, если монохромная картинка с большой степенью заполнения - тоже не сильно быстро выводит. А она в памяти сидит, не на SD.

Учитывая, что одна картинка на полный экран весит 60кБ, вариантов исключить SD я не вижу :)

Даже в базовом варианте картинок будет не один десяток, скорее всего.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Могу на nextion-e (320x240) картинки ваши покрутить - он их у себя в памяти держит, не будет лишних пересылок по spi.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

А "мои" картинки ничем особенным не отличаются в этом плане - обычные 24-битные БМП 160х128 (или меньше, если не полный экран).

Дисплей посмотрел, интересная штука! Стоит только не сильно дёшево. Но это уже не дисплей по сути, а миникомпьютер какой-то :)

И за сколько времени он выводит полный экран (320х240 , 24 бита) из своей памяти?

Хотя он ведь, наверно, не только с BMP форматом может работать.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Сейчас залил обои какие-то в JPG для 240x320 - листает только в путь. FPS глазом не могу измерить, могу видео скинуть - писните на wrk.sadman@gmail.com

По цене там варианты есть.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Alex_Perm пишет:

- при проверке умудрился сжечь аж три барграфа (жёлтые сегменты) – сам виноват, не посмотрел описание, не думал, что производитель заложил свое напряжение на каждый цвет!!!

Свое напряжение на каждый цвет заложила природа. Она и является производителем? Вы эти барграфы с дерева сорвали?

Однако, если посмотреть на Вашу схему, они не должна были гореть ни в каком случае - пофиг на напряжения. 7219 (если правильно подключена) обеспечит им правильный ток. Что-то здесь не так.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Я посмотрел, пишут про 20 кадров в секунду.

Для следующих проектов буду иметь ввиду. Но это по сути не ардуино уже, хотя его можно с ним подружить.

И не до конца понял, можно там SD использовать кроме как для прошивки или нет.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

ЕвгенийП пишет:

Свое напряжение на каждый цвет заложила природа. Она и является производителем? Вы эти барграфы с дерева сорвали?

Ну я как-то избаловался в последнее время, привык, что современные и зелёные и красные и белые светодиоды обычно не сгорают от 2,8 в.

А тут поди ж ты... конфуз.

Производитель мог бы токоограничительные резисторы добавить внутрь. Но видно, у него свои резоны.

Говорю ж, сам виноват.

ЕвгенийП пишет:

Однако, если посмотреть на Вашу схему, они не должна были гореть ни в каком случае - пофиг на напряжения. 7219 (если правильно подключена) обеспечит им правильный ток. Что-то здесь не так.

Вы совершенно правы. Я сжег их при проверке пайки, ещё до подключения к 7219 :(

Которую, кстати, пока ещё не подключал, потому что не закончил паять "барграфную" плату.

Впрочем, это не та тема, которая стоит обсуждения, я упомянул лишь затем, чтобы кто-нибудь не наступил на те же грабли.

sadman41
Offline
Зарегистрирован: 19.10.2016

Почему это - не Arduino? Я с Nano листал картинки. Скетч накидать - 15 минут (с заливкой картинок в дисплей).

Максимальная скорость (без дилеев в лупе): https://yadi.sk/i/-80ucDnVfLZ95w

Конкретно в Nextion SD для замены прошивки, в которой хранятся картинки. В других HMI есть и варианты хранения на SD вроде бы. Для разового проекта это не сильно дорого, если учесть, что можно Мегу сразу поменять на что-то более мелкое. А ежели ещё покопаться в китайских аналогах...

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Если я правильно понял, там своя среда разработки, и оно может работать само без всяких Ардуин.

У меня стоимость электроники для проекта примерно 3 тыр (естественно, считая цены с али), а тут один экранчик в районе 1000 (тоже с али). 

Для дисплей-ориентированных проектов, конечно, он больше подходит.

Насчёт замены Меги - я опасаюсь, как бы её ОЗУ не оказалось слишком маленьким... в основном из-за этого и думал про DUE, но пока не решился.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Дело хозяйское, не уговариваю. Более простого варианта для подобной скорости наврядли найдёте. А если ещё и DUE начнёте покупать -- вообще бессмысленно растратите бюджет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Странно, если

Alex_Perm пишет:
с электроникой знаком не первый год
То откуда же
Alex_Perm пишет:
современные и зелёные и красные и белые светодиоды обычно не сгорают от 2,8 в.
они и от 28В не сгорают, если правильный ток выставить, разве нет? И уж, тем более
Alex_Perm пишет:
Производитель мог бы токоограничительные резисторы добавить внутрь
Ну, вот скажите, как бы он мог добавить туда резисторы, если он не знает какое Вы будете подавать напряжение - 3В или 33В? Как? Какие резисторы?

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Мне не хотелось бы развивать эту тему, но всё же отвечу.

Управлять током (и яркостью) на светодиоде можно как источником напряжения, так и источником тока (ваш КО).

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

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

Тогда, поставив последовательно с красным светодиодом резистор на 36 Ом (падение напряжения на нём будет 1.8 вольт), мы получим, что при подаче 3.8 вольт на прибор оба светодиода будут гореть с максимальной яркостью.

Больше 3.8 вольт подавать непосредственно на прибор нельзя, ибо сгорит уже и синий светодиод. 

Если же мы хотим яркость уменьшить, то подадим меньше 3.8 вольт при управлении источником напряжения, или уменьшим ток при управлении источником тока.

Вот пример трехцветного диода, у которого все цвета запитаны от одного напряжения:

http://dalincom.ru/goods-10248.html

Конечно, там внутри не только три диода, а ещё много всего. Но пользователю достаточно подать 3,2 вольта, чтобы он заработал, несмотря на то, что цвета разные.

А вот у этого трёхцветного диода, как и в барграфе, разные максимальные напряжения:

https://www.chipdip.ru/product/bl-l515rgbw-cc

Теперь-то я понимаю, что производитель барграфа рассчитывал на то, что его прибором будут управлять источником тока, а в этом случае внутренние резисторы не нужны и даже лишние.

Но это послезнание. 

Надеюсь, я ответил на вопрос и тему на этом можно закрыть.

 

 

 

 

 

 

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

sadman41 пишет:

Дело хозяйское, не уговариваю. Более простого варианта для подобной скорости наврядли найдёте. А если ещё и DUE начнёте покупать -- вообще бессмысленно растратите бюджет.

Ну, честно говоря, на Али разница между Мега и DUE рублей 300, если не меньше (примерно 500 против 800).

Учитывая разницу в частоте в 5 раз и объёме памяти ОЗУ в 12 раз, это даже не смешно.

В основном меня отпугивает несовместимость библиотек. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Alex_Perm пишет:

Ну, честно говоря, на Али разница между Мега и DUE рублей 300, если не меньше (примерно 500 против 800).

Учитывая разницу в частоте в 5 раз и объёме памяти ОЗУ в 12 раз, это даже не смешно.

В основном меня отпугивает несовместимость библиотек. 

https://www.arduino.cc/en/Guide/ArduinoDue#toc11 -> The microcontroller mounted on the Arduino Due runs at 3.3V, this means that you can power your sensors and drive your actuartors only with 3.3V. Connecting higher voltages, like the 5V commonly used with the other Arduino boards will damage the Due.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Да, вот эти вот 3,3 В вместо 5 В тоже слегка напрягают, но это при необходимости можно решить, поставив преобразователь уровня. В моём проекте их понадобится два (для 7219 и для PS/2). 

Хотя встречал инфу, что 7219 и от 3,3 В работает.

Так же, тут пишут, что и PS/2 работает с 3,3 В:

https://forum.arduino.cc/index.php?topic=393453.0

Всё остальное вроде нормально должно работать и с 3,3 В логикой.

С другой стороны, экран я сейчас подключаю через резисторы, хотя и пишут, что можно без них. 

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Ну вот, запрограммировал блок навигации - движение по системе, между системами, отображение планет(баз), врагов, звёзд.

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

Отображение на радаре, карте галактики и сканере.

Есть и отображение состояния систем барграфами, но пока ещё не проверял его на железе.

Начал программировать боевой блок.

Пока удалось сделать стрельбу лазерами по 4-м направлениям и "залочивание" конкретного врага.

Навигационный блок + начало боевого заняли 40% флэш и 40% ОЗУ.

Вывод на экран пока не добавил, поскольку скетч только вывода с карточки на экран + 2 маленьких картинки во флэше занимает примерно 66% флэш и 46% ОЗУ. То есть вместе они тупо не влезут. Заказал мегу, когда приедет - тогда буду объединять.

 

Столкнулся с несколько неприятным моментом при подключении клавиатуры.

В самый первый раз никаких реакций на клавиши не было.

Добавил вывод переменных в сом-порт, чтобы посмотреть их состояние.

Увидел, что они меняются, при этом клавиатура заработала!!!

Решил, что был глюк - убрал вывод. Работать перестала.

Задумался.

Вместо вывода переменных в сом-порт ввёл задержку 50 мс. Заработало!!!

Так и не понял пока,  в чем дело, подозреваю, что в библиотеке.

Но лезть туда не стал, ибо для проекта это не фатально, хотя delay в loop-е мне не нравится, даже сокращённый до 30 мс.

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

Возможно, это связано с длинным проводом от клавиатуры.

Когда доделаю всё остальное, надо будет поразбираться с этим.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Alex_Perm пишет:

- не получилось ускорить вывод картинки с карточки на экран (полный экран 160х128 выводится примерно за 1 с, что в некоторых ситуациях слишком долго).

Alex_Perm пишет:

А "мои" картинки ничем особенным не отличаются в этом плане - обычные 24-битные БМП 160х128 (или меньше, если не полный экран).

IMHO Ваша проблема в попытках использовать для Ардуино стандартный формат хранения картинок.

Как правило, цветные дисплеи для Ардуино имеют аппаратные средства для ускорения вывода прямоугольных картинок. Посмотрите по дэйташиту на конкретный дисплейный контроллер, что на него надо отправлять для максимально быстрого вывода, и на ПК перекодируйте Ваши BMP  формат оптмимальный для отображения на дисплее. Ардуина должна читать с карточки файл побайтно и тут же отправлять его на дисплей без перекодировки, тогда будет быстро. Хотя, если и карточка и дисплей подключены по одному интерфейсу (SPI), то, возможно, читать и отправлять на дисплей следует блоками оптимального размера.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Спасибо, но боюсь, пока я не настолько поднаторел, чтобы напрямую работать с контроллером, без библиотеки.

Карточка и дисплей действительно подключены по одному интерфейсу (SPI), но мои попытки изменить размер блока не дали результата в плане увеличения скорости вывода.

Я думаю, что для этого проекта мне хватит монохромных картинок (в "боевом" режиме), тем более, что можно их выводить разными цветами.

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

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Для тех, у кого не пропал интерес к теме.

Пора подвести некоторые итоги.

Практически запрограммирована базовая версия (есть планы добавить кое-какие свистелки, но работает и так).

Что удалось:

- работает передвижение на маршевом и импульсном двигателях по системе и галактике, в том числе корректно отрабатывает аварийное торможение;

- работает стыковка с базой, пополнение боекомплекта, ремонт, пополнение энергией;

- работает индикация карты галактики (в трёх режимах), индикация состояния системы, индикация на "дальнем сканере" (в двух режимах);

- работает индикация состояния систем на разноцветных барграфах, а так же индикация уровня защитного поля на красных барграфах;

- работают лазеры и ракеты, в том числе мне удалось (сам не ожидал!) сделать режим управления ракетой после пуска;

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

- повреждённые системы корабля работают хуже (в основном), при достижении «красного» уровня перестают работать;

- реализован примитивный авторемонт (без ремонтных дронов, просто выбираешь систему и она начинает ремонтироваться с затратами энергии), так как матрица для отображения дронов приехала только на днях;

- интегрирована программа отображения на многоцелевом экране «захваченных» («залоченных») врагов, приветствий, сообщений о победе/поражении, текущем времени и т.д. Для этого перешёл с Ардуино Уно на Мегу. Переход был не без проблем, довольно неожиданно;

- добавлен примитивный звук на пищалке для некоторых событий (выстрел, стыковка, попадание в корабль);

- получилось считывать карту галактики с карточки, что позволяет залить на неё много разных карт и выбирать случайным образом карту в каждой новой игре;

Что не удалось:

- попробовал заменить библиотеку для клавиатуры на скетч, скачанный из сети. Отдельно скетч работает, но как только я вставляю его в свой – сразу начинается ерунда, вместо скан-кодов считывает фигню. Разбираться не стал, поскольку есть работающий вариант, а дел ещё много.

Что планирую:

- начать подготовку к упаковыванию всего этого в корпус. Пока думаю над окончательным вариантом интерфейса;

- сделать покупку улучшений за очки, набранные посредством уничтожения вражеских кораблей;

- сделать ремонт с помощью дронов: выбор системы, назначение на неё ремонтного дрона, отображение;

- сделать несколько карт галактики разных уровней сложности;

- сделать графическое отображение состояния систем при помощи 3-х светодиодных колец.

Пока не сделал «ложные цели» и «фазерный конвектор», обдумываю их необходимость в игре.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Хм, давненько я тут не писал.

Ну что ж, можно считать, что базовое программирование закончено.

Мало того, сделана и очень значительная часть расширенного.

На сегодняшний день ситуация следующая.

Из игровой механики пока нет миссий и абордажа. Ну и нет голосовых сообщений.

Навигация, бои, ремонт систем с помощью дроидов, покупка 20+ апгрейдов и модулей для корабля, торговля (перевозка товаров между планетами), добыча руды на астероидах - присутствуют.

Начерно упаковал всё в чемоданчик. 

Из-за карантина пришлось ограничиться банальной ДВП вместо панелей с отверстиями, вырезанными лазером,  - когда появится возможность их закзать, пока неясно.

Поскольку я сижу дома, то кое-что по монтажу придётся доделывать потом, когда появится доступ к нормальному рабочему месту и инструментам.

Для тех, кто нашел в себе силы и дочитал до конца, картинка предыдущего, аналогового пульта:

https://s8.hostingkartinok.com/uploads/images/2020/04/217ffe46431091e3403343abb4cb5c95.jpg

 

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Попробовал сделать озвучку с помощью  вот этого:

http://xn--80ai9an.xn--p1ai/product/1140

Работать - работает, но к сожалению, очень большая задержка между командой и воспроизведением звука.

Для диалогов на планете и неспешных сообщений покатит, но для боя недостаточно.

Попытка увеличить скорость порта не увенчалась успехом.

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

 

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

восхищаюсь упорством и находчивостью ТС, только не могу никак понять : а нафига?

нафига вообще и нафига именно на этом железе.

Конечно же наикрутейше, только вот вспоминается классик.

Она ж хрипит, она же грязная,

И глаз подбит, и ноги разные,

Всегда одета как уборщица…

— Плевать на это — очень хочется!

 
Alex_Perm
Offline
Зарегистрирован: 14.12.2019

inspiritus пишет:

нафига вообще 

На этот вопрос ответ можно получить, пройдя по этим ссылкам:

https://imgur.com/a/Mgq2v

https://hi-news.ru/entertainment/amerikanec-postroil-dlya-svoix-detej-polnocennyj-kosmicheskij-simulyator.html

У меня мотивы примерно такие же. Но поскольку я не так крут и не настолько богат, то решил компенсировать насыщенной игровой механикой.

inspiritus пишет:

нафига именно на этом железе.

А на чём ещё? 
Я же не программист. Все 1,5 предыдущих проекта, которые я делал на ардуине, умещались в один экран практически.
Ардуино для меня привлекателен тем, что по нему есть куча библиотек, куча статей как и что, и простотой программирования.
 
Тут недавно по работе хотел сделать портативный переносный калибровочный генератор на ардуине.
Однокашник посоветовал сделать на STM32.
У меня сложилось ощущение, что ардуино по сравнению с STM - просто детская забава. И что если бы он мне не помог, то я разбирался бы месяц или два, просто как его вообще программировать. Возможно, это неверное ощущение.
 
И кстати, железо не такое уж плохое оказалось - почти всё сделано и работает, а памяти занято 30%. То есть вполне можно ещё добавить много чего. И это всего лишь мега. 
 
"В награду за терпение" пара фоток уже цифрового макета:
 
 
 
Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Приветствую тех, кто следит за этой темой (если таковые ещё остались :)).

Пожалуй, можно сказать, что этап программирования завершён (по крайней мере, на время).

Мне всё же удалось добиться приемлемой скорости включения звука (оказалось, достаточно всего лишь поменять карточку - на первой, вероятно, было слишком много файлов, из-за чего они медленно открывались).

Так что сейчас присутствует нормальная озвучка + голосовые сообщения + музыка.

Абордаж тоже теперь есть, как и 2 вида рутинных миссий и 4 уникальных миссии.
Всего за игровую сессию есть возможность выполнить 12 миссий.

В процессе прикручивания миссий выяснил, что 64-битные переменные в ардуине не работают (ну, или я не знаю, как их правильно готовить).

Теперь немного о грустном. 

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

Пока я не могу понять, в чем причина, потому что ошибок при компиляции нет, памяти используется менее чем треть, а динамическое выделение памяти я не использовал (правда, оно используется в готовой библиотеке).

Поэтому не удалось реализовать корабли NPC (которые не враги, а типа нейтралы) с их заданиями и т.д.

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

То, что в итоге получилось выполнить более 90% задуманного, пожалуй, можно считать небольшим чудом. 

Спасибо за участие тем, кто откликнулся!

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

А корованы грабить можно? Или это во второй версии только будет?

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

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

Поэтому нет, корованы грабить нельзя. И вообще тут только за хороших можно играть!

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

К сожалению, пока только двух видов. 

sadman41
Offline
Зарегистрирован: 19.10.2016

uint64_t variableBigBig - 64bit.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

uint64_t - я такую и пытался сделать. Не заработало :(

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Работает, но не везде. Складывать умеет, а вот print() ее не тянет.
Так что формально она есть, но пользоваться ей с умом надобно.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Я хотел использовать её исключительно для хранения флагов.

64 бита - 64 флага. 

Пришлось 2 32-битных, что несколько менее удобно.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Положите флаги в структуру ( struct {...} ) - и хоть по биту, хоть по байту адресуйте. Ещё и с удобными именами флагов.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

В данном случае мне имена не нужны были. 64 миссии по номерам - как раз 64 бита.

Но за совет спасибо, возможно в будущем и применю. 

Поскольку я новичок, то пока решил со структурами не связываться - там довольно легко запутаться, на мой взгляд.

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Тогда массив байтовый, 64 элемента в длину, по необходимости - увеличить в ширину (двумерный). Тоже проще, чем с битовыми операциями морочаться. Бегать хоть for-ом, хоть счётчиком.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Я не совсем понял. Байтовый массив  64 элемента в длину, ведь будет занимать 64 байта, так?

А 2 32-битных (или 1 64-битный) - 4 байта. В 16 раз меньше. Или имелось ввиду что-то другое?

sadman41
Offline
Зарегистрирован: 19.10.2016

А, ну да. Что-то я о своем.

Битовые операции с uint64 тоже не проходят? Я этой размерностью не пользовался сильно, но, полагаю что штатные для GCC операции должны успешно проводится.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:
Битовые операции с uint64 тоже не проходят?
Да, нет, нормально там всё. Только маски нужно правильно записывать. Думаю, что у ТС проблема была именно с этим.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Я вот эти две команды использую:

bitSet(mission1_compl_a, mission_typ-1);

и

miss_temp=bitRead(mission1_compl_a,priv_coord); 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Alex_Perm пишет:

В данном случае мне имена не нужны были. 64 миссии по номерам - как раз 64 бита.

А мне всегда казалось, что 64 штуки по номерам - это 6 бит, а не 64.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

64 флага в 6 битах? Нет, я так пока не умею :( 

Это очень сильное колдунство (с)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Alex_Perm пишет:

Я вот эти две команды использую:

bitSet(mission1_compl_a, mission_typ-1);

и

miss_temp=bitRead(mission1_compl_a,priv_coord); 

Что-то подобное я и предполагал. Зачем же их использовать с 64-битной переменной? Вы их вообще видели? Посмотрите:

#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
#define bitSet(value, bit) ((value) |= (1UL << (bit)))

С чего бы им работать правильно?

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Ну так они  и не заработали :)

"Не прокатило". 

Поскольку ситуация позволяла обойтись без них, просто обошёлся 32-битными.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Ну вот, кажется мне всё-таки удалось доделать то немногое, что хотел, но не получалось.

Перечитал статью Евгения про память, предположил, что где-то происходит назначение за пределами массива.

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

Теперь в игре есть корабли NPC (которые не враги, а типа нейтралы) с их заданиями, иногда встречается галактический патруль, ну и ещё немного всякого, не то чтобы важного, но приятного.

Возможно, ещё придётся повылавливать баги, но основная работа уже сделана. Памяти МК заняло чуть больше трети.
Строк получилось около 7500, не считая картинок (не знаю, много это или мало).

Осталось наклепать карт и привести панели к нормальному внешнему виду.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Ну что, если кто-то ещё следит за темой - проект близок к завершению.

Мне удалось заказать панели, и я перемонтировал туда кнопки и другие компоненты.

https://s8.hostingkartinok.com/uploads/images/2020/09/a6522a02e843df5ef7...

Заодно немного допилил скетч, добавив 2-й индикатор, тумблеры и ещё всякое по мелочи.

Осталось только механическая часть - сделать нормальное крепление к чемодану, фиксацию крыши в открытом состоянии и т.д.

 

 

 

yul-i-an
yul-i-an аватар
Offline
Зарегистрирован: 10.12.2012

Мало кто так серьезно к проекту подходит.

Мое уважение Вам за труд!

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Спасибо!

Да, потрудиться пришлось несколько больше, чем я рассчитывал :)

А уж писать программу я вообще не собирался...

Но зато результат очень близок к тому, что хотелось.

Если "округлять" - то можно сказать, что задумка воплощена в жизнь в максимальной комплектации.