点亮彩灯
教学目标及方法
通过点亮彩灯以及一些彩灯的特效,学习引用库文件,变量,串口监视器的使用,以及for循环等相关语法知识
主要内容
彩灯可以显示丰富的颜色,还可以控制灯光的强弱,接下来我们就来看看彩灯控制的方法
接下来我们来看点亮彩灯的代码,也就是下面代码1的内容,首先是开头部分:
掌握这些,我们就可以点亮彩灯了。
接下来,思考一个问题,如果我想让一个彩灯从暗变到亮,或者从亮变到暗,代码应该怎么写呢?
我们知道,灯光强弱的数值是从0-255,也就是说0是灭灯,255是最亮,那如果按照之前学过的内容,是不是可以这样写呢?
显然这样写起来太麻烦了,那有什么比较简单的写法呢?这里就需要用到变量和循环的概念。
仔细观察上面的代码可以发现,其实大部分内容都是重复的,只有红框里的数值,也就是灯光的强弱在发生变化,那我可不可以设置一个变量,然后单独描述他的变化方式,然后让他循环起来,不就可以了么?
这里就涉及到变量的概念,
在这个程序中,我们设定一个整数变量“i”,并在loop中设置“i=i+1”,这样,每次循环,i就会比之前增加1,再把i附给红灯的值,这样就程序循环起来,就能实现灯光变亮的效果了。

但是这个代码存在一个问题,我们只定义了“i”的增加,但灯的最大值只有255,“i”超过255之后该怎么办呢?
这里我们可以用“if”命令来定义,如果 “i>255”,就把“i”归零,写成程序就是这样 

那如果我想让灯光从0到255,再从255变到0,做成一个类似呼吸灯的效果呢?
那是不是i+1到255之后,再变成i-1就行了?
但是当我们上传这个程序之后,发现效果并没有像预期的一样,灯光并没有慢慢变暗,而是一直最亮,这是怎么回事呢?
接下来我们来用串口监视器看看“i”到底是怎么变化的 




从上面的数据变化可以看到,i从0变到255之后,就一直保持在255,并没有变小,这是什么原因呢?
我们再回过头来看看这段代码,想象i是一个在0-255之间徘徊的小人。当i>255之后,比如i加到256的时候,执行了i = i-1, i变成了255,这时i就不满足>255这个条件了,于是,下次就不会执行“i=i-1”,而仍然是“i=i+1”,i又变成了256,符合if的条件,又有执行了一次“-1”…如此循环下去,“i”一直停留在255这个数字,灯光也就一直是最亮的状态,那怎么解决这个问题呢? 

问题在于,“i” 数值的变化和“i”是加还是减的条件之间产生了冲突,因此,我们需要另一个变量来做判断,而“i”只要明白该“+”还是该“-”就行了

我们设置一个变量gap,专门负责判断“i”是增加还是减少,然后“i”只管增加和减少就行了,写成程序就是这样 :

这里有一个地方需要注意,在写条件的时候,如果有多个条件并列,有这样几种写法,“||” 表示“或”,也就是多个条件只要有一个满足,就能触发条件下的命令,如i >= 255 || i <= 0;还有就是“&&”,表示“且”,也就是只有所有条件都满足,才能触发条件下的命令。所以,在程序里面是不支持类似“0 < i < 255”这样的写法。 
以上是用if来写呼吸灯,接下来我们用另一种更常见的方法来写呼吸灯,那就是for循环。
for循环是一个很重要的语句,在很多编程语言中都存在,他的基本结构就是,设一个变量初始值,划定变量的范围,明确变量变化的方式,再在{ }中写下命令,当变量满足条件的时候,就会循环执行这个命令,直到变量超出范围,循环就停止了。

大家可以尝试把逐渐变暗的程序用for循环写出来,这样就能实现一个呼吸灯效果了。

小Tips:

  1. 学习编程一定要学会举一反三,很多效果不一定只有一种实现方式,大家可以不断尝试用不同写法达到同一个效果,这样对于真正能运用代码非常有帮助。
  2. 在初期刚开始学编程的时候,大家尽量自己把代码敲一边,不要直接复制粘贴,这样对于程序结构的理解非常有帮助,后面熟悉了就无所谓了












所需硬件
暂无数据!
代码展示

1. 点亮彩灯-基础

编程语言: C/C++(Arduino)

软件工具:Arduino IDE 1.8.4


2. 点亮彩灯-用if写呼吸灯

编程语言: C/C++(Arduino)

软件工具:Arduino IDE 1.8.4


附件下载
暂无数据!
授课教师
  • 李溪

    设计出身的程序爱好者

问答专区
暂无数据!