我们将这个函数命名为前进。 这样,放在这里,就可以直接简单的调用这个函数(预置动作组合)了。比如我们写了一个最简单的当开机的时候调用前进函数。 3 为了方便看是否刷机成功,我们再加一个显示图案。 这样,我们边试验边摸索,就把前进、后退、左转、右转都预置出来了。 通过这个下拉菜单可以方便的切换,这样检验更方便,不用再重新编写程序。 接下来,我们要开始让它自己动起来了。首先我想弄一个简单的可以自动避开障碍物的程序。慢慢来,先来个简单的。 ![]() 首先,我们可以整理一个基本的逻辑思路。也可以用铅笔画画草图。 我们的逻辑就是,开机,往前走,遇到障碍物,就一直左转,如果前方检测不到障碍物了,就继续前进,如此循环。 ![]() 于是,我们将这几个组成部分的要素找出来。积木块可以在设备、逻辑、引脚、基础这些菜单找到。 这里应该好明白,不过那个引脚的积木我要解释一下,这个引脚就是用来读取红外距离传感器所探测到的距离数值的。这个数值不是直接代表的距离,而是一种0-1023之间变化的数值,经过运算是可以转化为真实环境的距离的,不过现在我们还不用做这个转化。 ![]() 小窍门,可以将这个嵌套进小框里。很多块都可以嵌套到各种小框里,大家多试试。 ![]() 按照上面的逻辑组合,我们利用了条件语句,如果传感器的数值过700,则显示X并且左转,否则(数值小于700),显示箭头并且前进。 这里不知道大家注意到没,上面的“当开机时”换成了“无限循环”。 因为“当开机时”代表的是开机运行一次,如果用那个语句,就会变成,开机检测数值,然后执行下面的左转或者前进,而后会一直保持那个状态不变,就变成了一直左转或者一直前进了。所以这里换成了无线循环,也就是说开机后,会不断反复执行这个程序,不断的判断数值大小从而决定是前进还是左转。 ---“实践是检验真理的唯一标准”--- ![]() ![]() .............. .............. 其实,我没走。 刚才好像听到有同学在说为什么那个数值是“700”,这个700代表什么。 说实话,我也不知道代表什么,只是他会变。 如何变?还是编个程序自己感受下吧。看起来特别简单。 ![]() 反复显示这个距离传感器返回的数值,引脚 “P2” 别选错了哟。 ![]() 这个数值是滚动显示的。会根据障碍物距离发生变化。 所以这个700,其实是可以根据大家的喜好换成别的数值的。具体多少最好,大家自己体会吧。 好玩的话,可以自己做个探测器玩。根据我的经验障碍物距离越近时数值会越大。 ![]() 另外就是,不知道大家有没感觉,每次一刷机,贝克一号就会自己马上动起来。其实是有点不方便的。 能不能利用机身上的按钮,按一下再运转程序,按另一个就停止。 我们试试。这里我们将变量中的item拖出来,然后新命名一个,叫做”开关“。这个开关其实是一个变量,可以为0或者1. 我们理解当其为1的时候就是打开了这个虚拟开关,当其为0的时候就是关闭了这个开关。 于是我们可以编写这个程序,如图 ![]() 当按下A键的时候,”开关“为”1“,当按下B键的时候,'关'为”0“,主程序中”如果开关为1,则进行下面的运转,如果开关不为1,就不启动下面的程序“,怎么样,是不是很棒! 采用了这个程序的贝克一号会有什么表现呢?是不是开机的时候没有动,按B键无效,按A键启动了。到这里逻辑都是没有问题的。 ![]() 没错,就是前面的条件语句用错了。那个语句是一旦达成条件就会一直运行,而如果,则,否则的语句是用来判断条件的两端的。 也就是说这两个语句的区别是前者”如果满足就如何“,后者”如果满足就如何,不满足就如何“,很明显就是缺了后面一部分,所以就表现为一旦启动了,就再按B键也没用了,因为压根没想过后面要如何。 -End- |
|