Mblock的扩展模块的编写

Mblock的扩展模块的编写

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

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

安装教程和软件这个博主写的很详细,可以参考。FB安装
另外,还有一篇详细的安装文档共给分享。
在这里插入图片描述
Mblock的扩展模块的编写_第1张图片
Mblock的扩展模块的编写_第2张图片
Mblock的扩展模块的编写_第3张图片
Mblock的扩展模块的编写_第4张图片
Mblock的扩展模块的编写_第5张图片
Mblock的扩展模块的编写_第6张图片
Mblock的扩展模块的编写_第7张图片
Mblock的扩展模块的编写_第8张图片
注意最后一步1.13如果不把 Arduino的软件安装路径下的全部文件打包放在portable中,mblock在arduino下将不能运行。

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

Flash builder完成界面

Mblock的扩展模块的编写_第12张图片

mblock的界面展示

Mblock的扩展模块的编写_第13张图片
Mblock的扩展模块的编写_第14张图片

mblock的扩展添加

在这里插入图片描述
Mblock的扩展模块的编写_第15张图片
扩展文件夹包含三个文件

  1. js文件夹
    里面包含js文件,是scratch在线模式下调用的,在调用外部arduino文件的.c和.h文件时可以什么都不写,但是注意不能没有,而且js文件的文件名字要和你扩展模块的文件名字一致

  2. src
    里面包含了你的arduino源文件,事先编辑调试好

  3. s2e文件
    图形化界面的设计文件,也可以在里面添加适量代码

s2e文件的编写

官网的解释:.s2e文件是扩展的主要文件。除基本信息外,.s2e文件还定义语句块,告诉mBlock下拉菜单是什么样子,以及完成多语言翻译工作( 如果有的话)
以下是官网给的文件编写的教程
Mblock的扩展模块的编写_第16张图片
Mblock的扩展模块的编写_第17张图片
Mblock的扩展模块的编写_第18张图片
Mblock的扩展模块的编写_第19张图片
Mblock的扩展模块的编写_第20张图片
可能官方给的很笼统,给出一个我写的完整.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测量",
		
		}
	}
}

这是一个关于北斗模块的扩展
来看看实现的模块化图形
Mblock的扩展模块的编写_第21张图片

这里调用的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 
#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 
///@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

图形化展示
Mblock的扩展模块的编写_第22张图片

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

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

Mblock的扩展模块的编写_第23张图片

  1. 点击扩展管理器
    Mblock的扩展模块的编写_第24张图片
  2. 点击查看代码
    Mblock的扩展模块的编写_第25张图片

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

你可能感兴趣的:(Mblock)