Mblock的扩展模块的编写

Mblock的扩展模块的编写Mblock 的扩展模块的编写 什么是 mblock 扩展呢 mBlock 扩展能为 mBlock 添加新的语句块 您可以用扩展来支持您喜欢的 Arduino 传感器 或者 Lego LittleBits 等机器人和电子模块产品 基于近几年创客平台的火热 mblock 作为青少编程平台 也大受青睐 其中已经有不少扩展已经编写

大家好,我是讯享网,很高兴认识大家。

Mblock的扩展模块的编写

什么是mblock扩展呢
mBlock扩展能为mBlock添加新的语句块。您可以用扩展来支持您喜欢的Arduino传感器,或者Lego, LittleBits等机器人和电子模块产品。
基于近几年创客平台的火热,mblock作为青少编程平台,也大受青睐。其中已经有不少扩展已经编写,但是我们如何为添加自己的模块来完成图形化编程的任务呢?

编程环境的安装(Flash Builder4.7的安装)

安装教程和软件这个博主写的很详细,可以参考。FB安装
另外,还有一篇详细的安装文档共给分享。
在这里插入图片描述
讯享网
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意最后一步1.13如果不把 Arduino的软件安装路径下的全部文件打包放在portable中,mblock在arduino下将不能运行。

这个文档还详细介绍了mblock底层代码的功能,以及如何修改,在这片文章中只介绍如何添加扩展,其他框架的修改如果大家感兴趣,自行下载了解。
给出文档的目录(感兴趣自行下载)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面是网盘文档分享
链接:https://pan.baidu.com/s/1R97Xpw6-dCZU41DgAyEJVg
提取码:ia96

Flash builder完成界面

在这里插入图片描述

mblock的界面展示

在这里插入图片描述
在这里插入图片描述

mblock的扩展添加

在这里插入图片描述
在这里插入图片描述
扩展文件夹包含三个文件

  1. js文件夹
    里面包含js文件,是scratch在线模式下调用的,在调用外部arduino文件的.c和.h文件时可以什么都不写,但是注意不能没有,而且js文件的文件名字要和你扩展模块的文件名字一致
  2. src
    里面包含了你的arduino源文件,事先编辑调试好
  3. s2e文件
    图形化界面的设计文件,也可以在里面添加适量代码

s2e文件的编写

官网的解释:.s2e文件是扩展的主要文件。除基本信息外,.s2e文件还定义语句块,告诉mBlock下拉菜单是什么样子,以及完成多语言翻译工作( 如果有的话)
以下是官网给的文件编写的教程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可能官方给的很笼统,给出一个我写的完整.s2e文件

{ 
    "extensionName": "GPSA", "sort":0, "javascriptURL":"js/GPSA.js", "firmware":"1.0", "extensionPort":0, "blockSpecs": [ [ "w", "GPSABegin( %n )", "GPSABegin", "9600", { 
    "setup":"GPSA.gpsa_init(9600);\n", "inc":"#include \"GPSA.h\"", "def":"GPSAClass GPSA; \n", "work":"", "loop":"" } ], [ "w", "GetGPS", "GetGPS", { 
    "setup":"", "inc":"#include \"GPSA.h\"", "def":"GPSAClass GPSA; \n", "work":"GPSA.gpsa_getdata(); \n", "loop":"" } ], ], "translators":{ 
    "zh_CN":{ 
    "GPSABegin( %n )":"GPSA初始化( %n )", "GetGPS":"GPSArduino测量", } } } 

讯享网

这是一个关于北斗模块的扩展
来看看实现的模块化图形
在这里插入图片描述

这里调用的src里的源代码是

arduino的.c文件

讯享网#include "GPSA.h" GPSAClass::GPSAClass(){ 
    pinMode(13,OUTPUT); } void GPSAClass::gpsa_init( int a ){ 
    GPSSerial.begin(9600); DEBUGSerial.begin(9600); DEBUGSerial.println("NUIST"); DEBUGSerial.println("Wating..."); } void GPSAClass::gpsa_getdata() { 
    while (GPSSerial.available()) { 
    DEBUGSerial.write(GPSSerial.read()); } } 

.h文件的

#ifndef GPSA_h #define GPSA_h #include <Arduino.h> #define GPSSerial Serial #define DEBUGSerial Serial ///@brief Class for GPSAClass class GPSAClass { 
    public: GPSAClass(); void gpsa_init( int a ); void gpsa_getdata(); }; #endif 

另一个Demo供参考

数码管的显示扩展
.s2e文件

讯享网{ 
    "extensionName": "LED_DEMO", //扩展名称 "sort":0, //扩展在mBlock中展示次序 "javascriptURL":"js/demo.js", //指定javascript文件的路径 "extensionPort":0, //扩展使用的网络端口,0表示使用串口 "firmware":"1.0", //在线控制的固件版本号 "blockSpecs": [ ["h","Demo Program","runArduino"], [ "w", "led8_init( %n , %n , %n , %n , %n , %n , %n )", "led8_init", "2", "3", "4", "5", "6", "7", "8", { 
    "setup":"", "inc":"#include \"demo.h\"", "def":"DemoClass demo; \n", "work":"demo.led8_init({0},{1},{2},{3},{4},{5},{6}); \n", "loop":"" } ], [ "w", "led8_display( %n )", "led8_display", "0", { 
    "setup":"", "inc":"#include \"demo.h\"", "def":"DemoClass demo; \n", "work":"demo.led8_display({0}); \n", "loop":"" } ], ], "translators":{ 
    "zh_CN":{ 
    "Demo Program":"演示程序", "led8_init( %n , %n , %n , %n , %n , %n , %n )":"共阴数码管初始化( %n , %n , %n , %n , %n , %n , %n )", "led8_display( %n )":"数码管显示( %n )" } } } 

.js文件
在这里插入图片描述
空文件
src文件夹里的
.c文件

#include "demo.h" DemoClass::DemoClass(){ 
    pinMode(13,OUTPUT); } void DemoClass::led8_init(int a, int b, int c, int d, int e, int f, int g) { 
    SEG_a=a; SEG_b=b; SEG_c=c; SEG_d=d; SEG_e=e; SEG_f=f; SEG_g=g; pinMode(SEG_a,OUTPUT); pinMode(SEG_b,OUTPUT); pinMode(SEG_c,OUTPUT); pinMode(SEG_d,OUTPUT); pinMode(SEG_e,OUTPUT); pinMode(SEG_f,OUTPUT); pinMode(SEG_g,OUTPUT); } void DemoClass::led8_display(int num) { 
    digitalWrite(SEG_a,table[num][7]); digitalWrite(SEG_b,table[num][6]); digitalWrite(SEG_c,table[num][5]); digitalWrite(SEG_d,table[num][4]); digitalWrite(SEG_e,table[num][3]); digitalWrite(SEG_f,table[num][2]); digitalWrite(SEG_g,table[num][1]); } 

.h文件

讯享网#ifndef demo_h #define demo_h #include <Arduino.h> ///@brief Class for DemoClass class DemoClass { 
    public: DemoClass(); void led8_init(int a,int b,int c,int d,int e,int f, int g); //8段LED数码管初始化函数 void led8_display(int num); //显示数值num,num取值0~9 private: int SEG_a,SEG_b,SEG_c,SEG_d,SEG_e,SEG_f,SEG_g; //共阴数码管的真值表 unsigned char table[10][8]= { 
    { 
   0,0,1,1,1,1,1,1},//0 { 
   0,0,0,0,0,1,1,0},// 1 { 
   0,1,0,1,1,0,1,1},// 2 { 
   0,1,0,0,1,1,1,1},// 3 { 
   0,1,1,0,0,1,1,0},// 4 { 
   0,1,1,0,1,1,0,1},// 5 { 
   0,1,1,1,1,1,0,1},// 6 { 
   0,0,0,0,0,1,1,1},// 7 { 
   0,1,1,1,1,1,1,1},// 8 { 
   0,1,1,0,1,1,1,1},// 9 }; }; #endif 

图形化展示
在这里插入图片描述

那么写好文件后如何添加进去呢

  1. 在fb里点运行
  2. 在mblock里选择Arduino模式
  3. 点击扩展

在这里插入图片描述

  1. 点击扩展管理器
    在这里插入图片描述
  2. 点击查看代码
    在这里插入图片描述

最后就大功告成了,完成扩展,也可以发到mblock的官方github中共享代码哦

小讯
上一篇 2025-02-07 11:00
下一篇 2025-01-24 14:08

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/37360.html