1 singleColor
顾名思义就是简单颜色。亮灯方式为,从第1盏LED点亮起,陆续点亮第30盏。不难发现,这和我们课堂上学过的幸运大转盘是一样一样的。
这样的效果是在瞬间发生的,在ledstrip脚本中,不能直接调节两盏灯之间的点亮间隔时间,我们可以在mBot脚本中重复执行的最后一行加入等待0.3秒的脚本。
算法解析:
效果1虽然简单,但是后面效果2、3、4、5的基础。在mBlock图形化编程中,首先建立了变量i,每次灯带只亮第i盏灯,点亮后将i的值增加1,方便点亮下一盏。循环中每次完成一个程序动作之后,为下一次动作做好充分准备,是这个简单范例的精髓。
2 breathe
呼吸灯带。亮灯方式为,灯带上的每一盏灯,都是从暗到亮,再从亮到暗,循环往复,就像人的呼吸一样:呼……吸……。
算法解析:
在效果2中,所有LED灯是一起点亮的,但是每次循环点亮的亮度值不同:先是由暗到亮,再由亮到暗。也就是说,RGB值先从0开始逐渐增加,到最大值255之后保持一段时间,再逐渐减小到0。因此,循环中每次LED亮度值增加或减少的量,可以用RGB值除以循环次数决定。
编程中,需要考虑各个值的情况,但有时候不必先确定某个值,而是自顶向下推断出某个值。
3 marquee
滚动灯带,还有一种说法是叫跑马灯。其实第1种singleColor效果就是幸运大转盘似的简单跑马灯,那么这个效果3算得上中级难度的跑马灯了。由视频可见,亮灯方式为:以4盏灯为一组,由强减弱,依次从灯带开头亮到末尾,再从末尾亮到开头,循环往复。PS:如果你还看不清的话,吴老师告诉你一个小技巧,按一下mCore控制板上的RESET键,可以重启程序造成短暂的暂停效果。
算法解析:
在效果3中,当按下RESET键之后,可以看见亮灯情况是4盏灯,由强光到弱光,所以4+1=5,需要建立一个5次的小循环,让前4盏LED亮度减弱,第5盏LED灭。加上灯带依次点亮的变量,至少需要2个变量i、j才能完成这次的效果。
其中需要注意3个问题。首先是整条灯带的循环次数不再是30,而是30+5,才能让滚动部分走完整条灯带。至于灯带亮度减弱方面,可以充分利用变量j;其次,小循环亮灯时从灯带起始位置开始,那么5次小循环应该是依次点亮i-j位置的LED,反过来从灯带尾部亮灯到起始位置,5次小循环应该是依次点亮i+j位置的LED;最后一个问题,是要判断何时亮灯,前面的亮灯位置值的范围,应该在-4到35之间,也就是必须大于-4小于35。
在编程中,要根据最终目标分解出一个个小目标,找出其中的内在规律。另外建议在mBlock图形化编程中添加一定的注释文字,增强程序可读性。
从该脚本注释来看,是比较容易理解的。小循环4盏LED灯的亮度,用了RGB值除以变量j,原计划是直接发布这个脚本的,不过在实际运行中,发现有2处问题,细心的你找到没?问题一:变量i、j初始值是0,使用该脚本有潜在的危险,因为数学运算中,如果0作为被除数是没有意义的;问题二:小循环4盏LED灯和视频中,也就是ledstrip的效果并不相同,4盏LED强弱过渡不明显。 对于问题一,我们先来检测一下是不是有危险:
4 rainbow
双向渐变彩虹灯带。这种最梦幻的效果,就是让老师思考半个多月的难题了——咳咳也是因为太忙。亮灯方式为:从第1盏灯到底30盏灯渐变彩虹色点亮,并且每一盏灯渐变彩虹色点亮。也就是说每一盏灯都在随时发生色彩变化,甚是好看。如何实现这种效果呢?这次真的要狠下功夫!
在效果4中,其实点亮LED有两个方向的参数变化,一个是横向变化:从第1盏到第30盏LED七彩变化,我们可以看做X轴变化,需要设置变量R-X、G-X、B-X这3个变量;第二个是纵向变化:第1盏灯自身LED七彩变化,我们可以看做Y轴变化,需要设置变量R-Y、G-Y、B-Y这3个变量。6个变量如何协同工作?或者说X轴和Y轴有何联系呢?这是需要深入思考的第一个问题,第二个问题是七彩变化如何控制RGB的有效参数值?
通过测试可以发现ledstrip的Rainbow效果是按照紫、蓝、青、绿、黄、橙、红的顺序变化的,为了符合人的一般认知和编程简便,我们按照红、橙、黄、绿、青 、蓝、紫的顺序编程。
为了解决问题一,我们需要找找规律。我们可以假设一粒种子:第1盏灯的RGB值。当这盏灯点亮之后,横向的X轴按照红橙黄绿青蓝紫的顺序七彩渐变。纵向的Y轴也按红橙黄绿青蓝紫的顺序七彩渐变。也就是说,每一次渐变,都从这个种子值出发,只要确定了种子值,两个方向的七彩渐变就确定了。而其中变化的间隔值,就是控制两种颜色变化速度的变量。
问题二,七彩变化的RGB值控制问题。这里显然需要使用逻辑判断,在RGB三个参数满足一定条件,才能设置灯带脚本。我们知道,RGB值的范围都是0~255,例如:(255,0,0)显示是大红,按红橙黄绿青蓝紫的顺序,后面的变化是从橙色开始,例如:(200,40,0)橙色RGB值和红色RGB值看出规律来了吗?没错,R值在减小,G值在增加,B值不变。照此规律发展,红色可以渐变为橙、黄、绿,还剩下青、蓝、紫3种颜色了。绿到青、蓝的变化规律是:G值在减小,B值在增加,R值不变。蓝到紫、红的变化规律是:B值在减小,R值在增加,G值不变。
在编程中面对复杂的问题,可以运用思维导图工具,从核心问题出发,引出各个小的分支问题,逐一击破,然后进行组合从而解决最终问题。与此同时,要注意观察变量之间的规律,然后将生活语言转换为计算机语言。这个过程也许不是一朝一夕达成,但只要努力,这种敏锐的洞察力完全可以养成。
5 rainbowmarquee
双向渐变彩虹+滚动灯带。这种效果,实际上是在彩虹灯带的基础上变化而来的,解决了彩虹灯,这个相对来说就容易多了。
回到图形化编程中来,我们需要控制亮灯的间隔为3盏一组。一个巧妙的方法是:用位置变量i除以3取其余数,余数为间隔位置变量j时,分别设置i、i-1、i-2位置的LED为亮、灭、灭。
算法系列:从一条灯带说起(一)
http://mp.weixin.qq.com/s/hLD6De-XmAS8rVBgYPtoXg
算法系列:从一条灯带说起(二)
http://mp.weixin.qq.com/s/F4n3rZ4N0VWU8eJmu-3I-g
算法系列:从一条灯带说起(三)
http://mp.weixin.qq.com/s/5Xgr7IcdxP6ZcpeYgGNLMw
makeblock灯带购买链接:
https://item.taobao.com/item.htm?spm=a1z10.3-c.w4002-9825283652.53.bj0lJW&id=534692622197
未经允许不得转载:木果创客mbot机器人 » mBot算法系列:一条灯带的5种精彩mblock图形化编程玩法!
评论前必须登录!
注册