社区导航

 

搜索
查看: 357|回复: 4

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

[复制链接]

122

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-7-18 00:09 | 显示全部楼层 |阅读模式

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

IMG_20190717_234639.jpg

     两个microbit主控板均可通过micro usb线插到电脑上并分开烧录不同的代码,以及分开串口通信:

1.JPG

然后进入正题,无线通信,microbit主控板上使用的无线通信芯片是北欧半导体的nrf58122,一开始我还以为是标准蓝牙协议栈,还用手机的LightBlue APP进行抓包,但是一无所获,说明主控板的协议栈不是标准蓝牙协议栈,需要在APP端加入一些高端操作(目前我还没学会的蓝牙物联网通信知识)才可以进行透传:

Screenshot_2019-07-17-23-51-55-996_com.punchthrough.lightblueexplorer.png

但是好在microbit主控板是一个高度集成,入门难度极其简单的开发套件,如果有两块microbit主控板在的话,可以直接进行同频道透传,先打开无线通信外设,遥控端和小车端都选择频道1进行通信,接收部分使用回调函数实现:

遥控端代码:

#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");
  }
}

小车端代码:

#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_NeoPixel  rgb_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() 
{

}

看看效果:小车在前进、后退、停止时使用三种不同颜色的底灯进行表示,当按下遥控端A键时小车前进,按下遥控端B键时后退,同时按下时原地打转:

1.gif

来源:EEWorld MicroPython开源版块板块,转载请附上链接


回复

使用道具 举报

8453

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2019-7-18 09:11 | 显示全部楼层

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



回复

使用道具 举报

8453

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2019-7-18 09:17 | 显示全部楼层
本帖最后由 dcexpert 于 2019-7-18 09:28 编辑

http://www.bittysoftware.com/apps/bitty_controller.html

 

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

 

点评

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


回复

使用道具 举报

122

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2019-7-18 09:33 | 显示全部楼层
dcexpert 发表于 2019-7-18 09:17 http://www.bittysoftware.com/apps/bitty_controller.html   bitty controller可以配合makecod ...

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

点评

是不是底层程序问题?  详情 回复 发表于 2019-7-18 09:45


回复

使用道具 举报

8453

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

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

是不是底层程序问题?



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /3 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-8-21 02:47 , Processed in 0.174788 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表