markdown/microbit.md
2025-03-11 14:56:06 +08:00

4.7 KiB

microbit

配置开发环境

详细可以查看https://github.com/microsoft/microcode/blob/main/docs/develop.md
对于简单的开发只需要按照一下配置环境

  • 安装 Node.js
  • 安装makecode命令行工具 (mkc for short)
npm install -g -u makecode
  • 克隆仓库
git clone https://github.com/microsoft/microcode
  • (one time only)
cd microcode
mkc init

构建

你可以在vscode直接打开终端,通过"Ctrl + `".

  • 启动一个编译服务器,它会自动编译并重新加载 一个编译web版本的编辑器
sh serve.sh

烧录micro:bit,

  • 构建microbit的hex文件
mkc build --hw n3 -d

如果你在codespaces里面运行,那么-d选项是不起作用的,你需要右键点击built/binary.hex然后选择Download...下载hex文件到micro:bit.

图片显示

assets.ts可以设置图片,更改图标,设置显示图片的命名 如果要添加其他的判断需要在tile.ts里面注册 如果要添加jacdac的图片和逻辑需要在jacdacImages()函数里面添加

jacdac

这只对官方支持的jacdac起效,对于自定义的暂时还需要研究 这里以motor为例 首先要在tile.ts里面进行设置,在microcode的命名空间里面设置

    export const TID_ACTUATOR_MOTOR_POWER = "A24"
    export const TID_ACTUATOR_MOTOR_SET_SPEED = "A25"

然后再在Tid枚举变量里面添加枚举亮,motor是制动器,所以在ACTUATOR_START和ACTUATOR_END之间添加,还要注意更改一下ACTUATOR_END的值,要与最后一个ACTUATOR的值相同

    TID_ACTUATOR_MOTOR_POWER = 56,
    TID_ACTUATOR_MOTOR_SET_SPEED = 57,

第三步,在tidToString()函数里面添加判断,如果是TID_ACTUATOR_MOTOR_SET_SPEED,就返回TID_ACTUATOR_MOTOR_SET_SPEED

    case Tid.TID_ACTUATOR_MOTOR_POWER:
        return TID_ACTUATOR_MOTOR_POWER
    case Tid.TID_ACTUATOR_MOTOR_SET_SPEED:
        return TID_ACTUATOR_MOTOR_SET_SPEED

第四步,在priority函数里面添加值(在末尾添加)

    case Tid.TID_ACTUATOR_MOTOR_POWER:
        return 604
    case Tid.TID_ACTUATOR_MOTOR_SET_SPEED:
        return 605

第五步,在getConstraints添加限制(具体可以看原函数) 第六步,在jdKind函数里面添加设置 TID_ACTUATOR_MOTOR_POWER
TID_ACTUATOR_MOTOR_SET_SPEED
设置这两个在jacdac中是什么含义和用法 第七步,在jdParam里面添加具体返回值 8.在jacs_topwriter.ts的ServiceClass枚举变量里添加枚举值(枚举值是官方给出的标识值,每个支持jacdac的设备都有对应的值),还有设置scToName的返回值(仿照样例前面的值) 9.在tiles.ts的jdExternalClass函数中添加判断和返回值

    case Tid.TID_ACTUATOR_MOTOR_POWER:
    case Tid.TID_ACTUATOR_MOTOR_SET_SPEED:
        return jacs.ServiceClass.Motor

在serviceClassName里卖弄添加值

    case Tid.TID_ACTUATOR_MOTOR_POWER:
    case Tid.TID_ACTUATOR_MOTOR_SET_SPEED:
        return jacs.ServiceClass.Motor

10.在serviceCommand函数里面添加寄存器命令 详细的命令参照jacdac-c里面模块头文件的定义,或者在jacdac官方里面查看具体定义 可以通过了解jacdac的协议,可以参考https://microsoft.github.io/jacdac-docs/reference/protocol/以及了解jacdac服务了解各个模块是如何调用的https://microsoft.github.io/jacdac-docs/reference/service-specification/

通过这操作后接入jacdac就可以得出连接的图像,图像的设置在assert.js里面

模块的逻辑实现

在jacs_topwriter.ts的emitRoleCommand函数里面添加具体的寄存器设置

                if (actuator == microcode.Tid.TID_ACTUATOR_MOTOR_SET_SPEED) {
                    // TODO no modulo yet in Jacs
                    // if (curr >= 12) { curr -= 12 }
                    this.currValue().write(
                        wr,
                        wr.emitExpr(Op.EXPR2_SUB, [
                            currValue(),
                            literal(3),
                        ])
                    )
                    // curr = curr * ((360/12) << 16)
                    this.currValue().write(
                        wr,
                        wr.emitExpr(Op.EXPR2_MUL, [
                            currValue(),
                            literal(1024 << 4),
                        ])
                    )
                }

可以参考sevo的实现

注册按键,传感器

更改汉化或者显示

在tooltips.ts里面更改

默认主界面

home.ts

编辑界面

editor.ts