1.mblock简介

mblock是基于开源软件Scratch开发的图形化编程软件,支持Makeblock机器人和Arduino编程,从而让用户可以轻易创造出可交互的智能应用。关于mblock请查看官网:http://www.mblock.cc/

2.关于mblock扩展

在使用mblock编写arduino程序时,有些arduino功能mblock并没有提供,这就需要自行编写mblock扩展,为mblock添加新的语句块,丰富mblock对arduino硬件的控制功能。关于mblock扩展的编写,请参考mblock官网提供的教程:http://www.mblock.cc/zh-home/docs/mblock-extension-center-cn/?noredirect=zh_CN

3.编写一个mblock扩展

在mblcok提供的官方扩展教程中提到,mblock语句都有两个模式Scratch模式和Arduino模式。Scratch模式是在线模式,Arduino控制板必修一直连接电脑才可以。Arduino模式下,程序被烧写到Arduino控制板中,arduino脱离电脑自行运行。因此Scratch称为在线模式,Arduino称为离线模式。
在mblock提供的扩展demo示例中,一个mblock扩展一般包括三个部分,xxx.s2e,js文件夹,src文件夹;其中xxx.s2e文件是每个扩展必须实现的文件,js文件夹中是Scratch模式下的Javascript文件xxx.js,src文件夹中是额外的C程序文件。如果要实现Scratch模式,则xxx.js文件必须实现,如果不需要Scratch模式,则xxx.js文件不必实现。

共阴8段数码管只实现Arduino模式,因此xxx.js不用实现,只编写xxx.s2e即可,同时实现控制LED显示数字的C程序。该实现是在mblock提供的扩展demo的基础上修改而来。整个扩展包好demo.s2e文件和src文件夹,其中src文件夹中是demo.cpp文件和demo.h文件。

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 )"}}
}

在编写demo.s2e文件时需要注意:
1.由于本功能没有实现Scratch模式,因此"javascriptURL":""字段要设置为空,否则会报错。
2.led8_init函数指定8段数码管引脚使用的Arduino数字引脚,这里8段数码管的引脚ag接到arduino的数字28口,led8_init( %n , %n , %n , %n , %n , %n , %n )写的时候,%n前后都有一个空格,否则在mblock中该函数会参数会显示不完整。
3.led8_init函数和led_display函数都是在src文件夹中的demo.cpp中实现的函数
4.“work”:“demo.led8_init({0},{1},{2},{3},{4},{5},{6}); \n”,意思是调用demo对象中的led8_init函数。
5."translators"字段中是把函数名称转换成中文显示在mblock中。

demo.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~9private: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

demo.cpp文件内容

#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]);
}

demo.js 文件为空文件

如果不加这个文件将导入不进去。


把该扩展导入到mblock中,然后在mblock的扩展菜单选中“Seg_LED”,在mblock的机器人模块中就会出现Sed_LED扩展模块,显示出“共阴数码管初始化”和“数码管显示”两个语句,

编写测试程序,如图1所示,数码管显示正常。

本博客程序下载地址:https://download.csdn.net/download/qq_27251141/11154279

给mBlock添加扩展模块相关推荐

  1. 一次搞定OpenCV源码及扩展模块的编译与环境配置

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|计算机视觉工坊 版本:VS2017.CMake3.12. ...

  2. 新安装和已安装nginx如何添加未编译安装模块/补丁

    新安装和已安装nginx如何添加未编译安装模块/补丁 --http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=10485& ...

  3. linux php c 扩展,linux php添加扩展库

    CentOS_7.2编译安装PHP_5.6.20添加扩展模块 添加ZendGuardLoader扩展: # 解压ZendGuardLoader.so到"/usr/local/php/lib/ ...

  4. opencv3.0中contrib模块的添加

    opencv从2.x到3.x是一个很大的转变,对于很多功能不完善.性能不稳定的模块,都被方法了extra_modules(扩展模块)里面了.这样倒是稳定了,但是对于我这样的新手,要添加这些扩展模块却是 ...

  5. php 扩展库curl下载,PHP添加CURL扩展库的二种方法

    说明: 本次编译只是单独编译php的扩展库,然后将编译好的php扩展库加到现在运行的php中,不对现在运行的php重新编译,对现在运行的php没有任何影响. 有两种方法可以实现这一操作,下面分别介绍. ...

  6. php 加载curl 扩展,PHP添加CURL扩展库的二种方法

    wget http://curl.haxx.se/download/curl-7.19.6.tar.gz tar -zxvf curl-7.19.6.tar.gz cd curl-7.19.6 ./c ...

  7. OpenCV3中nonfree不存在以及contrib模块的添加的问题及解决办法

    主要问题: 1. OpenCV 3应用编程时,无法使用SURF/SIFT等nonfree算法,甚至根本不存在nonfree头文件. 2. 对opencv及opencv_contrib 进行cMake时 ...

  8. ansible自动化运维(一)——基本架构简介

    1.介绍 ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理.应用部署.执行特定任务的开源平台. 它是基于python语言, ...

  9. 四十七、Ansible自动化入门

    @Author:Runsen 本专栏,我决定更新Python自动化运维方面的,其实爬虫也是自动化爬取的方法,我认为Python爬虫本身就是自动化的一方面,我先从Ansible,到saltstack,然 ...

  10. Nginx+Php(FastCGI、Php-fpm)+Mysql+Zend+Memcache+Phpmyadmin+MongoDB+TT安装

    === 源码包下载 === wget http://www.monkey.org/~provos/libevent-1.2.tar.gz wget http://www.danga.com/memca ...

最新文章

  1. 豆瓣评分 8.6,近 5 万读者学习的 Android 经典最新版出版,承载无数程序员的回忆......
  2. 生物计算论文笔记1:The construction of next-generationmatrices for compartmentalepidemic models
  3. 一个虐你千百遍的问题:“RPC好,还是RESTful好?”
  4. 消防管件做的机器人图片_消防管件组装成机器人 PM值临界时会报警并自动喷淋...
  5. springboot+springsecurity+mybatis plus之用户认证
  6. java线程知识体系
  7. 【图像融合】简单认识图像融合
  8. 共享库方案解决WAS中JAR包冲突
  9. 什么才是成熟的爱——爱的四个层次
  10. 防治计算机病毒微格教案反思,数字化微格教学实验室设备常见故障及处理方法...
  11. 12平键标准尺寸规格表_平键标准尺寸规格表
  12. 中级软件设计师知识点总结
  13. 浅谈如何根治慢性扁桃体炎-个人经验总结
  14. 高级UI-滤镜和颜色通道
  15. 【附源码】计算机毕业设计java信用卡增值业务系统设计与实现
  16. [我参加NVIDIA Sky Hackathon](模型训练yolo系列)
  17. Photo Album: 2008年5月-三亚爱琴海岸康年度假村-day1
  18. 用java写的游戏you_关于用Java写的贪吃蛇游戏的一些感想
  19. android开发的程序闪退,Android软件闪退
  20. c语言小学生四则运算出题程序

热门文章

  1. arma找不到合适的模型_ARMA模型建模过程中存在的问题分析.htm
  2. 直播软件视频流怎样测试,手把手教你,如何用视频号直播推流!
  3. 基于wincc的虚拟电梯设计_PLC基于WinCC的四层电梯监控系统设计+梯形图
  4. Linux系统分区概念
  5. GD32f103介绍第二章
  6. 网易云信浏览器WebRTC视频聊天集成
  7. 艾宾浩斯英语单词记忆表格生成器
  8. 扩展欧几里德算法 C# 实现
  9. Linux内核配置选项 (经典学习)
  10. 极光笔记|极光推送在APICloud平台的使用教程