【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

一、实验目的及要求

实现掌控板抢答器功能。

二、实验原理与内容

基于TinywebDB实现云数据库出题

基于掌控板实现按键抢答和判题

基于MQTT实现多端同步通讯

三、实验软硬件环境

硬件:掌控板

软件:Mind+

四、实验过程

本项目是一个抢答器,它可以利用TinywebDB实现云数据库出题,通过MQTT实现多端同步通讯,同时还可以自动判断题目的正确。

本项目分为选手端和控制端,实验过程中的思维导图如下(可能不是很详细,但可以帮助理解我的思路)

选手端:

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

控制端:

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

各参数解释:

mqtt之中的设备:
T0:发送接受start,end
T1:抢答编号发送
T2:题目题号发送
T3:答题资格发送
T4:本题对错和游戏分数发送

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

TinywebDB中的数据:

1 1+1=1,2,3,4,B
2 1+2=1,2,3,4,C
3 1+3=1,2,3,4,D
4 1+4=5,2,3,4,A
5 1+5=6,2,3,4,A
6 1+6=6,7,3,4,B
7 1+7=1,8,3,4,B
8 1+8=1,9,3,4,B
9 1+9=1,2,10,4,C
10 1+11=1,2,3,12,D

第一个字段是标签,值是由6个字段组成的(用,分割开,英文逗号分割)分别为题目、4个选项和答案组成,因为简单数据库不能插入多列,只能用符号分割之后再写一个函数对字符串分割

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

抢答器的工作流程:

准备工作:

数据库中插入一定数量的题目,插入后需要在控制端代码随机选择题目函数中修改随机数的范围与数目相等

至少有一个控制端一个选手端,可以有多个选手端(每个选手端在烧写的时候需要修改本机编号)

操作流程:

所有掌控板打开,初始化成功后进行正式操作;这里使用了3个掌控板,最左边的一个是控制端,右边的两个是选手端

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

控制端按下A随机抽取一个随机数发送到T2,选手端会收到一个随机数后到数据库中查询该题目,读下来后分解各字段储存到各变量中接下来使用,并在屏幕上显示题目

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

接下来等待选手看完题目后控制端可以按下B,向T0发送一个“start”,选手端接受到后可以开始抢答

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

选手按下A之后向T1发送自己的编号,控制端将收到的第一个编号作为抢答权获得者,并将编号发送到T3,选手端接收到T3的编号如果与自己的编号相同就可以进行答题,如果不同则进入等待页面,显示自己本轮游戏的分数

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

答题选手答题后系统自动判题,如果正确本编号的分数加1,如果错误则不加,控制端也可以显示本次答题者的分数

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

按下A进入下一级页面为选择页面,控制端如下

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

继续答题

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

2号机没有答对

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

再次来到选择页面,选择B,如下,控制端向T0发送end,选手端接收到end后自动跳到结束界面,开启下一次游戏需重启掌控板

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

还有许多引导的显示文字以及过度的显示文字没有拍图,想要进一步了解可以下载来运行,文末附Github链接

选手端的代码:

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

控制端的代码:

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

总结体会:

TinywebDB不支持多列,以至于我们很多数据表多无法实现,我们可以输入一大串用某个特殊符号分隔开的字符串,最后在使用时在将它们分隔开,同理在Mind+只支持5个Topic时,在MQTT中也可以这样做。但是这样也有很多缺点,比如Mind+没有分割字符串的库,我们必须自己写一个函数来分割,逻辑虽然不难,但是如果分割的次数多了之后就会导致函数代码端过长,写起来有些麻烦;还有我们在各字段中不能出现用于分隔各字段的特殊符号等等。

每一个圆顶的积木块都类似于一个线程(如图),所以它们的执行是于主程序同步的,随时监听有无发来的消息,我们在使用这种积木时尽量在它们下面单纯的进行变量的赋值,而不要在它们下面写一些有具体操作的代码,因为具体的操作会在每次接收到mqtt消息时都执行一次,让我们的程序的执行顺序混乱;而在它们下面赋值的好处就是我们可以通过变量控制在主程序下的代码的顺序执行,这样我们的代码的执行顺序就可以按照我们的预期去执行。

【物联网】基于掌控板实现简单的抢答器系统/自动判断正误,判分

源码:

选手端GitHub:https://github.com/2433491691/zg-IoT-experiment/blob/%E6%8A%A2%E7%AD%94%E5%99%A8/%E9%80%89%E6%89%8B%E7%AB%AF.sb3

控制端GitHub:https://github.com/2433491691/zg-IoT-experiment/blob/%E6%8A%A2%E7%AD%94%E5%99%A8/%E6%8E%A7%E5%88%B6%E7%AB%AF.sb3

来源:kgkkk

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年11月8日
下一篇 2020年11月8日

相关推荐