mBlock 是基于开源软件 Scratch 2.0 开发的图形化编程软件,mBlock支持 Arduino 编程,从而让用户可以轻易创造出可交互的智能应用。

可以在深圳创客工场有限公司官网下载3.x.x版本的,链接:http://www.mblock.cc/zh-home/download/

以Demo扩展为例,带大家一步一步添加自己的扩展
我们要实现的效果:
(1)在线和离线控制Arduino数字脚输出高低电平
(2)通过自定义类实现Arduino指示LED闪烁
1、扩展文件有哪些内容
解压zip文件后可以看到以下文件
 
s2e文件:扩展模块的定义文件
js文件夹:在线通讯调用的JavaScript脚本(Scratch在线编程)
src文件夹:Arduino编译所需.h和.cpp的源文件(Arduino离线编程)

2、定义扩展模块
打开demo.s2e

{
  "extensionName": "GPIO_Demo",  //扩展名称
  "sort":0,  //扩展在mBlock中展示次序
  "javascriptURL":"js/demo.js",  //指定javascript文件的路径
  "extensionPort":0, //扩展使用的网络端口,0表示使用串口
  "firmware":"1.0",  //在线控制的固件版本号
  "blockSpecs": [  //模块定义数组       
    ["h","Demo Program","runArduino"],  
    [
      "w",  //"h"表示事件模块,“w”表示写模块,“r”表示读模块
      "digitalWrite( %n , %d.digital )", //模块显示的文字,%n为第一个参数是数字类型,%d.digital为第二个参数是名为“digital”的菜单值
      "digitalWrite", //执行的javascript函数
      "13", //第一个参数的默认值
      "HIGH", //第二个参数的默认值
       {            
          /* ******  该参数用于定义Arduino离线编程  ****** */
          "setup":"pinMode({0},OUTPUT); \n", //插入setup中的代码
          "inc":"",  //引用的头文件,例如#include <Arduino.h>
          "def":"", //定义实例或变量,例如double _num = 0;
          "work":"digitalWrite({0},{1});\n", //输出执行代码
          "loop":""  //插入loop函数中的代码
        }
      ],
      [
          "w",
          "blink",
          "blink",
          {
              "setup":"",
              "inc":"#include \"demo.h\"",
              "def":"DemoClass demo; \n",
              "work":"demo.blink(); \n",
               "loop":""
           }
        ]
     ],
     "menus": {
        "digital":["HIGH","LOW"] //菜单
     },
     "values":{
          "HIGH":1, //字符串对应的值
          "LOW":0
      },
     "translators":{
         "zh_CN":{  //汉化字典
            "Demo Program":"GPIO演示程序",
            "HIGH":"高电平",
            "LOW":"低电平",
            "digitalWrite( %n , %d.digital )":"数字口输出( %n ,%d.digital )",
            "blink":"闪烁翻转"
         }
      }
}


3、编写JavaScript脚本
在javascript中实现对应的函数

[JavaScript]  纯文本查看  复制代码
?
01
02
03
04
05
06
07
08
09
10
ext.digitalWrite = function (pin,level) {
   //实现digitalWrite 函数
   runPackage(30,pin, typeof level== "number" ?level:levels[level]);
};
var _level = 0;
ext.blink = function (){
   //实现GPIO blink 函数
   _level = 1 - _level;
   runPackage(30,13,_level);
};
4、编写Arduino源文件
在src文件夹里面增加demo.h和demo.cpp
在cpp文件实现函数blink

[C++]  纯文本查看  复制代码
?
1
2
3
4
5
6
7
8
9
#include "demo.h"
DemoClass::DemoClass(){
   pinMode(13,OUTPUT);
   level = 0;
}
void DemoClass::blink(){
   level = 1- level;
   digitalWrite(13,level);
}


5、打包zip文件
将所有文件压缩成zip包,在mBlock的扩展管理器中导入到程序中。
最终效果如下:


生成的Arduino代码
 



Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐