【麦昆试用】迟来的第三帖——无线控制小车简单篇
<p><span style="font-size:20px"> 小车上的microbit主控板没有富余的GPIO输入输出接口,使得我原本加8266wifi模块的想法落空了,主控板根本接不了8266除非飞线!我又不想飞线,怎么办?幸好我之前参加过e络盟比赛拿到过一块一模一样的microbit主控板,只不过是1.3版本(小车上的主控板是1.5版本,程序完全通用):</span></p><p></p>
<p><span style="font-size:20px"> 两个microbit主控板均可通过micro usb线插到电脑上并分开烧录不同的代码,以及分开串口通信:</span></p>
<p></p>
<p><span style="font-size:20px">然后进入正题,无线通信,microbit主控板上使用的无线通信芯片是北欧半导体的nrf58122,一开始我还以为是标准蓝牙协议栈,还用手机的LightBlue APP进行抓包,但是一无所获,说明主控板的协议栈不是标准蓝牙协议栈,需要在APP端加入一些高端操作(目前我还没学会的蓝牙物联网通信知识)才可以进行透传:</span></p>
<p></p>
<p><span style="font-size:20px">但是好在microbit主控板是一个高度集成,入门难度极其简单的开发套件,如果有两块microbit主控板在的话,可以直接进行同频道透传,先打开无线通信外设,遥控端和小车端都选择频道1进行通信,接收部分使用回调函数实现:</span></p>
<p><span style="font-size:20px">遥控端代码:</span></p>
<pre>
<code class="language-cpp">#include <DFMicrobit_Radio.h>
#include <Microbit_Matrix.h>
void onRadioReceive(String message)
{
Serial.println(message);
message="";
}
void setup()
{
Radio.turnOn();
Radio.setGroup(1);
Radio.setCallback(onRadioReceive);
Serial.begin(115200);
}
void loop()
{
if(Button_A.isPressed()&&!Button_B.isPressed())
{
Radio.send("1");
}
else if(!Button_A.isPressed()&&Button_B.isPressed())
{
Radio.send("2");
}
else if(!Button_A.isPressed()&&!Button_B.isPressed())
{
Radio.send("3");
}
else if(Button_A.isPressed()&&Button_B.isPressed())
{
Radio.send("4");
}
}
</code></pre>
<p><span style="font-size:20px">小车端代码:</span></p>
<pre>
<code class="language-cpp">#include <DFRobot_URM10.h>
#include <Maqueen_Motor.h>
#include <Microbit_Matrix.h>
#include <DFRobot_NeoPixel.h>
#include <DFMicrobit_Radio.h>
DFRobot_URM10 urm10(1,2);
Maqueen_Motor motor;
DFRobot_NeoPixelrgb_display_15;
void onRadioReceive(String message)
{
if(message=="1")
{
motor.motorRun(motor.LEFT,motor.CW,255);
motor.motorRun(motor.RIGHT,motor.CW,255);
rgb_display_15.setRangeColor(-1, -1, 0xff0000);
}
else if(message=="2")
{
motor.motorRun(motor.LEFT,motor.CCW,255);
motor.motorRun(motor.RIGHT,motor.CCW,255);
rgb_display_15.setRangeColor(-1, -1, 0x00ff00);
}
else if(message=="3")
{
motor.motorRun(motor.LEFT,motor.CW,0);
motor.motorRun(motor.RIGHT,motor.CW,0);
rgb_display_15.setRangeColor(-1, -1, 0x0000ff);
}
else if(message=="4")
{
motor.motorRun(motor.LEFT,motor.CW,255);
motor.motorRun(motor.RIGHT,motor.CW,0);
rgb_display_15.setRangeColor(-1, -1, 0xffffff);
}
}
void setup()
{
Serial.begin(115200);
rgb_display_15.begin(15, 4, 255);
Radio.turnOn();
Radio.setGroup(1);
Radio.setCallback(onRadioReceive);
}
int flag_open_ble=0;
void loop()
{
}
</code></pre>
<p><span style="font-size:20px">看看效果:小车在前进、后退、停止时使用三种不同颜色的底灯进行表示,当按下遥控端A键时小车前进,按下遥控端B键时后退,同时按下时原地打转:</span></p>
<p></p>
<p>蓝牙控制可以用 bitty game controller 这个App,支持8个键,每个键对应按下和释放两个命令。</p>
本帖最后由 dcexpert 于 2019-7-18 09:28 编辑
<p><a href="http://www.bittysoftware.com/apps/bitty_controller.html">http://www.bittysoftware.com/apps/bitty_controller.html</a></p>
<p> </p>
<p>bitty controller可以配合makecode进行编程,其它软件不知道行不行,没有试过。</p>
<p> </p>
<p><img src="http://www.bittysoftware.com/images/bc_ui_gamepad.png" /></p>
dcexpert 发表于 2019-7-18 09:17
http://www.bittysoftware.com/apps/bitty_controller.html
bitty controller可以配合makecod ...
<p>有了解过这个软件,但是我还是想用lightblue抓一下透传的数据,不知道为啥不能识别,是MAC地址配置有问题还是配置了不可见</p>
donatello1996 发表于 2019-7-18 09:33
有了解过这个软件,但是我还是想用lightblue抓一下透传的数据,不知道为啥不能识别,是MAC地址配置有问题 ...
<p>是不是底层程序问题?</p>
页:
[1]