Простые игры на STM32F103 со светодиодной панелью

Не так давно купил я себе цветную светодиодную панель. Какое-то время я с ней помучился, потом оказалось, что нужно спаять буферы и управлять панелью пятью вольтами, на 3.3 непосредственно от ног STM32 она глючила: https://eddy-em.livejournal.com/315574.html

Управляется панель по DMA ногодрыгом по таймеру (т.к. необходимо за один присест менять значение сразу шести ног — RGB-компоненты пары пикселей из верхней и нижней половинки экрана). Я реализовал условный восьмибитный цвет в формате RRRGGGBB, сначала пытался делать покадровую отрисовку, но мерцало не очень приятно, поэтому сделал построчную + добавил 7 пустых циклов, чтобы экран не был слишком ярким (т.е. каждая пара строк выводится 14 раз, при этом загораются нужные пиксели в зависимости от интенсивности; далее переходим к следующей строке). Получилось 56 кадров в секунду.

Разобравшись с экраном,  решил реализовать простейшие игрушки. Чтобы выбрать нужную игру, нарисовал простейшее меню:

Простые игры на STM32F103 со светодиодной панелью Stm32f103, Stm32, Железо, Игрушки, Видео, Длиннопост, Микроконтроллеры

Управление выполняется самопальным "джойстиком" с шестью кнопками (вверх-вниз-влево-вправо, меню, выбор). Намедни ко мне пришел купленный на али восьмикнопочный джойстик от "денди", я уже распаял разъем, подключив его к SPI2, надо будет набросать код для работы с ним (а то самодельный уж совсем мелкий и неудобный).

Начал со "змейки". Если змея съедает голубую точку, ее размер на 1 увеличивается. Зеленая точка уменьшает размер на 1. А желтая просто добавляет очки.

Простые игры на STM32F103 со светодиодной панелью Stm32f103, Stm32, Железо, Игрушки, Видео, Длиннопост, Микроконтроллеры

После завершения игры вылезает экран "Game over", на котором отображается результирующий счет.

Дальше я разобрался с "тетрисом" (ядро тетриса я набросал давно, а теперь осталось подправить его с учетом того, что отображение идет не средствами ncurses, а на светодиодной панели). Набор фигур классический, а вот размер "стакана" — нет.

Простые игры на STM32F103 со светодиодной панелью Stm32f103, Stm32, Железо, Игрушки, Видео, Длиннопост, Микроконтроллеры

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

Простые игры на STM32F103 со светодиодной панелью Stm32f103, Stm32, Железо, Игрушки, Видео, Длиннопост, Микроконтроллеры
Простые игры на STM32F103 со светодиодной панелью Stm32f103, Stm32, Железо, Игрушки, Видео, Длиннопост, Микроконтроллеры

Код на гитхабе: https://github.com/eddyem/stm32samples/tree/master/F1-nolib/...