基于LoRa+蓝牙+掌控板+AppInventor方案的无线抢答系统
本帖最后由 符柏铖 于 2022-5-2 22:35 编辑基于LoRa+蓝牙+掌控板+AppInventor方案实现的一款无线抢答系统,通过手机App下达答题命令到裁判端,再由裁判端分发命令并捕捉抢答信息。
# 演示视频
http://www.bilibili.com/video/BV1jw41197UH
# 设计思路
详见 (http://amnesia-f.github.io/posts/997c/)
# 目标实现
- 主持人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设计
## 程序编写
### 连接蓝牙
其中唯一编号为:`00001101-0000-1000-8000-00805F9B34FB`
### 发送指令
App端的程序十分简单,只需要连接上蓝牙后发送我们前面定义好的消息即可。
# 主持人掌控板端
## 初始化
首先初始化`蓝牙`,`LoRa`与`语音合成模块`
## 接收正确选项
在主持人手机App端,主持人会先发送正确选项到掌控板上,当掌控板上接收到正确选项后,开始抢答指令才会生效:
掌控板蓝牙接收到`A`或`B`后,便开始执行`清空变量`,`发送程序`与`接收程序`三个函数,接下来我们一个一个来慢慢讲。
这里还有一个判断,如果`判断模式`这个变量等于0的话就一直在屏幕上显示`等待出题中...`字样,因为我们上面初始化的时候已经将这个变量设为0,所以现在会一直显示。
## 函数:清空变量
啊这...这个没有什么好讲的了,就是将所有的变量设为原始值,这样做的目的是防止第二次执行程序时变量还为第一次的值,影响程序正常运行。
## 函数:发送程序
首先通过LoRa发送正确选项给选手端,接着进入一个循环中,重复读取蓝牙数据,
当掌控板接收到App端发出的`开始抢答`指令,同时也发送这个消息到选手端,然后跳出循环。
## 函数:接收程序
和上面发送程序的函数一个套路,进入一个循环,同时接收蓝牙及LoRa的消息,
当选手端完成答题发送`1`或者`0`后;亦或者App端发送`下一题`指令后,才会跳出循环。
接着判断收到的消息,如果LoRa收到选手端发来的`1`,代表选手回答正确;反之,如果收到的是`0`,代表选手回答错误,进入`完成答题`函数。
如果接收到蓝牙发来的`t`,代表无人抢答*,主持人手动进入下一题。
> *因为考虑到一种情况,即发出开始抢答指令后,可能会出现无人抢答的局面,这时程序也无法继续运行下去,所以我们设定了可以由主持人通过App端手动进入下一题。
## 函数:完成答题
同时显示正确选项与选手的回答情况在掌控板屏幕上。
## 函数:下一题程序
很简单,就是发送下一题指令给选手端。
# 选手端
## 整体代码
> 这部分代码由岭南师范学院的吴兆明老师编写,我在其代码上加了一点小注释方便理解,这里不进行详细阐述了。
# 改进方向
- [ ] 选手端抢答后反馈选手编号到主持人掌控板端;
(本来测试的时候一点问题没有,一录视频这个功能就出bug了,无奈只能阉割掉...)
- [ ] 统计选手得分及答题情况上物联网平台(SIoT);
- [ ] 通过数据库随机抽题发送到选手端;
- 加入语音合成模块,播报指令和答题情况;
# End
赞一下。
页:
[1]