请选择 进入手机版 | 继续访问电脑版

【开源】Starter任务切换程序详解1

0 1324
楚湘客 编程达人 发表于 2019-9-20 17:29 [软件编写] 置顶 [复制链接]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
在MakeX Starter这个赛项中,机器人可以通过某种操作自由的切换程序是参加这个比赛最基本的功能,所以编写出好的切换控制程序无疑对比赛有着至关重要的作用。

首先,分析一下我们需要的功能。要编写什么样程序,都是来自于我们需要什么样的功能,切换任务程序的功能可以分为三个部分:1.选择任务程序;2.启动任务程序;3.准确显示程序信息。某些参赛者把1、2两部分功能通过一个操作完成,也就是一旦选择完之后,程序就自动启动了,这种方法要求操作者非常精准,一次性就能选对程序,否则很容易启动错程序,而参赛者实际上是很容易有误操作的,所以我们需要分开实现这些功能。


然后,分析一下我们能够使用的操作方式。由于控制板只有一个按钮可以控制(也有部分参赛者用控制器上的光线传感器,但不建议使用,受环境影响大),所以给我们考虑的选择方式也很有限,包括:1、按按钮的次数;2、按钮按下的时间长短;3、按按钮的规律(如按某种节奏按按钮)。第三种过于麻烦,所以不用考虑,第二种是大家最常使用的,但如果光用第二种操作方式,误操作的几率也还是比较大的,所以最好是将1、2两种操作方式结合使用,当然这样编程的也要复杂一些。

上面分析了这么多,其实简单点说就是把这个按钮当成鼠标左键,我们想想鼠标左键都有哪些操作方式,大概也就知道可以怎么设置我们的操作方式了。


下面我用我做过的一种切换任务程序来给大家具体分析下(有人是不是直接跳过了前面),用的软件是Mblock5,弄懂了,用Mblock3也是一样的。
首先功能是这样的:单按一次按钮(单击)进行任务切换,连续按两次(双击)则启动当前任务程序,并且在任务程序启动前,表情面板都会显示目前的任务程序内容或编号。

要编写以上功能的程序,主要得知道如何让程序区分单击和双击的区别,这一点同样从鼠标左键操作时我们很容易想到,其实就是按住按钮时间的不同,所以我们要用一个变量来记录按钮按住的时间,借助计时器的功能即可实现: blocks0.png
接下来就是判断这个按钮按住的时间,并根据时间的长短,将这次按钮操作记录下来,所以就是下面这个程序: blocks2.png 这里我把“操作方式”这个变量的值为1时设为长按,2设为短按,你也可以反过来

然后我们就可以根据操作方式判断进行单击还是双击的操作,但我们还只判断了按一次按钮的过程,所以如果是长按,我们可以确定,这次操作是单击,但如果是短按,则不一定是双击,那为什么我们不直接用长按和短按来实现两种操作,而要用单击和双击呢,因为我们要允许误操作,所以如果单纯的短按一次,可以不对程序进行任何操作。
回到正题,长按是单击,短按什么都不是,那不需要执行任何程序吗,当然不,我们需要记录这次短按,不然如何用两次连续的短按来实现单击呢,所以程序就是下面这样: blocks3.png 没错,就是再用一个“点击次数”的变量来记录这次操作,但一定不要忘了,如果是长按,要将点击次数归零,因为你一旦长按,说明你的操作方式已经不可能是双击的操作了。
另外,我们还多了一个“程序控制”的变量,这个变量就是设定我们对程序进行何种操作的,现在对程序进行切换的操作已经实现了,下面是启动程序的操作:

blocks4.png 归零是不能忘的
上面这些就是对按钮的操作进行编程的程序了,为了使编程的思路更清晰,我们可以把这段程序放在自制积木中,也就是这样: blocks5.png
简单总结上面的程序内容:用变量“按钮按住时间”记录按钮按下的时间,根据按下时间长短将操作方式分为1、2两种情况,其中1代表长时间的按下按钮,是长按的操作方式,可以用来切换任务,2代表短按的操作方式,连续两次2的操作即双击,可以用来启动任务程序。

接下来,我们先把机器人要执行的具体任务也用自制积木来编程,比如 微信图片_20190920161148.png
根据刚才我们对“程序控制”这个变量的定义,在按钮控制程序执行后,我们应该进行如下判断: blocks6.png
再把程序放进重复执行: blocks7.png
既然可以不用重启电源,也能重复执行的程序,那程序编号也要可以循环改变,所以再改成这样: blocks17.png
到这里,我们要实现的按钮操作控制功能已经实现了,但如果你把这个程序下载到机器人的控制器里,会发现:这东西怎么用?

所以还有我们最开始说的程序应该包含的第3部分功能——准确显示程序信息——没有完成,而这部分功能其实要分成两部分:1、显示当前程序;2、显示当前操作。
第1点很好理解,最简单的就是直接显示“程序编号”这个变量即可,但实际使用过程中,我们的程序编号可能要根据比赛情况进行调整,以便更快的完成比赛,节省时间,而且编号只是一个数值,是很容易记混的,如果我们换成用其他有更多含义的问题或者图像,会使程序的使用更加方便,而这也是表情面板比数码管更有优势的地方,所以程序就变成了这样: blocks18.png
这里在按钮控制程序的前后我们都将“程序编号”这个变量的数值进行了判断,因为前面是显示程序,后面是要执行的任务程序,前面的程序是无条件执行的,后面的程序是要在双击之后才能执行的,所以只能分开,这导致在编程时也要分开完成,同时程序的阅读性也变低,那它们就不能放在一个自制积木中吗?

当然是可以的,这个时候,自制积木这个功能更大的一个好处就显现出来了,因为程序要这样写: blocks19.png
好像程序有点长,简化下:第一种程序控制方式的程序是固定的,所以也可以把这段程序放在按钮控制的自制积木中: blocks20.png
        两个程序编号判断的程序流程是一样的,可以把这部分都放进任务程序的自制积木中: blocks12.png
     现在这样程序是不是很清晰之后要在程序里再增加其他任务的程序也很简单。
第1点终于完成了,那第2点呢,也许细心的同学早就发现第2点在一开始就该考虑的,因为我们要一步步来,这样条理清晰,不然混在一起,是不利于解决问题的
那第2点到底在哪考虑呢?第2点是显示操作,那当然得在按钮控制这个自制积木中,先把程序拿出来看看 blocks21.png 在这个程序中,对于按钮按住时间的判断实在按钮松开之后才进行的,所以,我们不方便在操作过程中实时显示现在是短按还是长按,所以得把程序的前面改一下: blocks14.png 这样我们程序就是在实时判断按钮按住的时间了,然后我们把显示程序放在相应的条件内: blocks15.png
嗯~~~~~没错,讲完了,最后不给个总的程序吗?是的,就是不给,如果前面的你都看懂了,自己就可以写出来了,如果前面都不看,就想看最后的程序,那就不能如你所愿了希望我们都能自己思考学习,而不是等着看最后的答案
第二篇文章的连接https://bbs.makex.cc/forum.php?mod=viewthread&tid=1276&extra=page%3D1




举报 使用道具
| 回复

【开源】Starter任务切换程序详解1(0帖子) 最后发表 2019-9-20 17:29

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

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分
联系我们
info@makex.cc

深圳市南山区南山智园C3栋3-4楼

关于我们

官方微信

返回列表 QQ 返回顶部