所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

麦昆火星探险记

汤果 汤果 2019-08-19 19:01:29

背景

随着地球资源逐渐枯竭,人们逐渐开始探索宇宙,寻找更合适的栖息地。有一天,麦昆乘着飞船来到了火星。开始了资源探索之旅。

projectImage

经过一段时间的探查,麦昆发现火星上到处都是环形坑,十分难走。于是没过多久,麦昆的两盏车灯就开始闪烁。这意味着麦昆的能源即将耗尽,需要赶紧去能源补给站充电。 


到了补给站,麦昆发现要充电还不是那么容易的一件事。充电站的显示屏上显示着一串神秘的波形,边上还有一个黄色的按钮。

projectImage

麦昆仔细想了一下,这个按钮肯定就是充电站的电源开关。只要接通后应该就可以充电了。但是按了一下却没有任何反应。那该怎么办呢?小朋友们能帮忙解决这个问题吗?

材料清单 材料清单
1x
麦昆: micro:bit教育机器人(麦昆+锂电池板)
1x
micro:bit 编程入门开发板
1x
徽章板
1x
BOSON神经元模块
2x
3Pin PH2.0连接线
projectImage
步骤1 步骤1
充电站编程

进入好好搭搭在线编程平台(http://haohaodada.com/new/adminmoban.php),选择顶部菜单的【创作】。

projectImage

滚动到下面的【U盘下载模式编程】,选择【徽章板】,进入编程页面。(需要登录)

projectImage

首先编写初始化代码。这里采用了与Microbit进行无线通信的方式,首先要初始化无线通信,并指定发送的频道。

projectImage

主程序一直在监测数字端口D1是否为高电平。神经元模块会处理按钮的按键信息,如果匹配则会输出高电平。那么就显示“口令正确”,发送消息给麦昆小车:可以充电了。


连线方式如下:徽章板扩展板的D1接口连到神经元模块的输出。按钮接到神经元输入。

projectImage

一开始的波形图是通过一个函数呈现的。实际上就是画点阵。

projectImage

代码编写好下载到徽章板即可。

步骤2 步骤2
麦昆编程

这里要用到无线通信与徽章板进行传输信息。首先需要下载一个补丁。下载地址:http://haohaodada.com/ueditor/php/upload/file/20190809/1565335632539384.zip 

projectImage

首先初始化麦昆。指定与徽章板相同的频道。因为没电的时候车灯闪烁,所以在主程序写一段代码,使得车灯每隔半秒闪烁。

projectImage

当接收到无线消息后,先判断是否为充电的指令。如果是,则显示充电的动画。

projectImage
步骤3 步骤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);
}
	                    				
Makelog作者原创文章,未经授权禁止转载。
1
0
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]