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
- 在浏览器打开http://127.0.0.1:7001/
烧录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