背景
随着地球资源逐渐枯竭,人们逐渐开始探索宇宙,寻找更合适的栖息地。有一天,麦昆乘着飞船来到了火星。开始了资源探索之旅。
经过一段时间的探查,麦昆发现火星上到处都是环形坑,十分难走。于是没过多久,麦昆的两盏车灯就开始闪烁。这意味着麦昆的能源即将耗尽,需要赶紧去能源补给站充电。
到了补给站,麦昆发现要充电还不是那么容易的一件事。充电站的显示屏上显示着一串神秘的波形,边上还有一个黄色的按钮。
麦昆仔细想了一下,这个按钮肯定就是充电站的电源开关。只要接通后应该就可以充电了。但是按了一下却没有任何反应。那该怎么办呢?小朋友们能帮忙解决这个问题吗?
步骤1 充电站编程
进入好好搭搭在线编程平台(http://haohaodada.com/new/adminmoban.php),选择顶部菜单的【创作】。
滚动到下面的【U盘下载模式编程】,选择【徽章板】,进入编程页面。(需要登录)
首先编写初始化代码。这里采用了与Microbit进行无线通信的方式,首先要初始化无线通信,并指定发送的频道。
主程序一直在监测数字端口D1是否为高电平。神经元模块会处理按钮的按键信息,如果匹配则会输出高电平。那么就显示“口令正确”,发送消息给麦昆小车:可以充电了。
连线方式如下:徽章板扩展板的D1接口连到神经元模块的输出。按钮接到神经元输入。
一开始的波形图是通过一个函数呈现的。实际上就是画点阵。
代码编写好下载到徽章板即可。
步骤2 麦昆编程
这里要用到无线通信与徽章板进行传输信息。首先需要下载一个补丁。下载地址:http://haohaodada.com/ueditor/php/upload/file/20190809/1565335632539384.zip
首先初始化麦昆。指定与徽章板相同的频道。因为没电的时候车灯闪烁,所以在主程序写一段代码,使得车灯每隔半秒闪烁。
当接收到无线消息后,先判断是否为充电的指令。如果是,则显示充电的动画。
步骤3 测试运行
按下神经元的黑色学习按钮,同时按照一定的节奏按黄色按钮(按照波形)。完成学习后松开所有按钮。测试一下是否能够按照指定接通神经元的电路。如果不行,则调节神经元模块上方蓝色的调节器,使得精度合适。
按照正确的按钮频率测试一下,看看是否能将充电信息传送给麦昆。
#include "Haoda.h"
#include "Arduino.h"
#include "Wire.h"
#include "Servo.h"
uint16_t hz_matrix[11];
/*描述该功能...
*/
void led(){
hz_matrix[0] = 0x000;hz_matrix[1] = 0x004;
hz_matrix[2] = 0x004;hz_matrix[3] = 0x004;
hz_matrix[4] = 0x004;hz_matrix[5] = 0x000;
hz_matrix[6] = 0x004;hz_matrix[7] = 0x004;
hz_matrix[8] = 0x004;hz_matrix[9] = 0x004;
hz_matrix[10] = 0x000;
BadgeDisplay_Write_Screen(hz_matrix,2,2+11);
hz_matrix[0] = 0x1fc;hz_matrix[1] = 0x100;
hz_matrix[2] = 0x100;hz_matrix[3] = 0x1fc;
hz_matrix[4] = 0x000;hz_matrix[5] = 0x004;
hz_matrix[6] = 0x004;hz_matrix[7] = 0x004;
hz_matrix[8] = 0x004;hz_matrix[9] = 0x000;
hz_matrix[10] = 0x1fc;
BadgeDisplay_Write_Screen(hz_matrix,13,13+11);
hz_matrix[0] = 0x100;hz_matrix[1] = 0x100;
hz_matrix[2] = 0x100;hz_matrix[3] = 0x000;
hz_matrix[4] = 0x100;hz_matrix[5] = 0x100;
hz_matrix[6] = 0x100;hz_matrix[7] = 0x1fc;
hz_matrix[8] = 0x000;hz_matrix[9] = 0x004;
hz_matrix[10] = 0x004;
BadgeDisplay_Write_Screen(hz_matrix,24,24+11);
hz_matrix[0] = 0x004;hz_matrix[1] = 0x004;
hz_matrix[2] = 0x000;hz_matrix[3] = 0x004;
hz_matrix[4] = 0x004;hz_matrix[5] = 0x004;
hz_matrix[6] = 0x004;hz_matrix[7] = 0x000;
hz_matrix[8] = 0x000;hz_matrix[9] = 0x000;
hz_matrix[10] = 0x000;
BadgeDisplay_Write_Screen(hz_matrix,35,35+11);
}
void setup()
{
BadgeDisplay_Init();
BadgeDisplay_Clear_Screen();
RADIO_init(microbit);
RADIO_TX_BitCH(7);
RADIO_TX_SETUP();
pinMode(7,INPUT);
BadgeDisplay_Init();
BadgeDisplay_Clear_Screen();
}
void loop()
{
led();
while (digitalRead(7)) {
BadgeDisplay_Clear_Screen();
BadgeDisplay_hzs("口令正确");
RADIO_TX("charge");
delay(2000);
BadgeDisplay_Clear_Screen();
BadgeDisplay_hzs("开始充电……");
delay(60000);
BadgeDisplay_Clear_Screen();
}
}
#include <DFMicrobit_Radio.h>
#include <Microbit_Matrix.h>
const uint8_t bitmap_CtCw[5] = {B11111,B10001,B10001,B10001,B11111};
const uint8_t bitmap_pd0k[5] = {B11111,B10001,B10001,B11111,B11111};
const uint8_t bitmap_Lz99[5] = {B11111,B10001,B11111,B11111,B11111};
const uint8_t bitmap_aYWF[5] = {B11111,B11111,B11111,B11111,B11111};
void onRadioReceive(String message)
{
if ((message == "charge")) {
while (1) {
MMatrix.show(bitmap_CtCw);
delay(500);
MMatrix.show(bitmap_pd0k);
delay(500);
MMatrix.show(bitmap_Lz99);
delay(500);
MMatrix.show(bitmap_aYWF);
delay(500);
}
}
}
void setup() {
Radio.turnOn();
Radio.setGroup(7);
Radio.setCallback(onRadioReceive);
}
void loop() {
digitalWrite(8,HIGH);
digitalWrite(12,HIGH);
delay(500);
digitalWrite(8,LOW);
digitalWrite(12,LOW);
delay(500);
}
评论