欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-11 20:23:13
...

掌控板抢答器实验

目的及要求
实验原理与内容
实验软硬件环境
实验过程(实验步骤、记录、数据、分析)
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);
	}
}

成品演示岭南师范——实验四掌控板抢答器实验