micro:bit游戏手柄

重要更新:micro:bit以及本电机驱动扩展板已正式支持Scratch!DFRobot基于Scratch3.0开发的mind+,集成了micro:bit及其周边产品的图形化编程,离线图形化编程方式,支持Arduino和python代码生成。

一、新版GamePad for microbit V4.0

1. 简介

GamePad for microbit V4.0采用了摇杆设计的micro:bit控制手柄,采用了高精度的三轴模拟量摇杆。模拟量摇杆的加入,你可以同时控制麦昆的方向和速度了。并且,多达7个可编程按键,你也可以控制其它更多有趣的功能,或者切换为更简单易懂的开关量控制方式。
在最新的产品中,我们将电池盒直接板载在PCB板上了,在使用和教学体验上更加的方便和易用了。

2. 产品功能指示图

3. 技术规格

  • **供电电压:**3V-DC(2节AAA号电池)
  • **板载按键数量:**A、B、C、D、E、F、Z共计7个可编程按键
  • 摇杆:两轴模拟量(X :P1 Y:P2)一轴开关量(Z:P8)
  • **板载振动电机及LED:**P12
  • **板载嗡鸣器:**P0
  • **按键对应端口:**A(A)、B(B)、C(P13)、D(P14)、E(P15)、F(P16)、Z(P8)
  • **产品尺寸:**148 × 57 mm

4. 基于MakeCode编程

本章节默认你已经掌握如何使用MakeCode对micro:bit主板进行编程。故主要介绍产品本身的功能和编程方法,MakeCode基础使用部分不做赘述。

4-1. 链接地址及程序库

  • **MakeCode编程平台:**https://makecode.microbit.org
  • **GamePad程序库:**本产品不需要再添加第三方库,直接编程即可。

4-2. 骰子对战

项目介绍

本例程采用两块micro:bit无线通讯的方式,模拟摇骰子对战。运行本例程时,将程序下载到两块micro:bit主板,并将主板插在GamePad上即可。

程序链接

https://makecode.microbit.org/_YdWVgV7j7LhA

程序截图

运行效果

1、开机时将无线设置为组1,并初始化变量item的值为0;

2、当检测到振动的时候,将LED熄灭,value初始化为0;并将加速度的值用来产生一个1~6之间的随机数;

3、在LED点阵上从1开始到随机生成的数之间递增显示;并且播放音调;

4、把1~6的随机数通过无线发送给另外的主板;

5、将接收到的数字和自己生成的随机数做比较,如果数字大于对方,振动电机就振动,否则就不振动;

4-3. 摇杆开关量控制麦昆Lite

项目介绍

本例程中,我们通过程序将模拟摇杆设置为开关量,用于控制小车前进,后退,左转,右转。右侧的上下按键控制工程队的舵机运动,
左右按键(D、F按键)控制左右车灯的亮灭。
麦昆lite上安装了工程队-夹持器,接在舵机接口S1上。使用C和E按键对其进行控制。

程序链接

小车端程序链接:
https://makecode.microbit.org/_Vot7AfUW7g6D

手柄端程序链接:
https://makecode.microbit.org/_PtgDRughPidF

运行效果

运行程序,拨动摇杆,麦昆Lite执行方式如下:

4-4. 摇杆模拟量控制麦昆Lite

项目介绍

在上个例程中,只能控制小车前进、后退、左转、右转,但不能控制小车的速度。本例中,程序使用摇杆模拟量控制的方式,
同时控制小车的速度和方向。摇杆拨动的越多速度越快。右侧的上下按键控制装载机运动,左右按键控制车灯的亮灭。

程序链接
小车端程序链接

https://makecode.microbit.org/_3WRLraYKPM2y

手柄端程序链接

https://makecode.microbit.org/_1WYL7aKctdav

运行效果

运行程序,拨动摇杆,麦昆Lite执行方式如下:

注意:拨动摇杆的幅度越大,小车运行的速度越快。

二、老版micro:bit手柄

1. 简介

micro:bit游戏手柄

micro:bit游戏手柄是基于micro:bit主板的扩展手柄。你只需要插上micro:bit主板,就能将micro:bit变身成为一个无线遥控手柄或者是一个无线对战游戏机。该产品上下均采用亚克力板封装,手感好,再也不会像裸露电路板那样有焊接点刺手的感觉了。
本游戏手柄共设置8个按键,左侧分布了上、下、左、右四个按键,右侧为X、Y按键,前方引出了A、B两个按键。
本游戏手柄还内置了振动电机、嗡鸣器、LED,这些资源都是可编程控制的。使用图形化编程,可以瞬间让你的micro:bit变身成一个多媒体振动手柄或多媒体互动游戏机。
编程平台支持makecode图形化编程和python编程,从入门到进阶的编程教育,都是非常适合的工具。

2. 产品参数及配置

  • 供电电压:3VDC(2节7号电池)
  • 板载按键数量:上、下、左、右、X、Y、 A、B 共计8个可编程按键
  • 板载振动电机×1
  • 板载LED×1
  • 板载嗡鸣器×1
  • 亚克力底板×1
  • 亚克力面板×1
  • 2节7号带盖电池盒×1
  • 蘑菇头魔术贴×2
  • 铜柱×4
  • 螺丝×8
  • 大按键帽×6
  • 小按键帽×2
  • 产品尺寸:148 × 57(mm)

3. 功能说明

4. Mind+(基于Scratch3.0)图形化编程

点击链接,火速下载mind+最新版本:https://mindplus.cc

手柄试用:mind+试用体验_体感消除小游戏

https://mc.dfrobot.com.cn/thread-37859-1-1.html
; (出处: DF创客社区 - 分享创造的喜悦)

1、下载及安装软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装

2、选择“上传模式”或“实时模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程

3、“扩展”中选择“主控板”中的“micro:bit”。 详细教程:Mind+基础wiki教程-加载扩展库流程

4、进行编程
5、连接micro:bit板与电脑,菜单“连接设备”,“上传到设备”

4-1. 按键控制图标显示

例如按钮UP按下,则只需要检测P8引脚即可,其他按键对应“功能说明”中引脚图即可。

效果

按下UP按钮显示屏显示一个向上的箭头,并播放音符(注意打开手柄上的电源开关和蜂鸣器开关)。 按下DOWN按钮显示屏显示一个向下的箭头,并播放另一个音符。

5. makecode图形化编程

MakeCode基础操作教程 :点击进入makecode编程基础操作教程
gamePad软件库地址 :https://github.com/DFRobot/pxt-gamePad 如何添加软件包

5-1. 事件触发方式的按键

事件触发方式-按下和松开按键

程序执行结果:当按下X键的时候,振动电机振动,LED灯亮;当松开X键的时候,振动电机停止,LED灯灭。

事件触发方式-点击按键

程序执行结果:当按下X键的时候,振动电机振动,LED灯亮;当按下Y键的时候,振动电机停止,LED灯灭。

5-2. 循环查询方式的按键

事件触发方式-点击按键

程序执行结果:当检测到按下X键的时候,振动电机按175的强度振动,当松开X键的时候,振动电机停止振动。

6. makecode实例教程

6-1. 剪刀石头布-猜拳对战游戏

点击链接进入图形化源程序:剪刀石头布

[石头剪刀布]

程序执行过程:

1、首先设置两个主板都在1号无线组,这样才能相互通信;

2、当按下左键的时候,LED点阵显示剪刀图案,并无线发送数字1;

3、当按下下键的时候,LED点阵显示石头图案,并无线发送数字2;

4、当按下右键的时候,LED点阵显示布的图案,并无线发送数字3;

5、在无限循环内,将无线接收到的数字和自己的数字进行判断和对比;如果输了,则显示×,如果赢了,则显示√;

6、显示了输赢结果后,对自己的数据和接收的数据进行清零;

6-2. 摇骰子对战游戏

点击链接进入图形化源程序:摇骰子对战游戏

[摇骰子]

程序执行过程:

1、开机时将无线设置为组1,并初始化变量item的值为0;

2、当检测到振动的时候,将LED熄灭,value初始化为0;并将加速度的值用来生产一个1~6之间的随机数;

3、在LED点阵上从1开始到随机生成的数之间递增显示;并且播放音调和振动电机;

4、把1~6的随机数通过无线发送给另外的主板;

5、将接收到的数字和自己生成的随机数做比较,如果小于对方就灭灯,否则就亮灯;

6-3. 遥控手柄

点击链接进入手柄端图形化源程序:手柄
点击链接进入小车端图形化源程序:car

手柄端程序

程序执行过程:

1、开机的时候先设置无线组为1;

2、当不同的按键按下的时候,发送不同的数字,让小车执行不同的动作;

3、当按键松开的时候,统一发送数字0,目的是让小车停止;

小车端程序

程序执行过程:

1、开机的时候先设置无线组为1;

2、当接受到不同的数字,就让小车执行不同的动作,如前进、后退、左转、右转;

7. BXY平台python编程

7-1. 下载《BXY》python编程软件

《BXY》pthon编程平台官方下载地址:[https://gitee.com/dfrobot/iPy/raw/master/BXY.exe

[BXY pthon编程平台官方教程]

8-2. BXY平台python函数列表

8-3. 按键是否被按下

如果指定的按钮被按下返回True,否则返回False。

  • gamePad.UP_pressed() #按键UP是否被按下
  • gamePad.DOWN_pressed() #按键DOWN是否被按下
  • gamePad.LEFT_pressed() #按键LEFT是否被按下
  • gamePad.RIGHT_pressed() #按键RIGHT是否被按下
  • gamePad.XPAD_pressed() #按键X是否被按下
  • gamePad.YPAD_pressed() #按键Y是否被按下
  • button_a.is_pressed() #按键A是否被按下
  • button_b.is_pressed() #按键B是否被按下

返回值:被按下的话,返回1,否则返回0;

例:

from microbit import *      #载入microbit库
import gamePad              #载入游戏手柄库

gamePad = gamePad()         #创建一个手柄对象,用于调用里面的按键

while True:
  if gamePad.UP_pressed():    #UP如果被按下的话
    pin12.write_digital(1)      #给P12高电平,让电机振动
  elif gamePad.UP_pressed()==0:  #如果UP没被按下的话
    pin12.write_digital(0)      #给P12低电平,电机停止振动

#该程序的功能是:当按下UP按键的时候,接在P12口的振动电机振动,松开按键时,停止振动。

8-4. 按键是否曾经被按下

函数解释:如果指定的按钮在开机或复位之后被按下过,则返回True,否则返回False。

  • gamePad.UP_was() #按键UP是否曾经被按下
  • gamePad.DOWN_was() #按键DOWN是否曾经被按下
  • gamePad.LEFT_was() #按键LEFT是否曾经被按下
  • gamePad.RIGHT_was() #按键RIGHT是否曾经被按下
  • gamePad.XPAD_was() #按键X是否曾经被按下
  • gamePad.YPAD_was() #按键Y是否曾经被按下
  • button_a.was_pressed() #按键A是否曾经被按下
  • button_b.was_pressed() #按键B是否曾经被按下

返回值:按下的话,返回1,否则返回0;

例:
from microbit import *      #载入microbit库
import gamePad              #载入游戏手柄库

gamePad = gamePad()         #创建一个手柄对象,用于调用按键

while True:
  pin12.write_digital(1)
  sleep(3000)
  pin12.write_digital(0)
  sleep(3000)
  if gamePad.UP_was()==1:
    pin16.write_digital(1)
  elif gamePad.UP_was()==0:
    pin16.write_digital(0)


#该程序的功能是:开机时,振动电机会振动3秒,然后停止3秒,在这期间,如果有按下过UP键,LED会亮,如果没有按下过UP键,LED不会亮。

8-5. 记录按键按下的次数

函数说明:返回开机或复位后,按键被按下的次数,并且调用此方法后,会将计数置0。

  • gamePad.UP_get() #记录UP按键按下的次数
  • gamePad.DOWN_get() #记录DOWN按键按下的次数
  • gamePad.LEFT_get() #记录LEFT按键按下的次数
  • gamePad.RIGHT_get() #记录RIGHT按键按下的次数
  • gamePad.XPAD_get() #记录X按键按下的次数
  • gamePad.YPAD_get() #记录Y按键按下的次数
  • button_a.get_presses() #记录A按键按下的次数
  • button_b.get_presses() #记录B按键按下的次数

返回值:按键被按下的次数,整数型

例:
from microbit import *      #载入microbit库
import gamePad              #载入游戏手柄库

gamePad = gamePad()         #创建一个手柄对象,用于调用里面的按键

while True:
  display.scroll(str(gamePad.UP_get()))
  sleep(2000)

#该程序的功能是:记录2秒钟内,UP按键按下的次数,并显示在点阵屏。

疑难解答

更多问题及有趣的应用,请访问论坛

更多

DFshopping_car1.png DFRobot商城购买链接