【Mind+】APDS9960第三方用户库实现


一、前言

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使用库制作中。。。
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值