Mixly是北师大教育学部创客教育实验室开发的一款图形化编程软件,是在Google Blockly图形化语言的基础上开发,目前支持大部分arduino型号。可惜Mixly还不支持Genuino101的六轴传感器和BLE蓝牙两项强大功能,在和

北师大教育学部创客教育实验室的老师交流之后,我决定自己来开发Mixly对Genuino101的支持模块。

Mixly的大部分程序都是用JavaScript写的,本人之前从未接触过JavaScript,参考了两篇教程,自己摸索了几天,终于把功能实现了,所以希望通过我这篇开发提示,更多人能够根据自己需要修改Mixly软件。

Step 1: 文件结构与功能

先来个整体的结构介绍:

1. Mixly0.97\arduino-1.7.9 这个文件夹里是ArduinoIED的免安装文件,可以直接双击里面的arduino图标,打开ArduinoIDE。子文件夹Libraries里是arduino的库文件,这里我需要将用到的库文件放在这个路径。

2. Mixly0.97\company 这个文件夹里定义了我们的模块名称、种类、相关文件的路径,文件格式为

xxx.XML。

3.Mixly0.97\blockly 这个文件夹里的文件是我们修改软件的主要工作:

Mixly0.97\blockly\blocks 这里的文件定义了图形化模块的图形外观。

Mixly0.97\blockly\generators\arduino 将图形化语言转换到arduino代码。

Mixly0.97\blockly\media 图片的使用。

Mixly0.97\blockly\msg\js 语言的切换。

Mixly0.97\blockly\apps\mixly 这里文件还没弄清楚,只知道color.css文件可以设置模块类的图标。

Mixly0.974_WinFull\Mixly0.97\blockly\core 这里面是Blockly的核心库文件,暂时不需要修改。

只需要根据后面的步骤执行有下划线的步骤,就可以完成一些简单模块功能的设计。

Step 2: 模块的各部分路径定义

首先我们要定义模块类的名称、子模块、相关文件的路径。以输入/输出模块类的子模块“高/低电平”为例,我们需要定义模块类的名称、外观,然后定义子模块的名称、外观和相关文件路径。

在路径Mixly0.97\company下新建一个文件curie.xml,按照图片的示例定义了4个子模块。

Step 3: 子模图形结构定义

Mixly0.97\blockly\blocks 这里的文件定义了图形化模块的图形外观,我们新建curie.js文件,我一共定义了四个子模块,这里以IMU为例,代码如下:

'use strict';

goog.provide('Blockly.Blocks.base');

goog.require('Blockly.Blocks');

Blockly.Blocks.IMU = {

init: function() {

this.setColour(220);

this.appendDummyInput("")

.appendTitle(Blockly.xmaker_IMU)

.appendTitle(new Blockly.FieldDropdown([["ax", "ax"], ["ay", "ay"],["az", "az"],["gx", "gx"], ["gy", "gy"],["gz", "gz"]]), "IMUSENSOR");

this.setOutput(true, Number);

}

};

  • this.setColour()设置子模块颜色

  • this.appendDummyInput("")设置子模块的下拉选项菜单

  • .appendTitle(Blockly.xmaker_IMU)设置下拉菜单对应的文字说明,xmaker_IMU是我在文字定义文件里定义的一个字符串

  • .appendTitle(new Blockly.FieldDropdown([["ax", "ax"], ["ay", "ay"],["az", "az"],["gx", "gx"], ["gy", "gy"],["gz", "gz"]]), "IMUSENSOR");设置下拉菜单的选项内容,这里要注意,后面的图形转代码的程序编写需要这里的选项参数

  • this.setOutput(true, Number);设置子模块返回数字到前一级模块

Step 4: 子模块图形转Arduino代码程序

最后一步是实现我们拖动子模块时,对应的Arduino代码的生成。

我的模块类里有四个子模块,因此对应四个完成Arduino代码生成的函数,以IMU六轴传感器数据返回模块为例,程序如下:

Blockly.Arduino.IMU = function() {
Blockly.Arduino.definitions_['define_IMU'] = '#include ';

Blockly.Arduino.setups_['IMUBegin'] = 'CurieIMU.begin();\n';

Blockly.Arduino.setups_['IMUSetGyro'] ='CurieIMU.setGyroRange(250);\n';

Blockly.Arduino.setups_['IMUSetAcc'] ='CurieIMU.setAccelerometerRange(2);\n';

var what = this.getTitleValue('IMUSENSOR');

var funcName='IMU_get'+what;

var code='float'+ ' ' + funcName + '() {\n'

+' int gxRaw, gyRaw, gzRaw;\n'

+' float gx, gy, gz;\n'

+' int axRaw, ayRaw, azRaw;\n'

+' float ax, ay, az;\n'

+' CurieIMU.readGyro(gxRaw, gyRaw, gzRaw);\n'

+' CurieIMU.readAccelerometer(axRaw, ayRaw, azRaw);\n'

+' gx = (gxRaw * 250.0) / 32768.0;\n'

+' gy = (gyRaw * 250.0) / 32768.0;\n'

+' gz = (gzRaw * 250.0) / 32768.0;\n'

+' ax = (axRaw * 2.0) / 32768.0;\n'

+' ay = (ayRaw * 2.0) / 32768.0;\n'

+' az = (azRaw * 2.0) / 32768.0;\n'

+' return '+what+';\n' +' }\n';

Blockly.Arduino.definitions_[funcName] = code;

return [funcName+'()',Blockly.Arduino.ORDER_ATOMIC];

};

总结出几条规则:

  • Blockly.Arduino.definitions后面带宏定义

  • Blockly.Arduino.setups后面带setupup里面的代码

  • return后面是loop里面的代码

Step 5: 大功告成,做几个示例

软件下载地址:

http://pan.baidu.com/s/1skSeDqt

【转载】MIXLY二次开发(傻瓜版)相关推荐

  1. Mixly 二次开发 自定义库

    Mixly基本原理 Mixly可以看作是介于普通用户与Arduino IDE之间桥梁,通过这个桥梁,即使用户不懂C语言的语法,也可以利用图形化程序编写Arduino程序.Mixly的基本原理是将图形化 ...

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

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

  3. 短信猫二次开发(java版)

    短信猫二次开发(java版) 短信猫 短信猫用于批量收/发短信或其它SIM卡服务. 短信猫与PC通过GSM无线网络交互. 交互过程可以分为三个层次: 1.物理层,即无线网络通信. 2.指令层,短信猫支 ...

  4. 浩顺考勤机二次开发(第二版,附实测可用的demo)

    1.背景 之前写过一次浩顺考勤机的二次开发,不过那个版本还是有一些问题,后来更换了新的考勤机,又拿到了新的二次开发包,所以就有了这次这个版本 2.关于考勤机的一些说明 2.1 首先要给考勤机设定ip, ...

  5. 微信二次开发-windows版微信Hook开发SDK之C#版

    提醒功能 比如淘宝,京东,拼多有订单了,通过微信机器人去提醒供应商发货. 比如生日快到,微信提醒谁要过生日了. 提醒女朋友,每天早上自动给女朋友们提醒早上好,晚上提醒晚安!!! 活跃群气氛 机器人具有 ...

  6. [转载][AutoCAD二次开发][2017]Autocad2017 ObjectARX 开发 环境配置和踩到的坑

    转自 https://www.cnblogs.com/aweffr/p/7510544.html 其中 链接器(Linker)中添加附加依赖目录和附加依赖项 版本号记得改成自己的版本就好 碎碎念 不得 ...

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

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

  8. [转载]tensorflow二次开发

    本文转载自 https://leslie-fang.github.io/2019/02/27/tensorflow%E4%BA%8C%E6%AC%A1%E5%BC%80%E5%8F%91/ 1. 编译 ...

  9. python解放二次开发_[转载]Python二次开发程序详解

    ###################################### ## Fundamentschwingungsstudie ## ## nur geeignet fuer ABAQUS ...

  10. 精仿互站模板 友价源码商城T5内核二次开发运营版

    精仿互站模板,友价T5内核1:1大型源码虚拟物品交易网站T5仿互站友价仿互站全新运营版,去住所有后门并且加强了防护(各种软件已经检测) 运行环境: 支持: IIS.apache.nginx PHP:p ...

最新文章

  1. devstack —— 单机部署 OpenStack 体验
  2. Windows 系统版本判断
  3. 天马微电子的mes工程师_上海天马微电子MES工程师职位(部门:制造中心/自动化部)怎么样?...
  4. html 如何去除浮动,CSS浮动? 如何清除浮动?
  5. 使用PM2搭建在线vue.js开发环境(以守护进程方式热启动)
  6. 如何通俗易懂地解释欧拉公式(e^πi+1=0)?
  7. 深度解析vsftpd服务
  8. 计算机系统设计原理当当,操作系统精髓与设计原理
  9. ionic 去掉启动页的加载动画 菊花转
  10. “我们必须禁止互联网定向广告!”
  11. 【激光雷达3D】【论文翻译】Complex-YOLO: An Euler-Region-Proposal for Real-time 3D Object Detection on Point
  12. 594.最长和谐子序列(力扣leetcode) 博主可答疑该问题
  13. 编写一个java小程序输出学生姓名在Unicode表中的位置
  14. 中文车牌识别开源项目C++版使用笔记
  15. Ubuntu16安装Nvidia驱动(GTX1060显卡)
  16. python分页查询_python | MySQL分页查询优化
  17. 记录Android dnk 文档
  18. 网络高清监控摄像头如何安装(图文方法+模拟像机)
  19. MYSQL启动失败,Can‘t create test file
  20. 苹果换原装电池_iPhone手机换电池一定要原装的吗?来听听维修师傅的建议

热门文章

  1. 学习笔记:FW内容安全概述
  2. 大数据分析案例:财政收入预测分析
  3. 高性能Mysql中文版
  4. 前端导出PPT,关于ppexgen.js的详细介绍(个人使用记录)
  5. 海康威视-海康门禁设备对接SDK-已完成完整封装调用
  6. balser相机IP设置
  7. java 异或表示状态
  8. 搭建公司wiki系统
  9. 人脸检测实战终极:使用 OpenCV 和 Python 进行人脸对齐
  10. Centos下因为双网卡配置不当导致无法访问外网故障解决办法