文章目錄
- 一、前言
- 二、修改外觀資訊
-
- 1、下載下傳樣例庫
-
- 使用者庫檔案結構
- 2、修改json資訊
-
- json配置檔案
- 3、修改外觀圖檔以及積木塊矢量圖
-
- Mind+預覽效果
- 三、庫引入及修改編寫main.ts
-
- 1、引入庫檔案
- 2、main.ts描述檔案總述
-
- 檔案結構
- 修改後的代碼
- 最終效果
- 四、總結
一、前言
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”: “[email protected]”,
“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使用庫制作中。。。