新聞中心

EEPW首頁 > 消費電子 > 設(shè)計應(yīng)用 > 升級我的復(fù)古手持游戲機,配備運動控制和液晶顯示器

升級我的復(fù)古手持游戲機,配備運動控制和液晶顯示器

作者: 時間:2024-10-16 來源:EEPW編譯 收藏

按照我對手持游戲控制器的升級,我添加了一個新的1.8英寸彩色LCD用于動畫圖形,以及一個用于輸入的加速計模塊。

本文引用地址:http://butianyuan.cn/article/202410/463693.htm

在我之前的一篇文章中,我介紹了一種復(fù)古風格的手持游戲機的開發(fā)過程,該游戲機具有本地無線多人連接功能。本文將重點介紹使用1.8英寸彩色LCD進行動畫圖形升級,以及使用加速計模塊進行輸入。

對于我們升級的硬件,我們將使用ESP8266編寫一個簡單的基于Arduino的格斗游戲,在游戲中,屏幕兩側(cè)的兩名玩家相互戰(zhàn)斗,直到其中一人失去所有生命值。每個角色都將以16位顏色設(shè)置動畫,并可通過傾斜和搖晃玩家各自的控制臺進行控制。

在構(gòu)建這個項目之前,您可能想回顧一下本系列的第一部分,了解使用ESP-NOW進行無線通信的基礎(chǔ)知識,將MIDI文件轉(zhuǎn)換為背景音頻并播放,視頻游戲中的碰撞檢測,以及如何將代碼上傳到ESP8266微控制器。

電路設(shè)計和PCB布局

圖1是我們復(fù)古手持設(shè)備改進版本的Eagle接線示意圖。

帶LCD屏幕的復(fù)古游戲機電路示意圖

 

1.png

圖1.帶LCD屏幕的復(fù)古游戲機電路示意圖

升級后的控制臺的PCB設(shè)計不必改變,因為我故意留出了擴展空間,包括用于更大SPI顯示器和I2C傳感器模塊的引腳頭(圖2)。然而,與我的大多數(shù)項目一樣,今天所涵蓋的一切都是面包板和性能板友好的。

復(fù)古游戲機的PCB布局

 2.png

圖2.復(fù)古游戲機的PCB布局

我已經(jīng)提供了Eagle原理圖和電路板文件供下載。

物料清單

下表顯示了構(gòu)建一個設(shè)備的物料清單。請記住,您需要兩個游戲機才能進行無線多人游戲。

 3.png

表1.升級游戲機項目的物料清單(BOM)

彩色顯示和圖形庫

該顯示器為1.8英寸128x160像素TFT LCD,內(nèi)置ST7735S SPI驅(qū)動IC。它使用一種名為RGB565的16位顏色格式,這意味著我們可以顯示高達65K的顏色。您會發(fā)現(xiàn)此顯示器的不同版本提供了不同的引腳排列,因此請確保正確連接。如果你正在復(fù)制我的自定義PCB,你需要修改它以支持不同的引腳。

對于這個項目,我們將使用Bodmer的TFT_eSPI圖形庫,該庫專門用于在ESP8266等32位微控制器上顯示動態(tài)圖像。這些類型的圖像稱為精靈,存儲在處理器的RAM內(nèi)存中。它們可以以各種方式操縱,并集成在更大的2D場景之前或之后。精靈的一種顏色總是被指定為透明的,這樣很容易將它們疊加在其他圖像上。

帶游戲屏幕的復(fù)古游戲機視圖,包括玩家

人物

 4.png

圖3.屏幕上的玩家角色是使用精靈實現(xiàn)的

此項目中使用的所有精靈都是itch.io的Free Tiny Hero精靈素材的修改版本。您始終可以按照我代碼中的相同邏輯,用自己的藝術(shù)或互聯(lián)網(wǎng)上的其他圖形替換它們。

游戲場景

我們游戲中的場景分為三個部分:

背景

戰(zhàn)斗區(qū)域

HUD(平視顯示器)

對于背景,我選擇了一個漸變,從底部的白色開始,在頂部過渡到不同的次要顏色。在啟動時,次要顏色是從我認為與頂部素材搭配得很好的幾種顏色中隨機選擇的。

我們的戰(zhàn)斗區(qū)域,或顯示器的中間,是玩家將戰(zhàn)斗的地方。一個玩家將在左側(cè)生成,而另一個玩家會在右側(cè)生成??偣灿腥齻€角色,而且,每當游戲開始時,它都會隨機分配給每個玩家一個角色,而不會重復(fù)。

HUD位于顯示器的頂部和底部,使用綠色狀態(tài)欄顯示每個玩家的健康點(HP),該狀態(tài)欄隨著玩家失去HP而遞減。在狀態(tài)欄旁邊,有描繪玩家角色和標識符(玩家1或玩家2)的框架圖像。

為精靈制作動畫

為了達到運動的效果,每當玩家執(zhí)行一個動作時,我們都會快速滾動與該特定動作相關(guān)的一系列圖像,而不是顯示靜止圖像,給人一種我們的角色在屏幕上流暢動態(tài)移動的錯覺,類似于卡通或傳統(tǒng)視頻游戲的工作方式。

這些圖像是我使用Rinky Dink Electronics的image-to-RGB565工具轉(zhuǎn)換為Arduino代碼的精靈資產(chǎn),以指針數(shù)組的形式組織,使其在渲染動作時易于迭代。

在這個游戲中,動作被定義為空轉(zhuǎn)(原地停留和呼吸)、行走(步態(tài)模式)和拳擊(向?qū)κ峙e起手臂)。每個動作只有幾個圖像,這些圖像會根據(jù)游戲計數(shù)器變量激活,該變量在Arduino循環(huán)時遞增。

使用加速度計進行運動傳感

最后,我們需要給用戶一種控制他們性格的方法。我們將使用MPU6050加速計/陀螺儀模塊,以及Refetick的MPU6050_light.h庫。該庫通過MPU6050芯片提供了一種輕量級、快速、簡單的通信方法。

在這個項目中,我將傳感器垂直連接到PCB上,使我們能夠使用X軸傾斜角度讀數(shù),在整個控制臺向任一方向傾斜時向左或向右移動角色。此外,與我的電子墨水蝕刻草圖項目類似,我使用了所有三個軸的加速度讀數(shù),實現(xiàn)了震動檢測,每當用戶搖動控制臺時,都會觸發(fā)一個沖壓動作。

傾斜和抖動范圍可能因您的特定MPU6050模塊及其位置而異。請記住,在確定哪種靈敏度最適合您的設(shè)置之前,您必須修改不同的值。

上傳代碼

現(xiàn)在我們了解了這個項目背后的邏輯,我們需要將代碼上傳到我們的ESP8266微控制器。和上次一樣,我將使用Lolin D1 Mini板,它有一個方便的USB到串行編程器。

在開始上傳之前,您需要使用所有相關(guān)的板和庫設(shè)置Arduino環(huán)境。我們將對主機和客戶端使用相同的草圖,只使用兩行代碼來區(qū)分它們。一行是一個名為isHost的布爾變量(1代表主機,0代表客戶端):

 5.png

第二行是接收節(jié)點的相應(yīng)MAC地址的數(shù)組: 

 6.png

主程序、音頻和MAC查找器的代碼可從GitHub下載。

輪到你了

除了本文及其前一個迭代中涵蓋的功能外,我還包括了一個我們的控制臺啟動的基本“連接”屏幕,以及一些用于阻塞和躲避等操作的精靈,您可以在項目的版本中實現(xiàn)。

你將如何擴展這個項目?你還會包括哪些其他硬件?你想制作什么類型的游戲?

在我之前的文章中,一位用戶建議切換到ESP32,它提供了更多的GPIO引腳,可能消除了對I/O擴展器的需求,I/O擴展器以前用作8位觸覺開關(guān)端口。您還可以添加一個MP3播放器IC,用于播放更長、更復(fù)雜的背景游戲音樂片段。

得益于ESP硬件,您甚至可以擴展此項目以連接到全球互聯(lián)網(wǎng),并與更多玩家互動,而不是ESP-NOW協(xié)議的本地化功能。




評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉