一、 設計目的
本次項目設計旨在通過綜合使用三軸加速度傳感器、數碼管、蜂鳴器、導航鍵、按鍵、振動傳感器等元件,基於上位機與下位機之間的通信和數據交互,利用下位機完成對上位機遊戲——貪喫蛇的多種方式控制,並在此基礎上,可對多種上位機軟件進行拓展操作。
在項目整體的設計過程中熟悉“EP1C3學習板”的相關知識,學習三軸加速度、振動傳感器以及導航按鍵的工作原理,依據具體需求進行詳細設計,並瞭解通信協議,在上位機的設計過程中學習串口通信的相關知識。
二、 預期功能及創新
1. 預期功能:
- ① 使用數碼管、蜂鳴器等模塊進行信息展示,如連接狀態顯示及提示、當前速度顯示、方向指示等;
- ② 利用三軸加速度傳感器、振動傳感器、導航鍵等對上位機——貪喫蛇遊戲進行控制操作。
2. 創新: - ① 實現下位機與上位機的相互通信及數據交互;
- ② 利用三軸加速度模擬方向控制,實現具體操作。
三、 設計流程
具體原理部分請見下載報告:https://download.csdn.net/download/forest_one/12248816
五、 實現及關鍵代碼
1. 上位機
上位機原型爲貪喫蛇遊戲,通過 Java 語言進行設計,其中包含了 Snake、Controller、BottonPanel 等多個類。(項目文件標題處給出了下載地址)
在貪喫蛇遊戲的基礎上,添加串口通信模塊(如下圖), 使得上位機與下位機實現相互通信,並在上位機設置串口監聽,根據下位機發送的指令完成相應操作。
下位機通信
變量定義
程序函數
關鍵代碼
ucDateTmp 用來存儲從上位機發送到下位機的數據,在一定條件下,使用 SendData發送控制指令到上位機。
2. 三軸加速度傳感器
2.1 引腳定義
2.2 變量定義
2.3 程序函數
2.4 關鍵代碼
通過Multiple_Read_ADXL345()讀出數據並使用display_angle()完成角度的轉換,在進行判斷時我們需要設定一定的觸發區間(X、Y 軸< -40°或 >40°),當角度處於觸發區間時,下位機會通過串口通信發送指令到上位機實現方向控制。
3. 導航按鍵
3.1 變量定義
3.2 程序函數
3.3 關鍵代碼
通過 GetADC()函數查詢 A/D 轉換的結果,通過轉換結果的不同判斷導航鍵哪個方向鍵被按下,併發送相應指令到上位機,由上位機做出響應,實現控制。
4. 振動傳感器
4.1 變量定義
4.2 關鍵代碼
振動傳感器的端口爲 P3^4,通過對其端口的監控,判斷振動傳感器的狀態,由於存在抖動現象,需要進行延時操作以防止避免多次發送重複指令。
5. 數碼管
5.1 引腳定義
5.2 變量定義
5.3 程序函數
5.4 關鍵代碼
在一定條件下,利用 switch 語句進行循環動態掃描點亮數碼管的相應位置,進行不同信息的展示。
6. 蜂鳴器
6.1 變量定義
6.2 關鍵代碼
無源蜂鳴器的端口爲 P3^4,通過對其端口的操作,高低電平改變頻率決定音調,高電平佔空比決定音量,實現無源蜂鳴器的發聲。
7. 按鍵
7.1 引腳定義
7.2 變量定義
7.3 關鍵代碼
爲了消除按鍵的抖動,採用計數器的方法,進行消抖處理,且每完成一次操作,對計數變量進行初始化以達到每次操作的消抖。
六、 操作說明
具體操作流程圖如下 :
操作說明
該項目下位機存在 4 種狀態切換,具體如下:
- ① 下載燒寫程序。
- ② 完成下載後,下位機 LED 數碼管顯示“hold . . . .”。此時,下位機處於待機狀態,還未進行與上位機的連接操作,導航鍵及其他控制鍵操作無效。
- ③ 打開上位機串口設置——打開串口,下位機 LED 數碼管顯示“CHOOSE . .”。當前頁面要進行控制功能選擇,按下 K1 鍵選定導航鍵方向控制,按下 K2 鍵選定三軸加速度傳感方向控制。
- ④ 下位機 LED 數碼管顯示“SPEED8-1”。LED 數碼管對速度、方向等信息進行展示,第 6 位顯示速度值,第 8 位顯示方向。
七、 測試驗證
- ① 下載燒寫程序。
- ② 完成下載後,下位機 LED 數碼管顯示“hold . . . .”。
- ③ 打開上位機串口設置——打開串口,下位機 LED 數碼管顯示“CHOOSE . .”。按下K1 鍵選定導航鍵方向控制,按下 K2 鍵選定三軸加速度傳感方向控制。
- ④ 下位機 LED 數碼管顯示“SPEED8-1”。LED 數碼管對速度、方向等信息進行展示,第 6 位顯示速度值,第 8 位顯示方向。
- ⑤ 上位機操作頁面——實現下位機對上位機進行控制