岭南师范——实验四掌控板抢答器实验
程序员文章站
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
- 主持人总代码图
- 选手代码图
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);
}
}