RB25 互补呼吸灯、拔河比赛

临界值处理

知识点:

  • 坐标变换
  • RGB 颜色
  • 带参数循环
  • 函数,参数
  • 临界值处理

复习和回顾

Sensehat 来重现:

  • 流水灯
  • 多彩流水灯

任务一:醒目的呼吸灯

最简单的实现:

通过函数简化,并能在任意位置显示(以一个顶点坐标为输入项)

任务二:醒目的流水灯

现在我们有了一个可以在任何位置显示任何灯光的函数,利用它,我们可以实现更醒目的流水灯。

SenseHat 点阵每个方向有八个点,我们的点灯函数一次点亮 2x2 的点。正好可以模拟一个四灯的流水效果。

任务三:互补呼吸灯

临界值

临界值临界值是指物体从一种物理状态转变到另外一种物理状态时,某一物理量所要满足的条件,相当于数学中常说的驻点。

在编程时往往需要注意临界值,并加以处理。 简单来说我们可以把临界值看作一个触发条件,当达到临界值时,可能需要做一些特殊的处理。

比如我们前面的“听话的小点”,移动到边缘后继续移动就会出错,就是因为没有对“边缘”坐标临界值做处理。

任务四:拔河比赛模拟

拔河比赛时人数相等的双方对拉一根粗绳来比较力量的对抗性体育娱乐活动。哨声响起,随着两队力量的变化,指示标志一会儿向红队移动,一会儿向蓝队移动,用sense hat也能实现拔河比赛的功能呢!

设计思路:

用红蓝两色的小点代表两个队伍,中线的移动模拟拔河双方的争夺。需要处理的是中线位置,以及边界(临界值)的位置

(周老师讲稿) 为了表示出拔河比赛时两队位置移动的效果,我们可以用红灯和蓝灯互补地全屏显示,红队在左,蓝队在右。如果用x表示某一时刻红灯行坐标的最大值,那么红灯行坐标的范围是0~x,蓝灯行坐标的范围则是x+1~7,以保证红灯和蓝灯没有重叠的部分。 点阵屏共有8列,两边各留一列作为大本营,所以红灯x的取值范围是0~6,蓝灯x+1的取值范围就是1~7。 当x为0时,红队向蓝队运动,让x的值不断增加,一直增加到6。当x达到6之后,蓝队向红队运动,让x的值不断减少,一直减少到0,从而实现拔河效果。 我们可以看到x在0~6之间不断往复变化。这里x=0和x=6可以看成两个临界条件,当达到临界条件时,x就会改变运算类型,进行自加或自减运算。 下面我们来编写一下程序。先初始设置,熄灭点阵屏,建立一个变量x,表示红灯行坐标的最大值,设置它的初始值为0,再建立一个变量state表示当前拔河运动的状态。 设置拔河运动状态。当x=0,state=1;当x=6时,state=0。当state=1时,红队向蓝队运动,x自加;当state=0时,蓝方向红方运动,x自减。 最后让红灯和蓝灯点亮相应的点,因为红灯和蓝灯点亮的是一个范围,所以我们可以用函数来表示。新建函数“LED”,设置三个参数:start,end,colour,新建两个变量i和j,让点阵屏点亮第i行第j列的点,i是一个范围,用for循环,从start到end,j从0~7。 调用函数,让点阵屏以红色点亮从0到x列的点,以蓝色点亮x+1到7列的点。等待1秒,刷新显示,重复执行。红色灯点亮的最大值为6,蓝灯点亮的最小值为1,所以最终实现的效果是红蓝之间像拉大锯一样交替变换,但红灯不能达到最右边,蓝灯不能达到最左边,来看一下是不是这样的效果? 今天我们学习了临界值的用法。临界值是指物体从一种状态转变到另外一种状态时,某一量所要满足的条件,相当于数学中常说的驻点。在编程时往往需要注意临界值,并加以处理。这里,我们用临界值来改变了运算类型,它相当于一个加减转换标志。

Copyright © 古德微 2023 all right reserved,powered by GDWRobot本课修订时间: 2021-10-13

results matching ""

    No results matching ""