tzlzy 发表于 2015-5-10 22:01:34

ArduBlock使用说明

本帖最后由 tzlzy 于 2015-5-14 22:03 编辑

《ArduBlock教育版》使用帮助

ArduBlock是Arduino IDE的可视化编程插件,它必须依附于Arduino IDE环境启动,是最受欢迎的Arduino编程入门工具之一。ArduBlock教育版是开源课程《Arduino创意机器人》所使用的编程工具,是著名创客何琪辰为中小学Arduino课程定制的版本。
ArduBlock教育版对Arduino IDE版本要求是1.5或更高版本。如果使用较低的版本的话,ArduBlock教育版里面显示的是英文。软件安装和简单,只要将下载的压缩包(下载地址:http://blog.sina.com.cn/s/blog_6611ddcf0101kfs7.html)中libraries和tools文件夹,复制到Arduino的安装目录下,重新运行Arduino IDE后,点击“工具”中的“ArduBlock”便可以启动,如图1所示。

图1 启动ArduBlock

启动ArduBlock之后,我们会发现它的界面(如图2所示)主要分为三大部分:工具区(上),积木区(左),编程区(右)。其中,工具区主要包括保存、打开、下载等功能,积木区主要是用到的的一些积木命令,编程区则是通过搭建积木编写程序的区域。下面将分别介绍这三个区域。

图2 ArduBlock界面

一、工具区
工具区包括“新增”“保存”“另存为”“打开”“上载到Arduino”“Serial Monitor”,“新增”就是新建,“保存”“另存为”“打开”也都是其它软件的常用工具,这里就不做介绍了。点击“上载到Arduino”,Arduino IDE将生成代码,并自动上载到Arduino板子(一般需要等待几秒钟的时间),这里要提醒大家的在点击上传Arduino之前,要查看一下自己的端口号和板卡型号是否正确;在点击“上传到Arduino”之后,我们可以打开Arduino IDE 查看程序是否上传成功。“Serial Monitor”则是打开串口监视器,串口监视器只有在电脑中有Arduino 端口时才能打开。
二、积木区
积木区包含了《Arduino创意机器人》课程中用到的所有模块,还包括有一些课程中没有涉及但经常用到的模块。积木区的积木共分为七大部分:控制,引脚,逻辑运算符,数学运算,变量/常量,实用命令,教育机器人。
1.控制
控制中的各个模块都是一些最基本的编程语句,只要接触过编程的人都会很容易理解这里面的各个模块的含义。控制中各模块释义如表1所示。
表1 控制中各模块释义


2.引脚
引脚中的各个模块是针对Arduino板的引脚(也称针脚)所设计的,主要是数字针脚和模拟针脚,也包括一些常见的使用,比如舵机,超声波等。引脚中各模块释义如表2所示。
表2 引脚中各模块释义


3.逻辑运算符
逻辑运算符主要包括常见的“且”“或”“非”,还包括比较运算符,如数字值、模拟值和字符的各种比较。逻辑运算符中各模块释义如表3所示。
表3 逻辑运算符中各模块释义



4.数学运算
数学运算主要是Arduino中常用的基本运算,包括四则运算、三角函数、函数映射等。数学运算中各模块释义如表4所示。
表4 数学运算中各模块释义

5.变量/常量
变量/常量主要包括数字变量、模拟变量、字符变量、字符串变量以及它们对应的各种常量。变量/常量中各模块释义如表5所示。
表5 变量/常量中各模块释义


6.实用命令
实用命令是常用到的一些命令,包括延迟、串口监视器的操作、红外遥控的操作等。实用命令中各模块释义如表6所示。
表6 实用命令中各模块释义


7.教育机器人
“教育机器人”是为我们的课程套件定制的一些拓展模块,包括DFRobot的Bluno显示屏的操作和RoMeo控制的电机操作,如果没有使用这种板子,可以忽略。教育机器人中各模块释义如表7所示。
表7 教育机器人中各模块释义


三、编程区
编程区是程序编写的舞台,我们可以通过右边和下边的滚动条移动来查看编程区。启动ArduBlock后,编程区会默认地放入一个主程序模块,因为主程序有且只能有一个,所以我们就不能再继续往里面添加主程序模块了,如果再拖进去主程序模块的话,下载程序的时候会提示我们“循环块重复”。另外,除子程序执行模块之外的所有其它积木模块的程序都必须放在主程序内部。当搭建积木编写程序时,要注意把具有相同缺口的积木模块搭在一起,成功时会发出“咔”的一声。我们还可以对我们的积木模块进行克隆和添加注释语句,只要选中该模块,右击就可以实现对该模块的克隆和添加注释操作;其中子程序执行模块还有另外一个功能就是创建引用,即点击之后会自动弹出调用该子程序的模块。
要删除某些积木吗?只要选择不需要的积木块,拖拽到积木区就不见了。
四、常见的问题
1.两个主程序模块有什么不同?

   该程序用一个变量k来控制LED的亮,程序上传成功之后,先执行一遍上面的设定k为HIGH,之后程序在循环执行的过程中只执行下面的。




该程序也是用一个变量k控制LED的亮,不同的是程序在执行的过程中,会不断的重复执行“先设置k的值为HIGH,再执行点亮LED”。
总结:如果在程序执行之前需要对一些变量、针脚等进行初始化操作,我们需要用(程序 设定 循环)模块;如果不需要的话,我们可以直接使用(主程序 执行)模块。
2.子程序和子程序执行模块如何使用?

子程序执行模块用于编写子程序,主程序可以调用子程序,但是子程序不能调用主程序;而且子程序执行模块在编写子程序的时候不能嵌套在主程序模块里面,如果主程序要调用子程序,我们可以右键点击子程序执行模块,然后点击“创建引用”会自动生成子程序模块,只要将该子程序模块放到主程序要调用的位置即可;也可以从控制里面拖一个子程序模块,并将其名字改为我们刚才定义好的子程序执行模块定义的名字即可。这里要提醒的是子程序的名字和变量的命名一样。同时,子程序命名必须以字母开头。
3.数字针脚和设定针脚数字值有什么不同?
:用于读取数字口的值,比如说LED接在数字口3上面,我们可以通过该模块查看LED的状态是亮还是灭。
:该模块用于设定数字口的值,比如LED接在数字口3上面,我们可以设定它的值为HIGH,即点亮LED;而设置值为LOW,即熄灭LED。
总结:用于数字口的输入;用于数字口的输出,不管是输入还是输出,只有高低电平两种情况。
4.映射模块一般在什么时候使用?

该模块的含义是将一个值从一个范围(值现在的下界和值现在上的上界之间)映射到另外一个范围(值目标范围的上界和值目标范围的下界之间),这里要注意的是要映射的值必须在值现在的下界和值现在上的上界之间。
一般来说映射模块的使用比较灵活,我们可以根据需要来用它,比如说光控LED亮度(光线越亮《LED越暗LED越亮;光线越亮LED越暗甚至LED灭),大家会发现光线传感器的值为0~1023,而PWM的值范围为0~255(可调亮度的LED要接在支持PWM的数字针脚上面,才可以调节LED的亮度),这个时候我们就需要用到映射模块了;参考程序如下:

提示:光线传感器接在模拟口1上,而LED模块接在数字口3上面。
5.延迟模块有什么作用?
延迟模块用于使上面一个积木执行一定的时间,比如:

该程序在执行的时候,LED先亮3秒钟(延迟3000毫秒),然后LED灭1秒钟(延迟1000毫秒)。
除此之外该延迟模块还用在好多地方:
(1)用于按键的消抖。一般来说按钮(遥控按键等)会有抖动的现象,我们可以在编写程序的时候通过延迟模块来实现消抖,而延迟时间的长短需要我们根据不同的按钮来测试。
(2)在编写程序实现呼吸灯的时候,会发现LED并没有慢慢变亮或者慢慢变暗,其中一个问题就是因为没有加延迟模块。解释:主程序模块执行的很快,我们的视觉感受不到LED慢慢变亮或者慢慢变暗的过程。
                  
                         未加延时                                                                                    加延时
6.遥控如何使用?

【解释】串口输出遥控按键对应的值,其中输出的值为十六进制形式即字符串的形式。

【解释】按下遥控上的红色键,LED亮。(其中FD00FF是我们使用的遥控上面红色的按钮对应的值)
7.遥控器可以和呼吸灯一起使用吗?
遥控器可以和呼吸灯一起使用的,遥控器任意插在哪个针脚都可以,但是呼吸灯不可以插在数字针脚3和11,因为使用遥控器的时候,3和11的PWM不能用。感兴趣的可以查阅一下相关库里面的定义。
8.遥控器可以和蜂鸣器一起使用吗?
遥控器可以和蜂鸣器一起使用,但是一起使用的时候要避开tone()函数,这是因为红外库和Tone都使用了相同的内部计时器TIMER2(在各自的ISR函数里),编译的时候会显示重复定义的错误。可以使用简单延时计算蜂鸣器发声频率来代替tone()函数的使用。示例如下:

9.有时候我们把值设定为LED还是会亮?这是为什么?
    PWM的取值为范围为0~255,其实256是一个周期,如果我们给予的值大于255,它会自动换算成0~255之间对应的值,其实我们也可以自己算:该值与256取余即可。这里要提醒的是如果说我们给予的值为负数,负数也会自动转换成0~255之间的值,这里要提醒的是,我们在计算的时候跟正数的算法是不一样的,负数的算法是:值与256先取余,然后再加上256即可。
    8.的波特率能改吗?
在ArduBlock编程环境的,默认设定的波特率为9600,如果说我们需要使用其他的波特率,我们可以在Arduino IDE自动生成的文本式代码中,找到Serial.begin(9600);这句代码,修改波特率即可。修改波特率后,记得还要修改串口监视器中的波特率,使其保持一致。
9.LED可以接在任意一个数字口吗?
理论上来说LED可以接在任意一个数字口,但是有些时候最好不要接在数字口0和1上面,因为数字口0和1用于计算机和Arduino通信,当计算机与Arduino通信的时候,TX或者RX会被设置为高电平,这时会影响我们控制LED的效果,也可以理解为就算我们编写了控制LED的程序,但是通信的时候TX或者RX已经被设置为高电平,LED已经被点亮,程序此时对LED毫无意义。如下面的程序:

【解释】这时一个按钮控制LED的程序,按钮按下LED亮,放开LED灭,其中按钮接在了数字口3上面,LED接在了数字口0上面;当程序载进去之后,我们会发现LED已经被点亮,按钮毫无意义。
10.电机运行数值范围是多少?
电机M1、M2取值范围同模拟输出一样是0-255。取值为0的时候,数值太小,电机可能带动不起来,这个要根据实际情况进行调试;取值为255的时候,数值最大,电机转动速度最快。若是数值超过了255,则相当于与255作取余运算,比如:数值若是260,计算260%255=5,则电机运算数值相当于5。
下载地址:http://blog.sina.com.cn/s/blog_6611ddcf0101kfs7.html
程序编写:何琪辰
功能策划:谢作如
程序测试:张丽芳、刘正云
文档整理:张禄
整理日期:2014.6.25



丄帝De咗臂 发表于 2015-5-11 12:35:11

把图加上
页: [1]
查看完整版本: ArduBlock使用说明