找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 19329|回复: 20

[交流] FLL,你所不知道的秘密(2)——程序的快速切换“开关模块”

  [复制链接]
发表于 2013-3-23 23:21:18 | 显示全部楼层 |阅读模式
本帖最后由 dxlwf 于 2013-3-24 00:22 编辑

程序的快速切换——“开关模块”

FLL比赛中需要的是时间,所以怎么样节省时间,挤出更多的时间去做任务是每一个指导老师和参赛学生要考虑的问题。而其中,一个好的程序切换方法可以省出不少时间来。一个常用的程序切换方法是用触碰来实现程序的快速切换,但这种方法会出现一个问题:一个不小心的误操作,碰到了触碰开关,整个程序就得重新再运行一次,而且中间运行过的程序要怎么处理?怎么跳转?是一个比较棘手的问题。曾经看到一个比赛的学生是为了解决快速切换程序问题,安装了三个触碰传感器,但这就带来了另一个问题,他没有更多的端口来安装其它的传感器了。NXT主机只提供了4个传感器输入端口。因此,怎么实现程序的快速切换?一些有经验的指导老师,使用了NXT-G软件的一个不为人所知的功能,那就是采用“多分支程序处理模块”,这个模块在哪里呢?其实,它就是我们平常所用到的“开关模块”。
NXT-G软件的“开关”图标称为切换模块,也就是通常编程语言书本所说的分支结构。在接下来的说明中,我们说到分支结构,就是指“开关”图标所提供的程序处理功能。
首先,我们来熟悉一下“开关模块”的使用,分支结构是指根据输入的条件不同,执行不同的程序指令。如下所示是一个碰磁车程序,程序开始小车前进,当小车的触碰传感器碰到障碍物时,小车后退,转弯,然后再前进。

1.jpg

复杂一点的分支结构是嵌套,比如双光感的小车走黑线程序,如下所示:
2.jpg



上面介绍的是开关模块的基本用法,熟悉的老师和学生可以跳过去,直接看下面的内容。
许多人可能还不知道,NXT-G的切换模块除了前面讲的简单分支处理功能外,还提供了“多分支程序”处理功能,如果没有仔细研究,很容易错过这个很好的功能。
首行,把“开关”模块的控制由“传感器”改成“数值”,则下面的类型会出现“逻辑、数值、文本”。选择其中的“数值”,并把“平面视图”的选项去掉,则可进入多分支程序处理功能。如下图所示:

3.jpg

点击如右图中的加号,可以增加新的条件,程序的流程图上方也同时增加了几个方框,如下图所示,移到第1个方块,会出现数字0,点击,此时可在里面的框框中输入程序指令。相应的,可移到后面的方框中点击选中,输入程序指令。

4.jpg

那么,程序怎么实现多分支呢?可定义一个变量,类型是数值型。然后通过不同的计算方法,给变量赋值,传送到开关模块的数据输入口。开关模块根据输入的不同数值去执行相应的程序指令。输入的每一个数值执行哪一个模块的指令,可在条件窗口的下现输入栏中设定。其中的“*”号可以用来设定默认执行模块,也就是当输入的数值不在窗口的条件栏中时,自动去执行默认模块的指令。

5.jpg

接下来是正题了,FLL比赛中,程序切换要尽量的快速,以便争取更多的比赛时间,怎么来实现呢?下面介绍的这个程序是一个很好的办法,这是一个“快速切换程序”(程序附后),它就是利用前面介绍过的多分支处理功能来编写的。程序分为两个部分,如下所示:
6.jpg


这个程序可以从下面这几个部分来分析:
第一部分:快速选择程序模块。
如下图所示:利用NXT主机的左、右按钮实现程序的快速切换。程序首先判断右按钮是否有按下,如有按下,则进行累加计数。

7.jpg

如下所示,当NXT的右键按下时,每次加1,进行一次加法操作,计算结果还是存放到该变量中。当超过设定值时,不再进行加法计算,而是强制置1,把“程序选择”变量置1,跳到第1个模块。

8.jpg

当NXT的左键按下时,还是进行程序切换,不过是向前切换,第次减1,当减到1时,再减1次,则变量值置为8,直接跳到最后一个,又重新可以往前。左键按下时的程序指令如下所示:

9.jpg

下图是一个屏幕显示程序序号的模块,“程序选择”变量的值输入到多分支开关模块中,根据不同的值,在屏幕上显示程序的序号。该模块在右键按下和左键按下时都要设置,这样才能显示当前要运行的程序是哪一个。

10.jpg

程序的第二部分,是快速切换程序的主程序。
如下所示,该部分仍是一个多分支处理程序。根据不同的输入数值,开关切换程序执行不同的指令模块。


11.jpg


    下图的指令模块组1,这是由两个程序部分组成,第一个部分是一个自定义模块,这个模块由事先编写好的程序做成自定义模块,然后放到这里。第二个部分是一个计数模块,程序运行结束时,“程序选择”变量进行加1操作,同时在后面的多分支模块中显示出来。然后跳回到循环的开始部分,反复进行。

12.jpg    


如上所述,该快速切换程序通过多分支结构模块快速的实现了程序的快速切换,并且在中间可以随时切换到其它任务模块中,很好的解决了FLL比赛的程序切换需要,这是一个很不错的解决方案。
备注:上述的快速切换程序来源于中文乐高论坛,是由杭州采荷一小的一位老师上传的,在此感谢他的无偿提供和分享,为我们大家带来一份很好的学习资料。


                                                                                                                                                                   海天老林
                                                                                                                                                                 2013.3.23

评分

参与人数 1乐币 +50 收起 理由
ゞ鱄屬ㄨ緈諨 + 50 好帖子!

查看全部评分

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2013-3-23 23:50:29 | 显示全部楼层
看不到图啊......
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-24 07:30:49 | 显示全部楼层
不错的主意,学习了,谢谢分享。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-24 08:13:46 | 显示全部楼层
写的很详细!不错
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-24 08:35:15 | 显示全部楼层
我都没发现还能加分支
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-24 10:36:13 | 显示全部楼层
看到图了,真的很有用诶!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-24 11:17:21 | 显示全部楼层
为什么要切换呢,直接做成一个程序,然后等待按键不就行了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-25 12:13:51 | 显示全部楼层
azhengliaa 发表于 2013-3-24 11:17
为什么要切换呢,直接做成一个程序,然后等待按键不就行了

人家说万一中途不小心按到了呢!!那就死定了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-25 18:27:25 | 显示全部楼层
wujian501 发表于 2013-3-25 12:13
人家说万一中途不小心按到了呢!!那就死定了

这不可能啊,等回基地以后才开始等待啊。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-27 15:16:06 | 显示全部楼层
确实有用,但是仅限于高强度比赛中。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-27 21:50:12 | 显示全部楼层
好贴
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-3-27 22:11:16 | 显示全部楼层
图片中的程序看不清楚,能不能给发个源程序学习一下啊!!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-4-16 12:07:49 | 显示全部楼层
学习学习
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-10 22:25:08 | 显示全部楼层
~\(≧▽≦)/~  学习了!
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2014-2-19 10:36:43 | 显示全部楼层
谢谢楼主,谢谢彩荷一小的老师。正在学习彩荷一小老师的其它资源。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-11-24 10:03 , Processed in 0.111113 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表