Доработка отечественного промышленного клона Arduboy

Отечественная промышленность освоила выпуск конструктора для сборки игровой приставки на ардуино нано. А выпуск ПО для игровой приставки почему-то не освоила (в комплекте 8 игр). В рекламе обещаны 500 игр, но, чтобы их получить (скомпилировать из исходников), пришлось приложить некоторые усилия.

Консоль в отличии от дизайна Arduboy сделана на Arduino Nano/Atmega 328p. Оригинальная разработка выполнена на Atmega32u4, из-за чего двоичные файлы оригинального проекта не подходят. А от проекта SLIMBOY (тоже на Arduino Nano) отличается привязкой клавиш к пинам.

В процессе доработки было выполнено:

  • I2C экран SSD1306 0,96" заменен на I2C экран SSD1306 2,4" (программно решена проблема с шумом дросселя на плате экрана; дополнительно проверена работа с экраном I2C SH1106 1,3")

  • доработка библиотеки Arduboy2 для сборки игр под аппаратную платформу (библиотека из проектов harbaum/SLIMBOY и MLXXXp не подошли для экрана 2,4 - работал не стабильно; кроме того старые библиотеки не поддерживали работу с экраном 1,3” на SH1106)

  • разработан корпус под экран 2,4”

Результат: сын, которому был подарен конструктор, играет в Dark&Under и доволен.

Патченные библиотеки и корпус лежат здесь: GitHub - krrrysha/Arduboy-homemade-package: Arduino IDE board package for Arduboy and homemade versions making things easy

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

Звук громче раза в два.

Спасибо!
Очень хотел применить экран 2,42", благодаря вашим библиотекам всё получилось!!!
Зуммер включил через резистор 220 Ом на землю, чтоб не так громко пищало!

1 лайк

В новой версии добавил поддержку аналогового джойстика на Joystick Shield (в этом случае приходится пожертвовать экономией энергии за счет включения АЦП, и немного памятью - добавляется 3 глобальные переменные)
На фото - экран 1.3" SH1106. Плата UNO. Если кто-то захочет повторить, имейте в виду, что из-за длинных проводов и плохого контакта на интерфейсе I2c экран может не запуститься (я припаял интерфейс к интерфейсу I2c Joystick Shield-а с обратной стороны). Кроме того для игры неплохо всё это установить на диэлектрическое основание (если коснуться интерфейса экрана, изображение сбивается)

2 лайка


Да. С 2,4" прямо человеком себя чувствуешь :slight_smile:
У меня такая (STL на корпус тоже выложен, правда там версия без отверстия под дополнительный порт экрана, сделал этот вырез для тестирования разных OLED - дисплеев)

2 лайка

Продолжаем.
По ссылке из первого поста доступна новая версия библиотек.
Основное отличие - поддержка контроллера RISC-V MIK32 АМУР К1948ВК015/К1948ВК018 (версии v2, на v0 не пробовал). BSP v0.5.0 для Arduino IDE v и платы ELBEAR UNO/NANO

Причина использования MIK32: больше ОЗУ. Можно было бы и Mega2560 ради этого попробовать, благо есть примеры портирования Arduboy туда, но захотелось импортозамещения и взглянуть на Terra incognita :slight_smile:

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

Для обеих платформ доступны (через правку Arduino2Core.h):

  • поддержка SSD1306(SSD1309)_I2C и SH1106_I2C
  • поддержка кнопок “а-ля приставка от EnjoyRobotics” (без опций), JOYSTICKDISCRETE - курсорные КНОПКИ Joystick shield (кнопка “K” (D8) под джойстиком - это “A” ; кнопка “F” (D7) - это “B”) ), “JOYSTICKANALOG” - аналоговый джойстик Joystick shield (“B” D3 и "С"D4 джойстика - это “B” и “А” приставки).

Для аналогового джойстика доступна настройка чувствительности (порог отклонения, при котором будет фиксироваться виртуальное нажатие курсорной клавиши. Это параметры JOYSENSX и JOYSENSY). При включении джойстик сам калибруется на нулевую точку, поэтому при старте он должен стоять неподвижно.

Проверены библиотеки Arduboy2Tone и Arduboy2Beep. Но на одном пине (потом как нть на двух погоняю).

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

В папке mik32_games - несколько игр, собранных под АМУР.
Собираются почти без исправления но есть несколько нюансов, которые попробую позже описать и возможно обойти. (Самый неприятный, это когда игре в функциях нет возврата значения и обычная платформа AVR это проглатывает, а на АМУР-е приходится гадать, зарыта собака). Соответственно там две игры, которые не помещались в 328p: StarHonor и Arduboy3d: Catacombs of the damned (в стиле Wolf3d, рука только пока не прорисована, позже буду разбираться почему).

FX библиотеку и соответствующие игры пока не пробовал адаптировать.

PS замечания к стилю написания кода буду учитывать, но не сразу (я не программист ни по образованию ни по роду деятельности :slight_smile: )