114772| 62
|
[入门教程] Arduino教程 06 炫彩RGB LED「DFR0100」 |
单色LED我们就讲到这里了,现在介绍一种新的LED——RGB LED。之所以叫RGB,是因为这个LED是由红(Red)、绿(Green)和蓝(Blue)三色组成。我们电脑的显示器也是由一个个小的红、绿、蓝点组成的。可以通过调整三个LED中每个灯的亮度就能产生不同的颜色。这个项目就是教你通过一个RGB小灯随机产生不同的炫彩颜色。我们可以先感性的看一下,按下图连接硬件并输入代码。 所需元件1× 5mm RGB LED灯 硬件连接连接之前,先判别RGB是共阴还是共阳,如果不是很清楚的,可以先跳到这个项目的硬件部分介绍。连接时,还需注意一点,引脚的顺序,可参照右边的引脚图。 输入代码样例代码5-1:
代码下载完成后,我们可以看到LED颜色呈现随机的变化,不只是单一的一种颜色。 代码回顾来分析一下,其实一个RGB灯,就是我们前面讲的单色LED的结合体,内部集成了三个LED,也就需要用三个数字PWM口来控制。在我们程序开头部分可以看到定义了三个引脚,并设置为输出模式。 最主要的部分,也就是主函数。主函数中调用了一个自己创建的函数colorRGB(),函数有三个传递参数,用于写入Red、Green、Blue的值,也就是0~255的值。 使用函数的好处在于,之后我们想调到某个颜色的时候,只有直接给这三个参数赋值就可以了。不需要重复写analogWrite()函数,使程序变得冗长。 这段函数中,我们比较陌生的就是constrain()和random()这两个函数。 函数格式如下: 回到我们的程序,red、green、blue值是被约束数,约束范围在0~255,也就是我们PWM值的范围。它们的值来源于random()函数随机产生。 函数格式如下: 硬件回顾RGB灯RGB灯有4个引脚,R、G、B三个引脚连接到LED灯的一端,还有一个引脚是共用的正极(阳)或者共用的阴极(负)。我们这里选用的是共阴RGB。看下图5-2,就是明白了,展示了三个LED如何华丽蜕变为一个RGB的过程,R、G、B其实就是三个LED的正极,把它们的负极拉到一个公共引脚上了,它们公共引脚是负极,所以称之为共阴RGB。 RGB只是简单的把三个颜色的LED灯封装在一个LED中。只要当做三个灯使用就可以了。我们都知道红色、绿色、蓝色是三原色,Arduino通过PWM口对三种颜色明暗的调节,也就analogWrite(value)语句,就能让LED调出任何你想要的颜色。 表5-1只是罗列了几种典型的颜色,可调的色彩远多于上表所示的,使用PWM可以产生0~255之间的全部颜色,共16777216种颜色(256×256×256)。不妨可以动手尝试一下,设置三个LED的PWM值来,随意切换颜色吧!
表 5-1 不同LED的PWM值所组合产生的颜色
课后作业1、基于我们上面的炫彩RGB项目,改变代码能都做一个沿着彩虹色变化的RGB灯,而不是我们这样随机产生颜色。这里比较困难的应该是颜色的调制,通过改变Red、Blue、Green的值0~255,组合出一个你想要的颜色。 提示:只要在原有代码基础上做修改就可以了,直接调用colorRGB()函数,将函数中3个参数写入所对应颜色的值即可。 2、在作业1的基础上,能否结合我们上面说的呼吸灯,将彩虹色以呼吸灯渐变形式变化。这样的变换会显得更加柔和。 3、Arduino是个开源的平台,从网上寻找一些别人已经写好了的库,不需要自己从头写,难度也比较大,所以我们只需调用别人写好的库,来达到我们想要的效果就可以了。 下面就提供一个DFRobot的RGB LED库文件。你可以尝试直接运行样例代码 如何加载库?先把库文件从网站上下载下来,整个压缩包解压到Arduino IDE的libraries文件夹中。 需要注意的是,库文件夹下要直接显示.cpp和.h文件,绝对不可以把这些库文件再套到二级以上目录,这样子就会导致IDE无法识别。
|
2.12 KB, 下载次数: 2224
呼吸灯闪烁,课后作业代码:
|
Jane 发表于 2014-8-29 10:22 int l1=9,l2=10,l3=11; void setup() { pinMode(l1,OUTPUT); pinMode(12,OUTPUT); pinMode(l3,OUTPUT); } void loop() { bian(random(0,256),random(0,256),random(0,256)); } void bian(int a,int b,int c) { analogWrite(l1,a); analogWrite(l2,b); analogWrite(l3,c); delay(50); } |
Raiden 发表于 2014-11-15 00:34 你说的那个随机数的问题,random()是个伪随机,所以是重复的。如果你想用随机的话,可以用randomSeed(seed)定义一个随机数种子。 具体用法:http://arduino.cc/en/Reference/RandomSeed |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed