文章目录
一、前言
Mind+内置支持上百种常见的传感器库,并从V1.6.2开始,开放用户库,任何用户均可以制作和分享自己的用户库,并提供了本地及网络加载方式,方便大家的使用。
二、修改外观信息
1、下载样例库
样例库: https://gitee.com/dfrobot/ext-oled12864.git
用户库文件结构
└─newExtensions // 项目名称
│ config.json // 本用户库的配置文件
│ LICENSE.TXT // 许可证说明
│ README.md // 文档说明
│
└─arduinoC // arduino模式用户库根目录
│ main.ts // 图形块描述文件
│
├─libraries // arduino库文件,列出本扩展库所有需要引用的.c或.h或.cpp文件
│ └─oled12864
│ oled12864.cpp
│ oled12864.h
│ qrcode.c
│ qrcode.h
│
├─_images // 图片文件
│ featured.png // MindPlus扩展库展示图片
│ icon.svg // MindPlus中图形块上的图标文件
│
├─_locales // 翻译文件,支持多国语言
│ zh-cn.json
│ en.json
│
└─_menus // 下拉菜单参数,每个板子可以独立设置
leonardo.json
uno.json
nano.json
mega2560.json
microbit.json
mpython.json
2、修改json信息
解压后可以看到json文件,我们需要修改里面的一些配置信息,让库文件显示出简略的简介信息
json配置文件
{
“name”: {
“zh-cn”: “APDS-9960手势传感器”,
“en”: “APDS-9960 Sensor”
},
“description”: {
“zh-cn”: “识别向上、向下、向左、向右、靠近、远离六种手势。”,
“en”: “This sensor offers ambient light and color measuring, proximity detection, and touchless gesture sensing.”
},
“author”: “silvery”,
“email”: “silveryliu@gmail.com”,
“license”: “MIT”,
“isBoard”: false,
“id”: “APDS_9960”,
“version”: “0.0.1”,
“platform”: [“win”, “mac”, “web”],
“asset”: {
“arduinoC”: {
“dir”: “arduinoC/”,
“version”: “0.1.0”,
“board”: [
“arduino”,
“arduinounor3”,
“arduinonano”,
“leonardo”,
“mega2560”,
“esp32”
],
“main”: “main.ts”
}
}
}
3、修改外观图片以及积木块矢量图
_images:
删除_images中的所有文件
将一张600x372像素的照片放到文件夹中,命名为featured.png
在iconfont搜索led,找一个合适的图片,点击下载,颜色选择白色,点击SVG下载,保存到文件夹中,命名为icon.png
Mind+预览效果
此时可以打开Mind+,切换到上传模式,打开扩展,选择Arduno uno,然后导入用户库查看效果:
三、库引入及修改编写main.ts
1、引入库文件
打开libraries文件夹,将库文件放入
2、main.ts描述文件总述
图形块描述文件中通过//%后面的内容可以定义图形块外观
通过function定义block对应的生成代码以及位置
文件结构
enum xxxx {
//% 引脚描述内容定义,需要翻译的菜单项需要定义到menu文件中
//% 引脚生成代码定义
}
//% color="#xxxx" 整个扩展block的外观定义,通过 //% 后的描述内容定义
namespace xxxx {
//% block="xxx [xxx]" blockType="xxx" 第一个block的外观定义描述内容
//% block其他描述内容
export function xxxx(parameter: any, block: any) { //单个block的生成代码定义,通过函数描述生成代码的位置及内容
//生成的代码位置及内容描述
}
//% block="xxx [xxx]" blockType="xxx" 第二个block的外观定义描述内容
//% block其他描述内容
export function xxxx(parameter: any, block: any) {
//生成的代码位置及内容描述
}
//% block="xxx [xxx]" blockType="xxx" 第N个block的外观定义描述内容
//% block其他描述内容
export function xxxx(parameter: any, block: any) {
//生成的代码位置及内容描述
}
}
修改后的代码
enum GESTURE {
//% block="DIR_NONE"
DIR_NONE,
//% block="DIR_LEFT"
DIR_LEFT,
//% block="DIR_RIGHT"
DIR_RIGHT,
//% block="DIR_UP"
DIR_UP,
//% block="DIR_DOWN"
DIR_DOWN,
//% block="DIR_NEAR"
DIR_NEAR,
//% block="DIR_FAR"
DIR_FAR
}
//% color="#AA278D" iconWidth=40 iconHeight=40
namespace apds9960 {
//% block="gesture sensor initliallize SCL [SCL] SDA [SDA]" blockType="command"
//% SDA.shadow="dropdown" SDA.options="SDA"
//% SCL.shadow="dropdown" SCL.options="SCL"
export function init(parameter: any, block: any) {
// let intpin = parameter.INTPIN.code;
let sda = parameter.SDA.code;
let scl = parameter.SCL.code;
Generator.addInclude("includeWire", "#include <Wire.h>");
Generator.addInclude(
"includeSparkFun_APDS9960",
"#include <SparkFun_APDS9960.h>"
);
Generator.addObject(
"apdsObject",
"SparkFun_APDS9960",
`apds = SparkFun_APDS9960();`
);
Generator.addSetup(`initSetup`, `apds.init();`);
Generator.addSetup(
`enableGestureSensorSetup`,
`apds.enableGestureSensor(true);`
);
}
//% block="gesture available?" blockType="boolean"
export function isGestureAvailable(parameter: any, block: any) {
Generator.addCode("apds.isGestureAvailable()");
}
//% block="read gesture" blockType="reporter"
export function readGesture(parameter: any, block: any) {
Generator.addCode(`apds.readGesture()`);
}
//% block="gesture type [GESTURE]" blockType="reporter"
//% GESTURE.shadow="dropdown" GESTURE.options="GESTURE" GESTURE.defl="GESTURE.DIR_LEFT"
export function gesture(parameter: any, block: any) {
let gesture = parameter.GESTURE.code;
Generator.addCode( `${gesture}`);
}
}
最终效果
积木块样式:
程序拼接测试效果
四、总结
本次学习了如何使用Mind+自定义库功能,从样例库文件中学习了积木样式以及程序的定义,参考着其他库制作了这个库,从中学习到了很多不一样的知识,就目前来讲,对于自定义库编写还非常的不熟悉,期待自己能完成一个完全属于自己的库,为mind+这个软件添加自己的元素。
Ps:ADkeyboard使用库制作中。。。