200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > microbit c语言编程软件 Micro:bit系列教程25:自定义Micro:bit软件包

microbit c语言编程软件 Micro:bit系列教程25:自定义Micro:bit软件包

时间:2020-06-13 10:23:33

相关推荐

microbit c语言编程软件 Micro:bit系列教程25:自定义Micro:bit软件包

cpp代码:/**

* 使用此文件来定义自定义函数和图形块。

* 想了解更详细的信息,请前往 /blocks/custom

*/

/**

* 自定义图形块

*/

enum REGISTER {

IODIRA = 0x00,

IODIRB = 0x01,

IPOLA = 0x02,

IPOLB = 0x03,

GPINTENA = 0x04,

GPINTENB = 0x05,

DEFVALA = 0x06,

DEFVALB = 0x07,

INTCONA = 0x08,

INTCONB = 0x09,

IOCONA = 0x0A,

IOCONB = 0x0B,

GPPUA = 0x0C,

GPPUB = 0x0D,

INTFA = 0x0E,

INTFB = 0x0F,

INTCAPA = 0x10,

INTCAPB = 0x11,

GPIOA = 0x12,

GPIOB = 0x13,

OLATA = 0x14,

OLATB = 0x15

}

enum PIN {

A = 0,

B = 1

}

//% weight=5 color=#9900CC icon="\uf53b"

namespace MCP23017 {

const MCP23017_ADDRESS = 0x20

const MCP23017_IODIRA = 0x00

const MCP23017_IPOLA = 0x02

const MCP23017_GPINTENA = 0x04

const MCP23017_DEFVALA = 0x06

const MCP23017_INTCONA = 0x08

const MCP23017_IOCONA = 0x0A

const MCP23017_GPPUA = 0x0C

const MCP23017_INTFA = 0x0E

const MCP23017_INTCAPA = 0x10

const MCP23017_GPIOA = 0x12

const MCP23017_OLATA = 0x14

const MCP23017_IODIRB = 0x01

const MCP23017_IPOLB = 0x03

const MCP23017_GPINTENB = 0x05

const MCP23017_DEFVALB = 0x07

const MCP23017_INTCONB = 0x09

const MCP23017_IOCONB = 0x0B

const MCP23017_GPPUB = 0x0D

const MCP23017_INTFB = 0x0F

const MCP23017_INTCAPB = 0x11

const MCP23017_GPIOB = 0x13

const MCP23017_OLATB = 0x15

let initialized = false

function i2cwrite(addr: number, reg: number, value: number): void {

let buf = pins.createBuffer(2);

buf[0] = reg;

buf[1] = value;

pins.i2cWriteBuffer(addr, buf);

}

function i2cread(addr: number, reg: number): number {

pins.i2cWriteNumber(addr, reg, NumberFormat.UInt8BE);

let val = pins.i2cReadNumber(addr, NumberFormat.UInt8BE);

return val;

}

function initMCP23017(): void {

for (let regAddr = 0; regAddr < 22; regAddr++) {

if (regAddr == 0 || regAddr == 1) {

i2cwrite(MCP23017_ADDRESS, regAddr, 0xFF);

}

else {

i2cwrite(MCP23017_ADDRESS, regAddr, 0x00);

}

}

//configue all PinA output

i2cwrite(MCP23017_ADDRESS, MCP23017_IODIRA, 0x00);

//configue all PinB input

i2cwrite(MCP23017_ADDRESS, MCP23017_IODIRB, 0xFF);

//configue all PinB pullUP

i2cwrite(MCP23017_ADDRESS, MCP23017_GPPUB, 0xFF);

initialized = true;

}

/**

*Read data from the register

* @param reg [0-21] register of mcp23017; eg: 0, 15, 23

*/

//% blockId=ReadReg block="Read register |%reg| data"

//% weight=65

export function ReadReg(reg: REGISTER): number {

let val = i2cread(MCP23017_ADDRESS, reg);

return val;

}

/**

* WriteData to PinA or PinB

* @param pin [0-1] choose PinA or PinB; eg: 0, 1

* @param value [0-255] pulse of servo; eg: 128, 0, 255

*/

//% blockId=WritePin block="Set P |%pin| value |%value|"

//% weight=75

//% value.min=0 value.max=255

export function WritePin(pin: PIN, value: number): void {

if (!initialized) {

initMCP23017();

}

if (pin == 0) {

i2cwrite(MCP23017_ADDRESS, MCP23017_GPIOA, value);

}

else {

i2cwrite(MCP23017_ADDRESS, MCP23017_GPIOB, value);

}

}

/**

*ReadData From PinA or PinB

* @param pin [0-1] choose PinA or PinB; eg: 0, 1

*/

//% blockId=ReadPin block="Read data from |%pin|"

//% weight=85

export function ReadPin(pin: PIN): number {

if (!initialized) {

initMCP23017();

}

if (pin == 0) {

let val = i2cread(MCP23017_ADDRESS, MCP23017_GPIOA);

return val;

}

else {

let val = i2cread(MCP23017_ADDRESS, MCP23017_GPIOB);

return val;

}

}

}

4.编写测试代码

在采用pxt

init生成的文件中,test.ts文件为测试文件,当作为软件包添加到其它项目中时,该文件不会被编译,而作为开发流程中的功能测试时,该文件将会被编译,且单独执行。

现编写测试代码,对输出功能进行测试:

在该测试代码中,其操作为对MCP23017的A引脚的输出寄存器写入十进制数值:85,其二进制为:01010101,对应PA0至PA7的电平状态分别为:高低高低高低高低。

此次测试代码为:

cpp代码:/* tests go here; this will not be compiled when this package is used as a library*/

basic.forever(() => {

MCP23017.WritePin(0,85);

})

5.编译检查,测试

先进行语法检查,如果有语法出错,VS code会进行提示,及时在VS Code中改正即可:

打开Windows命令行,进入到新建的以软件包名称命名的文件夹(本次进入到MCP23017文件夹),进行以下操作:

编译:(可选)在命令行输入:pxt build,该步骤主要方便检查语法错误,实际中,VS Code能够提示语法错误,可先在VS Code中修改语法错误。

编译并下载:(可选)在命令行输入:pxt deploy,该步骤为先编译,编译成功后直接下载,实际中,通过makecode进行下载更便捷。

打开makecode进行编辑并下载:(推荐)

在命令行进入到microbit路径(该路径下包含projects文件夹,运行pxt serve将寻找projects文件夹,若找不到,则将自动创建新项目,因此必须先进入到含有projects子文件夹的microbit文件夹),如下所示:

在此基础上,在命令行输入:pxt serve,运行makecode服务器,自动打开makecode网页:

此时,软件包已经加载到左侧,可预览软件包的颜色及图标,并可对图形块进行移动,如下图所示:

但是,在test.ts文件中,仅能以JavaScript代码的形式进行显示。

连接microbit,点击左下角的download,程序将下载到microbit中,运行的是test.ts文件中的代码。

下载后,将MCP23017的PA0-PA7连接至8个LED(低电平亮),观察得,PA0-PA7连接的LED分别为灭亮灭亮灭亮灭亮,软件包测试通过。

6.发布

软件包测试通过后,将其发布到Github,此次发布的本地仓库为MCP23017文件夹,具体发布流程请参考廖雪峰的Git教程:

最后,打开Windows命令行进入到MCP23017文件夹,输入pxt bump命令,修改版本号(修改pxt.json文件中version键对应的值)。

将软件包发布后,即可根据Github仓库链接找到软件包,可在makecode中自由扩展该软件包到项目中了。

参考链接

搭建环境,及Github的使用:

图形块定义

Github教程

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。