岭南师范——实验四掌控板抢答器实验

掌控板抢答器实验

目的及要求
实验原理与内容
实验软硬件环境
实验过程(实验步骤、记录、数据、分析)
1、出题
2、抢答
3、判题
4、出下一题
总代码图
Gitee源码仓库
成品演示


一、目的及要求

实现掌控板抢答器功能。

二、实验原理与内容

  • 基于TinywebDB实现云数据库出题
  • 基于掌控板实现按键抢答和判题
  • 基于MQTT实现多端同步通讯

三、实验软硬件环境

硬件:掌控板
软件:Mind+

四、实验过程(实验步骤、记录、数据、分析)

请概括出题、抢答、判题等过程(包括操作逻辑和实现效果截图等)

1、出题

由主持人提出题目,按下按键A进行计时,选手可以开始抢答
在这里插入图片描述
在这里插入图片描述
其中计时的逻辑方法如下
在这里插入图片描述
实现效果截图
在这里插入图片描述

2、抢答

选手按下A键进行抢答——发送标签抢答请求到TinywebDB数据库中,同时MQTT获得选手抢答的信息
在这里插入图片描述

实现效果截图
在这里插入图片描述

3、判题

选手抢答后主持人的掌控版同时停止计时如上图,TinywebDB显示有人抢答和选手名字,MQTT中显示选手抢答,由主持人判断选手是否回答正确

在这里插入图片描述
在这里插入图片描述

4、出下一题

由主持人按下所属掌控版的B键对标签进行清除,重新按下按键A
在这里插入图片描述

  1. 主持人总代码图
    在这里插入图片描述
  2. 选手代码图
    在这里插入图片描述

Gitee源码仓库

主持人Gitee源码仓库:https://gitee.com/liu-zhiweiii/code-display.git
代码如下(示例):

/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <mPython_tinywebdb.h>

// 动态变量
volatile float mind_n_flag, mind_n_haomiao, mind_n_miao, mind_n_fen;
// 静态常量
const String topics[5] = {"JBXT5iKGR","","","",""};
// 创建对象
DFRobot_Iot       myIot;
mPython_TinyWebDB mydb;


// 主程序开始
void setup() {
	mPython.begin();
	myIot.wifiConnect("xiaomi", "12345678");
	while (!myIot.wifiStatus()) {yield();}
	display.setCursorLine(1);
	display.printLine(myIot.getWiFiLocalIP());
	mydb.setServerParameter("http://tinywebdb.appinventor.space/api", "xulehuang","a46a5f05");
	myIot.init("iot.dfrobot.com.cn","GortBGAMR","","MortfGAMgz",topics,1883);
	myIot.connect();
	while (!myIot.connected()) {yield();}
	display.fillScreen(0);
	display.setCursorLine(2);
	display.printLine("MQTT连接成功");
}
void loop() {
	if ((buttonA.isPressed())) {
		display.fillScreen(0);
		display.setCursorLine(2);
		display.printLine("开始抢答");
		display.setCursorLine(3);
		display.printLine(mydb.getTag("q1"));
		mind_n_flag = millis();
		while (!(mydb.getTag("111")==String("有人抢答"))) {
			mind_n_haomiao = (String("123").toInt());
			mind_n_miao = (String("123").toInt());
			mind_n_fen = (String("123").toInt());
			if ((mind_n_haomiao>60)) {
				mind_n_haomiao = (((int)mind_n_haomiao) % ((int)60));
			}
			if ((mind_n_miao>60)) {
				mind_n_haomiao = (((int)mind_n_haomiao) % ((int)60));
			}
			if ((mind_n_fen>60)) {
				mind_n_haomiao = (((int)mind_n_haomiao) % ((int)60));
			}
			display.setCursorLine(1);
			display.printLine((String(mind_n_fen) + String((String(mind_n_miao) + String(mind_n_haomiao)))));
			yield();
		}
		if ((mydb.getTag("lzw")==String("刘志炜抢答"))) {
			myIot.publish(topic_0, "刘志炜抢答");
			display.setCursorLine(4);
			display.printLine(mydb.getTag("lzw"));
		}
		if ((mydb.getTag("xlh")==String("许乐煌抢答"))) {
			myIot.publish(topic_0, "许乐煌抢答");
			display.setCursorLine(4);
			display.printLine(mydb.getTag("xlh"));
		}
		if ((mydb.getTag("ojj")==String("欧建骤抢答"))) {
			myIot.publish(topic_0, "欧建骤抢答");
			display.setCursorLine(4);
			display.printLine(mydb.getTag("ojj"));
		}
		if ((mydb.getTag("hwj")==String("何伟健抢答"))) {
			myIot.publish(topic_0, "何伟健抢答");
			display.setCursorLine(4);
			display.printLine(mydb.getTag("hwj"));
		}
		while (!(buttonB.isPressed())) {yield();}
		mydb.deleteTag("111");
		mydb.deleteTag("lzw");
		mydb.deleteTag("xlh");
		mydb.deleteTag("ojj");
		mydb.deleteTag("hwj");
		display.fillScreen(0);
	}
}

选手抢答Gitee源码仓库:https://gitee.com/liu-zhiweiii/code-display.git
代码如下(示例):

/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <mPython_tinywebdb.h>
// 创建对象
DFRobot_Iot       myIot;
mPython_TinyWebDB mydb;


// 主程序开始
void setup() {
	mPython.begin();
	myIot.wifiConnect("xiaomi", "12345678");
	while (!myIot.wifiStatus()) {yield();}
	display.setCursorLine(1);
	display.printLine(myIot.getWiFiLocalIP());
	mydb.setServerParameter("http://tinywebdb.appinventor.space/api", "xulehuang","a46a5f05");
}
void loop() {
	if ((buttonA.isPressed())) {
		display.fillScreen(0);
		mydb.updateTagValue("111", "有人抢答");
		mydb.updateTagValue("lzw", "刘志炜抢答");
		display.setCursorLine(2);
		display.printLine(mydb.getTag("lzw"));
		rgb.write(-1, 0x0000FF);
	}
	if ((buttonB.isPressed())) {
		display.fillScreen(1);
		rgb.write(-1, 0xFFFFFF);
	}
	if ((touchPadP.isTouched())) {
		rgb.write(-1, 0x000000);
	}
}

成品演示在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值