给mBlock添加扩展模块
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添加扩展模块相关推荐
- 一次搞定OpenCV源码及扩展模块的编译与环境配置
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|计算机视觉工坊 版本:VS2017.CMake3.12. ...
- 新安装和已安装nginx如何添加未编译安装模块/补丁
新安装和已安装nginx如何添加未编译安装模块/补丁 --http://www.apelearn.com/bbs/forum.php?mod=viewthread&tid=10485& ...
- linux php c 扩展,linux php添加扩展库
CentOS_7.2编译安装PHP_5.6.20添加扩展模块 添加ZendGuardLoader扩展: # 解压ZendGuardLoader.so到"/usr/local/php/lib/ ...
- opencv3.0中contrib模块的添加
opencv从2.x到3.x是一个很大的转变,对于很多功能不完善.性能不稳定的模块,都被方法了extra_modules(扩展模块)里面了.这样倒是稳定了,但是对于我这样的新手,要添加这些扩展模块却是 ...
- php 扩展库curl下载,PHP添加CURL扩展库的二种方法
说明: 本次编译只是单独编译php的扩展库,然后将编译好的php扩展库加到现在运行的php中,不对现在运行的php重新编译,对现在运行的php没有任何影响. 有两种方法可以实现这一操作,下面分别介绍. ...
- 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 ...
- OpenCV3中nonfree不存在以及contrib模块的添加的问题及解决办法
主要问题: 1. OpenCV 3应用编程时,无法使用SURF/SIFT等nonfree算法,甚至根本不存在nonfree头文件. 2. 对opencv及opencv_contrib 进行cMake时 ...
- ansible自动化运维(一)——基本架构简介
1.介绍 ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理.应用部署.执行特定任务的开源平台. 它是基于python语言, ...
- 四十七、Ansible自动化入门
@Author:Runsen 本专栏,我决定更新Python自动化运维方面的,其实爬虫也是自动化爬取的方法,我认为Python爬虫本身就是自动化的一方面,我先从Ansible,到saltstack,然 ...
- 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 ...
最新文章
- 豆瓣评分 8.6,近 5 万读者学习的 Android 经典最新版出版,承载无数程序员的回忆......
- 生物计算论文笔记1:The construction of next-generationmatrices for compartmentalepidemic models
- 一个虐你千百遍的问题:“RPC好,还是RESTful好?”
- 消防管件做的机器人图片_消防管件组装成机器人 PM值临界时会报警并自动喷淋...
- springboot+springsecurity+mybatis plus之用户认证
- java线程知识体系
- 【图像融合】简单认识图像融合
- 共享库方案解决WAS中JAR包冲突
- 什么才是成熟的爱——爱的四个层次
- 防治计算机病毒微格教案反思,数字化微格教学实验室设备常见故障及处理方法...
- 12平键标准尺寸规格表_平键标准尺寸规格表
- 中级软件设计师知识点总结
- 浅谈如何根治慢性扁桃体炎-个人经验总结
- 高级UI-滤镜和颜色通道
- 【附源码】计算机毕业设计java信用卡增值业务系统设计与实现
- [我参加NVIDIA Sky Hackathon](模型训练yolo系列)
- Photo Album: 2008年5月-三亚爱琴海岸康年度假村-day1
- 用java写的游戏you_关于用Java写的贪吃蛇游戏的一些感想
- android开发的程序闪退,Android软件闪退
- c语言小学生四则运算出题程序