文章目錄
- 示範視訊
- 設計思路
- 目标實作
- 消息定義
-
- 藍牙接收
- LoRa接收
- 主持人App端
-
- UI設計
- 程式編寫
-
- 連接配接藍牙
- 發送指令
- 主持人掌控闆端
-
- 初始化
- 接收正确選項
- 函數:清空變量
- 函數:發送程式
- 函數:接收程式
- 函數:完成答題
- 函數:下一題程式
- 選手端
-
- 整體代碼
- 改進方向
- End
示範視訊
先上最終效果:
基于LoRa與藍牙技術的無線搶答器
設計思路
見 Day7:一款無線搶答系統的設計思路
目标實作
- 主持人App端可以通過藍牙與掌控闆通訊;
- 主持人掌控闆端可以通過LoRa發出指令;
- 兩個選手端可以通過LoRa發送消息确定搶答方;
- 選手端自動判斷選手回答正确與否;
- 選手端自動統計選手得分;
消息定義
因為使用了LoRa與藍牙進行通訊,是以我們需要定義消息,用來判斷程式該做什麼:
藍牙接收
s(115)開始搶答 發送C
t(116)下一題 發送D
A(65) 發送正确選項 發送A
B(66) 發送正确選項 發送B
LoRa接收
1(49)選手回答正确
0(48)選手回答錯誤
a(97)選手1搶答成功
b(98)選手2搶答成功
主持人App端
UI設計
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjcmbw5COzMWOxQGN0YzN3UGZjdDZyIWYxAjMmhjMyETZiJWOy8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
程式編寫
連接配接藍牙
其中唯一編号為:
00001101-0000-1000-8000-00805F9B34FB
發送指令
App端的程式十分簡單,隻需要連接配接上藍牙後發送我們前面定義好的消息即可。
主持人掌控闆端
初始化
首先初始化
藍牙
,
LoRa
與
語音合成子產品
接收正确選項
在主持人手機App端,主持人會先發送正确選項到掌控闆上,當掌控闆上接收到正确選項後,開始搶答指令才會生效:
掌控闆藍牙接收到
A
或
B
後,便開始執行
清空變量
,
發送程式
與
接收程式
三個函數,接下來我們一個一個來慢慢講。
這裡還有一個判斷,如果
判斷模式
這個變量等于0的話就一直在螢幕上顯示
等待出題中...
字樣,因為我們上面初始化的時候已經将這個變量設為0,是以現在會一直顯示。
函數:清空變量
啊這…😅這個沒有什麼好講的了,就是将所有的變量設為原始值,這樣做的目的是防止第二次執行程式時變量還為第一次的值,影響程式正常運作。
函數:發送程式
首先通過LoRa發送正确選項給選手端,接着進入一個循環中,重複讀取藍牙資料,
當掌控闆接收到App端發出的
開始搶答
指令,同時也發送這個消息到選手端,然後跳出循環。
函數:接收程式
和上面發送程式的函數一個套路,進入一個循環,同時接收藍牙及LoRa的消息,
當選手端完成答題發送
1
或者
後;亦或者App端發送
下一題
指令後,才會跳出循環。
接着判斷收到的消息,如果LoRa收到選手端發來的
1
,代表選手回答正确;反之,如果收到的是
,代表選手回答錯誤,進入
完成答題
函數。
如果接收到藍牙發來的
t
,代表無人搶答*,主持人手動進入下一題。
*因為考慮到一種情況,即發出開始搶答指令後,可能會出現無人搶答的局面,這時程式也無法繼續運作下去,是以我們設定了可以由主持人通過App端手動進入下一題。
函數:完成答題
同時顯示正确選項與選手的回答情況在掌控闆螢幕上。
函數:下一題程式
很簡單,就是發送下一題指令給選手端。
選手端
整體代碼
這部分代碼由嶺南師範學院的吳兆明老師編寫,我在其代碼上加了一點小注釋友善了解,這裡不進行詳細闡述了。
改進方向
-
選手端搶答後回報選手編号到主持人掌控闆端;
(本來測試的時候一點問題沒有,一錄視訊這個功能就出bug了,無奈隻能閹割掉…)
- 統計選手得分及答題情況上物聯網平台(SIoT);
- 通過資料庫随機抽題發送到選手端;
- 加入語音合成子產品,播報指令和答題情況;