新聞中心

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

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

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

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

        本文引用地址:http://www.104case.com/article/202410/463693.htm

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

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

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

        電路設計和PCB布局

        圖1是我們復古手持設備改進版本的Eagle接線示意圖。

        帶LCD屏幕的復古游戲機電路示意圖

         

        1.png

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

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

        復古游戲機的PCB布局

         2.png

        圖2.復古游戲機的PCB布局

        我已經提供了Eagle原理圖和電路板文件供下載。

        物料清單

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

         3.png

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

        彩色顯示和圖形庫

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

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

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

        人物

         4.png

        圖3.屏幕上的玩家角色是使用精靈實現的

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

        游戲場景

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

        背景

        戰斗區域

        HUD(平視顯示器)

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

        我們的戰斗區域,或顯示器的中間,是玩家將戰斗的地方。一個玩家將在左側生成,而另一個玩家會在右側生成。總共有三個角色,而且,每當游戲開始時,它都會隨機分配給每個玩家一個角色,而不會重復。

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

        為精靈制作動畫

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

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

        在這個游戲中,動作被定義為空轉(原地停留和呼吸)、行走(步態模式)和拳擊(向對手舉起手臂)。每個動作只有幾個圖像,這些圖像會根據游戲計數器變量激活,該變量在Arduino循環時遞增。

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

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

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

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

        上傳代碼

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

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

         5.png

        第二行是接收節點的相應MAC地址的數組: 

         6.png

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

        輪到你了

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

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

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

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




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 和硕县| 木兰县| 平塘县| 安龙县| 永登县| 安陆市| 阳城县| 东兰县| 苗栗市| 婺源县| 大冶市| 江津市| 安吉县| 高淳县| 北安市| 瑞昌市| 汝城县| 宁都县| 石首市| 安庆市| 昔阳县| 城市| 周至县| 道孚县| 抚州市| 大安市| 旅游| 鄄城县| 乌兰察布市| 邵武市| 七台河市| 广河县| 邵东县| 大厂| 蕉岭县| 蓝田县| 深州市| 肇州县| 兖州市| 息烽县| 江达县|