Mixly基本原理

Mixly可以看作是介于普通用户与Arduino IDE之间桥梁,通过这个桥梁,即使用户不懂C语言的语法,也可以利用图形化程序编写Arduino程序。Mixly的基本原理是将图形化程序转化成C语言,再利用Arduino IDE上传到硬件中。在我们动手编写第三方库之前,先来了解Mixly是如何将图形化程序转化成C语言的。
根目录下的xxx.xml文件定义了图形块的基本信息,比如类别、名称,ID等。block/xxx.js文件定义了每个图形块的样式,比如颜色、文字、图标等。generator/xxx.js文件是将图形块程序转化成C语言的关键部分。language/xxx/en.js(zh-hans.js)等文件是语言文件,en.js是英文语言文件,zh-hans.js是简体中文语言文件,zh-hant.js是繁体中文语言文件。该类文件定义了图形块程序中每一个字段显示的文字内容。
各文件作用的流程如下图所示:
Mixly第三方库基本结构如下图 所示:

简介&软件准备:

Mixly 1.1.5

官方指南: Instructions -使用Mixly写自定义库

第三方库范例: dfrobot、Otto

文本编辑工具: 记事本

此教程中所有文件可新建文本文档,修改其后缀实现编译。

这里用的编译器是Adobe Dreamweaver CS4,脚本语言是JavaScript

Mixly二次开发 文件结构

block/xxx.js文件:定义了你定制的图形化模块的样子。

generator/xxx.js文件:定义了每一个图形化模块对应的 Arduino C语言代码。
block/xxx.js文件:定义了你定制的图形化模块的样子。

generator/xxx.js文件:定义了每一个图形化模块对应的 Arduino C语言代码。

block和generator :文件夹下各有一个与项目同名但内容不同的xxx.js文件,一个控制“外观”,另一个控制“内涵”。

xxx.xml: 必须的,所有模块的路径,相当于字典

开始开发:

开发内容: OLED中文显示模块

开发准备: u8g2库

新建文件,如下图:

  • 在 block 和 generator 文件夹中新建文本文档,并重命名为 kivinOLED.js , 如下图所示:

  • 再新建一个 kivinOLED 文件夹,放入u8g2库文件,如下图所示:

开始编程:
共分为3个部分, 也就是说,需要编写3个必要的脚本:

  1. block文件夹下 kivinOLED.js 脚本
//下列三行代码,为刚需,此提供了下列所有代码的入口
'use strict';goog.provide('Blockly.Blocks.kivinOLED');//注意脚本类别及路径名称goog.require('Blockly.Blocks');// ---OLED模块图形配置---//include模块
Blockly.Blocks.U8g2lib_include = {init: function() {this.setColour(120);//模块图形颜色this.appendDummyInput("")//此行代码刚需,为模块创建提供入口.appendField("#include <") //代码块上的文字内容.appendField(new Blockly.FieldTextInput('U8g2lib'), 'INCLUDE')//创建文本输入对象.appendField(".h>");this.setPreviousStatement(true);//是否可以与上一模块连接this.setNextStatement(true);//是否可以与下一模块连接}
};//配置构造函数模块
Blockly.Blocks.config = {init: function() {this.setColour(120);this.appendDummyInput("").appendField("配置构造函数").appendField("U8g2 SSD1306 128X64")this.setPreviousStatement(true, null);this.setNextStatement(true, null);this.setInputsInline(false);//是否开启模块单行显示(true为单行,false为多行)}
};//开启 U8g2驱动模块
Blockly.Blocks.initOled = {init: function() {this.setColour(120);this.appendDummyInput("").appendField("开启U8g2驱动程序")this.setPreviousStatement(true, null);this.setNextStatement(true, null);}
};//中文输入模块
Blockly.Blocks.displayCN = {init: function() {this.setColour(50);this.appendDummyInput("").appendField("输入字符串...")this.appendValueInput("VALUE", String).setCheck([String,Number]).setAlign(Blockly.ALIGN_RIGHT);//开启模块右侧可连接this.setPreviousStatement(true, null);this.setNextStatement(false, null);}
};
  1. 根文件夹中的 kivinOLED.xml 文件
<!--该注释为!!!路径!!!,此为刚需!type="company" block="block/kivinOLED.js" generator="generator/kivinOLED.js"
-->
<script type="text/javascript" src="../../blocks/company/kivinOLED.js"></script>
<script type="text/javascript" src="../../generators/arduino/company/kivinOLED.js"></script><!--根路径&外观配置&所有模块的内容物-->
<category id="kivin OLED demo" name="OLED中文显示" colour= 20><!-- OLED模块 --><!--include模块--><block type="U8g2lib_include"><value name="String"><shadow type="text">  <!--可编辑文本--><field name="_text">U8g2lib.h</field></shadow></value></block><!--配置构造函数模块--><block type="config" name="U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2"></block><!--开启 U8g2驱动模块--><block type="initOled"></block><!--中文输入模块--><block type="displayCN"><value name="disCN"><shadow type="text"><field name="_text">textOled</field></shadow></value></block>
</category>
  1. generator 文件夹中 kivinOLED.js 脚本
//下列三行代码,为刚需,此提供了下列所有代码的入口
'use strict';goog.provide('Blockly.Arduino.kivinOLED');//注意脚本类别及路径名称goog.require('Blockly.Arduino');// ---OLED模块图形转代码---//include模块Blockly.Arduino.U8g2lib_include = function() {var INCLUDE = this.getFieldValue('INCLUDE');//使用INCLUDE 变量来存储,block文件夹中的kivinOLED.js脚本,文本输入对象的值Blockly.Arduino.definitions_['define_'+INCLUDE] = '#include <'+INCLUDE+'.h>';//严格函数,固定写法(转include调用内容)return '';
};//配置构造函数模块Blockly.Arduino.config = function() {Blockly.Arduino.definitions_['define_'] = 'U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0,SCL,SDA);\n';return '';
};//开启 U8g2驱动模块Blockly.Arduino.initOled = function() {Blockly.Arduino.setups_['setup_intOled'] = 'u8g2.begin();\n';//严格函数固定写法(转setup函数中代码)return '';
};//中文输入模块Blockly.Arduino.displayCN=function(){var value = Blockly.Arduino.valueToCode(this, 'VALUE', Blockly.Arduino.ORDER_ATOMIC) || '\"\"';return 'u8g2.firstPage();' + '\n'  +  'do {'  + '\n' +    'u8g2.setFont(u8g2_font_unifont_t_chinese1);' + '\n'  +    'u8g2.drawUTF8(0,15,'   +value+  ');' + '\n' +  '} while ( u8g2.nextPage() );' + '\n' +  'delay(1000);';};

开发完成并导入成功效果图:

测试结果:

总结:

通过本次作业,我学会了在Mixly 上进行二次开发导入自定义库并顺利地完成了测试。第三方库开发是一劳永逸的事情,开发完成后,可以降低学生学习难度,让学生能更快地实现想要的功能,为学生的创意想法插上实现的翅膀。

Mixly 二次开发 自定义库相关推荐

  1. Mixly 二次开发 自定义库 创客教程

    前言 本章内容是对Mixly 图像化编程软件进行的二次开发,需要一定的编程基础,需要用到的概念和知识点有: 绑定与事件概念, JavaScript的基本语法, .xml脚本的标签定义 限于篇幅,本章内 ...

  2. C++ ARX二次开发-BREP库

    一.本节课程 C++ ARX二次开发-BREP库 二.本节要讲解的知识点 通过两个命令来演示BREP库的使用:获取圆柱体中圆柱面的特征参数:获取任何三维实体的边的采样曲线. 三.具体内容 1.思路:组 ...

  3. MIXLY二次开发(傻瓜版)

    Mixly是北师大教育学部创客教育实验室开发的一款图形化编程软件,是在Google Blockly图形化语言的基础上开发,目前支持大部分arduino型号.可惜Mixly还不支持Genuino101的 ...

  4. Windchill二次开发-自定义文件编号(2)

    自定义文件编号如:字母+年份+序列号(如:B2020123) 自定义文件编码规则 package ext.customize;import wt.rule.algorithm.RuleAlgorith ...

  5. AutoCAD二次开发自定义线型

    今天是国庆的最后一天了,有点时间,来学习一下AutoCAD关于线型方面的内容.很多关于AutoCAD开发插件都会或多或少的涉及到线型方面的内容.线型存放在AutoCAD线型表中,线型表是AutoCAD ...

  6. 中望CAD二次开发自定义菜单(C++)

    在中望CAD中添加自定义菜单,一步一步来: 1.新建zrxobject项目,我命名为menuTest2. 2.引入菜单所需要的头文件,这一步很重要.我也是刚开始接触,查了很久,找到的代码都无法使用.后 ...

  7. Revit二次开发 - 族库最近使用菜单

    RibbonGallery 当时在"构件坞"中看到这种样式的ribbon菜单,觉得挺有意思的,于是找它的实现方案: 1.首先用Adwindows找到"构件坞"的 ...

  8. CAD二次开发--自定义的特殊线形如何设置(以CASS软件中坎类锯齿线形为例)

    CAD自身提供了比较多的标准线形,比如虚线,但是也很难满足各个行业的具体需求,比如在测量中,就经常用到锯齿状的线形,如下图,ok,究竟如何设置呢?接下来我会分步骤讲解. 目录 1.基础知识 1.1线形 ...

  9. el-admin前后端项目二次开发自定义修改图标

    1 需求 首页界面根据展示的属性内容,需要修改与之相关联的图标. 2 具备条件 el-admin具备更改图标的功能,功能模块放到了组件管理中. 3 操作步骤实例 3.1 下载SVG文件 在阿里云图标网 ...

最新文章

  1. 强化学习(四)—— DQN系列(DQN, Nature DQN, DDQN, Dueling DQN等)
  2. ubuntu mysql navicat_Ubuntu搭建MySQL,Navicat Premium连接
  3. SparkStreaming入门及例子
  4. hdoj3351-stack
  5. React-引领未来的用户界面开发框架-读书笔记(六)
  6. ArcGIS中的WKID(转)
  7. 【U3D】掉落物设计
  8. c语言argc,C语言 argc和argv
  9. tcp socket的发送与接收缓冲区
  10. 如何制作频数折线图(详细)
  11. 建立 arm-linux 交叉编译环境
  12. Oracle数据库索引原理分析
  13. 判断合法标识符(c语言或c++)
  14. myeclipse8.5 TPTP插件的使用问题
  15. go学习 --- godoc工具安装
  16. java虚数复数计算_真实的虚数,不仅不是没用,而且还很实在
  17. ccf-csp 2013-2015题目总结
  18. 人生经典定律[收藏] 1
  19. 百度搜索引擎 VS 360搜索引擎
  20. 微服务下,简单实现数据变更通知

热门文章

  1. mysql 查询随机10条数据 (转载)
  2. omi html转义,特殊字符读法
  3. text html叫什么意思,text是什么意思_text是什么意思
  4. 深度:从 Office 365 新图标来看微软背后的设计新理念
  5. 【关于Log4j2】
  6. delphi 调用浏览器内核_深入理解浏览器原理
  7. win10安装sshpass_安装sshpass
  8. 学计算机的参加数学建模有什么用吗,数学建模是什么?对于编程来说有什么意义?...
  9. 如何组建游戏制作团队?团队人员如何寻找?
  10. ESP32-BMP180气压、气温传感器