donatello1996 发表于 2019-7-18 00:09

【麦昆试用】迟来的第三帖——无线控制小车简单篇

<p><span style="font-size:20px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 小车上的microbit主控板没有富余的GPIO输入输出接口,使得我原本加8266wifi模块的想法落空了,主控板根本接不了8266除非飞线!我又不想飞线,怎么办?幸好我之前参加过e络盟比赛拿到过一块一模一样的microbit主控板,只不过是1.3版本(小车上的主控板是1.5版本,程序完全通用):</span></p>

<p></p>

<p><span style="font-size:20px">&nbsp;&nbsp;&nbsp;&nbsp; 两个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 &lt;DFMicrobit_Radio.h&gt;
#include &lt;Microbit_Matrix.h&gt;

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()&amp;&amp;!Button_B.isPressed())
{
    Radio.send("1");
}
else if(!Button_A.isPressed()&amp;&amp;Button_B.isPressed())
{
    Radio.send("2");
}
else if(!Button_A.isPressed()&amp;&amp;!Button_B.isPressed())
{
    Radio.send("3");
}
else if(Button_A.isPressed()&amp;&amp;Button_B.isPressed())
{
    Radio.send("4");
}
}
</code></pre>

<p><span style="font-size:20px">小车端代码:</span></p>

<pre>
<code class="language-cpp">#include &lt;DFRobot_URM10.h&gt;
#include &lt;Maqueen_Motor.h&gt;
#include &lt;Microbit_Matrix.h&gt;
#include &lt;DFRobot_NeoPixel.h&gt;
#include &lt;DFMicrobit_Radio.h&gt;

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>

dcexpert 发表于 2019-7-18 09:11

<p>蓝牙控制可以用&nbsp;bitty game controller 这个App,支持8个键,每个键对应按下和释放两个命令。</p>

dcexpert 发表于 2019-7-18 09:17

本帖最后由 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>&nbsp;</p>

<p>bitty controller可以配合makecode进行编程,其它软件不知道行不行,没有试过。</p>

<p>&nbsp;</p>

<p><img src="http://www.bittysoftware.com/images/bc_ui_gamepad.png" /></p>

donatello1996 发表于 2019-7-18 09:33

dcexpert 发表于 2019-7-18 09:17
http://www.bittysoftware.com/apps/bitty_controller.html

&nbsp;

bitty controller可以配合makecod ...

<p>有了解过这个软件,但是我还是想用lightblue抓一下透传的数据,不知道为啥不能识别,是MAC地址配置有问题还是配置了不可见</p>

dcexpert 发表于 2019-7-18 09:45

donatello1996 发表于 2019-7-18 09:33
有了解过这个软件,但是我还是想用lightblue抓一下透传的数据,不知道为啥不能识别,是MAC地址配置有问题 ...

<p>是不是底层程序问题?</p>
页: [1]
查看完整版本: 【麦昆试用】迟来的第三帖——无线控制小车简单篇