![]() |
![]() |
||||||||||||||||||
Игра «Змейка» на графическом дисплее
Автор: Сергей Безруков (aka Ser60) Игра «Змейка» из прошлого века на фоне современных компьютерных игр сегодня кажется вообще анахронизмом, и даже ChatGPT v.4 может генерировать Arduino код для неё. Тем не менее, самостоятельная разработка кода игры на современной элементной базе является неплохим упражнением для начинающих, и, как показывает практика, интерес к игре не ослабевает у детей дошкольного и младшего школьного возраста. Предлагаю вниманию две реализации игры под разные дисплеи. Первый проект был выполнен студентом из Кореи Джонгмин Ко в рамках курса начального уровня по встроенным системам. С самого начала он хотел задействовать цветной MakerFocus 1.3” TFT LCD дисплей с разрешением 240×240 точек и джойстик для управления змейкой. Плата игры разрабатывалась как надстройка к отладочной плате BG22-EK4108A фирмы Silicon Labs оснащённой коннектором mikroBUS, и являющейся стандартной в моём курсе (показана слева ниже). Использование графического дисплея позволило расширить размер игрового поля до 16×15 клеток, а, значит, и максимальную длину змейки, что делает игру более сложной и интересной по сравнению с реализациями на 8×8 светодиодных матрицах, коих проектов имеется в избытке в сети (см. также мою старую статью здесь). Помимо этого, решено было раскрасить тело и голову змейки в зелёный и розовый цвета соответственно, а её пищу – в жёлтый. В момент поедания пищи голова змейки на короткий момент становится фиолетовой. Управление змейкой производится посредством джойстика серии AlcoSwitch фирмы TE Connectivity. С целью упрощения разводки платы и упрощения кода связь джойстика с МК производится по одному проводу, а для мониторинга его состояния с периодом 10мс задействован АЦП МК. Случайное размещение пищи на игровом поле производится встроенным в МК TRNG (True Random Number Generator), что исключает периодичность её положения. Текущая длина змейки показывается в нижней части экрана. Файл платы для Eagle, а также полный исходный код проекта прилагаются.
Увидев игру в работе, внук захотел подобную для личного пользования. Я решил переработать проект студента для внука под процессор того же семейства с 64К flash памяти, и несколько иные комплектующие. Прежде всего, планировалось исключить плату разработки, организовать батарейное питание, поставить классические 4 кнопки вместо джойстика и имеющийся у меня Xiita 1.44” TFT LCD дисплей с разрешением 128×128 точек. На мой взгляд управлять змейкой кнопками всё же удобнее, чем джойстиком. В результате получилась следующая схема. Для стабилизации напряжения питания дисплея и МК задействован повышающий конвертер на микросхеме IC2. В неактивном режиме, когда МК IC1 находится в глубоком сне, напряжение на его выводе 16 равно 0, конвертер выключен и напряжение батареи проходит на его вывод 5 без изменения и используется для питания МК. Питание дисплея при этом отключено одним из ключей транзисторной сборки Q1 и потребление схемы составляет около 2 мкА. Этим обеспечивается экономия энергии батареи вне сеансов игры. Включение игры производится кнопкой «↑». Это приводит к просыпанию МК и подъёму напряжения на его выводе 16 до напряжения питания. Конвертер IC2 запускается и напряжение на его выводе 5 увеличивается до 3.3В. Одновременно ключ Q1A открывается и повышенное конвертером напряжение подаётся на дисплей. Далее программа МК засылает в дисплей коды инициализации по протоколу SPI и переводит вывод 17 МК в аналоговый режим для отработки нажатия кнопок. Всё это происходит в течение доли секунды, после чего система готова к игре. Для автоматического выключения игры после 30 секунд неактивности (нажатия кнопок) используется внутренний таймер. По истечение таймаута конвертер и питание дисплея отключаются, а вывод 17 МК конфигурируется на цифровой вход с ожиданием прерывания по нажатию кнопки. МК при этом переходит в режим глубокого сна.
Устройство смонтировано на односторонней печатной плате, приклеенной к батарейному отсеку через двусторонний скотч. Аналогичным образом плата дисплея приклеена к основной плате. Оказалось, что подсветка дисплея довольно прожорливая, так что потребление схемы от батарей в активном режиме игры составляет около 43 мА. Плата разработана в системе Eagle файл её прилагается. Программное обеспечение разработано в IDE Simplicity Studio под Gecko SDK v.4.3.2 и версией GNU ARM компилятора 10.3.1. Прилагаемые sls файлы проектов предназначены для импорта в систему. Их можно также открыть средствами ОС, переименовав расширение в zip. Игрушка оказалась занимательной и для взрослых: рекордная длина змейки в первый день составила 49. Можете сделать больше?
Файлы: Все вопросы в Форум.
|
|
||||||||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |