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的扩展添加


扩展文件夹包含三个文件
- js文件夹
里面包含js文件,是scratch在线模式下调用的,在调用外部arduino文件的.c和.h文件时可以什么都不写,但是注意不能没有,而且js文件的文件名字要和你扩展模块的文件名字一致。 - src
里面包含了你的arduino源文件,事先编辑调试好 - 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
图形化展示

那么写好文件后如何添加进去呢
- 在fb里点运行
- 在mblock里选择Arduino模式
- 点击扩展

- 点击扩展管理器

- 点击查看代码




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