大数跨境
0
0

【基础系列教程】项目五:炫彩RGB LED

【基础系列教程】项目五:炫彩RGB LED DF创客社区
2020-08-26
1
【点击上方「蓝字」关注DF,一起成为技术颜控!】

单色LED我们就讲到这里了,现在介绍一种新的LED——RGB LED。之所以叫RGB,是因为这个LED是由红(Red)、绿(Green)和蓝(Blue)三色组成。我们电脑的显示器也是由一个个 小的红、绿、蓝点组成的。可以通过调整三个LED中每个灯的亮度就能产生不同的颜色。这个项目就是教你通过一 个RGB小灯随机产生不同的炫彩颜色。我们可以先感性的看一下,按下图连接硬件并输入代码。

所需元件

硬件连接

连接之前,先判别RGB是共阴还是共阳,如果不是很清楚的,可以先跳到这个项目的硬件部分介绍。连接时,还需注意一点,引脚的顺序,可参照右边的引脚图。

图 5-1 炫彩RGB LED连线图

输入代码

样例代码5-1:

//项目五 – 炫彩RGB灯int redPin = 9;int greenPin = 10;int bluePin = 11;void setup(){  pinMode(redPin, OUTPUT);  pinMode(greenPin, OUTPUT);  pinMode(bluePin, OUTPUT);}void loop(){  //R:0-255 G:0-255 B:0-255  colorRGB(random(0,255),random(0,255),random(0,255));   delay(1000);}void colorRGB(int red, int green, int blue){  analogWrite(redPin,constrain(red,0,255));  analogWrite(greenPin,constrain(green,0,255));  analogWrite(bluePin,constrain(blue,0,255));}

代码下载完成后,我们可以看到LED颜色呈现随机的变化,不只是单一的一种颜色。

代码回顾

来分析一下,其实一个RGB灯,就是我们前面讲的单色LED的结合体,内部集成了三个LED,也就需要用三个数字PWM口来控制。在我们程序开头部分可以看到定义了三个引脚,并设置为输出模式。

最主要的部分,也就是主函数。主函数中调用了一个自己创建的函数colorRGB(),函数有三个传递参数,用于写入Red、Green、Blue的值,也就是0~255的值。

使用函数的好处在于,之后我们想调到某个颜色的时候,只有直接给这三个参数赋值就可以了。不需要重复写analogWrite()函数,使程序变得冗长。

这段函数中,我们比较陌生的就是constrain()和random()这两个函数。

函数格式如下:

constrain()函数需要3个参数:x、a和b。这里x是一个被约束的数,a是最小值,b是最大值。如果值小于a,则返回a。如果大于b,则返回b。

回到我们的程序,red、green、blue值是被约束数,约束范围在0~255,也就是我们PWM值的范围。它们的值来源于random()函数随机产生。

函数格式如下:

random()函数用于生成一个随机数,min随机数的最小值,max随机数的最大值。random()函数还有其他用法,可以参看手册。

硬件回顾

RGB灯

RGB灯有4个引脚,R、G、B三个引脚连接到LED灯的一端,还有一个引脚是共用的正极(阳)或者共用的阴极(负)。我们这里选用的是共阴RGB。图5-2展示了三个LED如何华丽蜕变为一个RGB的过程,R、G、B其实就是三个LED的正极,把它们的负极拉到一 个公共引脚上了,它们公共引脚是负极,所以称之为共阴RGB。

图 5-2 3个LED蜕变为1个RGB的过程

RGB灯如何使用?如何实现变色?RGB只是简单的把三个颜色的LED灯封装在一个LED中,只要当做三个灯使用就可以了。我们都知道红色、绿色、蓝色是三原色,Arduino通过PWM口对三种颜色明暗的调节,即analogWrite(value) 语句,就能让LED调出任何你想要的颜色。

图 5-3 混合R、G、B获得不同的颜色

表5-1只是罗列了几种典型的颜色,可调的色彩远多于上表所示的,使用PWM可以产生0~255之间的全部颜色,共16777216种颜色(256×256×256)。不妨可以动手尝试一下,设置三个LED的PWM值来,随意切换颜色吧!

表 5-1 不同LED的PWM值所组合产生的颜色

共阳RGB与共阴RGB的区别

上面我们还遗留一个问题——共阴与共阳在使用上有什么区别?共阳RGB就是把正极拉到一个公共引脚,其他三个端则是负极。下图是可以看出,外表上共阴共阳没有任何区别。

然而在使用上是有区别的,区别分为以下两点:

(1)接线中的改变,共阳的话,共用端需要接5V,而不是GND,否则LED不能被点亮。

(2)第二点就是,在颜色的调配上,与共阴是完全相反的。

举个例子:共阴RGB显示红色为R-255,G-0,B-0。然而共阳则完全相反,RGB数值是 R-0, G-255, B-255。

课后作业

1、基于我们上面的炫彩RGB项目,改变代码能都做一个沿着彩虹色变化的RGB灯,而不是我们这样随机产生颜色。这里比较困难的应该是颜色的调制,通过改变Red、Blue、Green的值0~255,组合出一个你想要的颜色。

提示:只要在原有代码基础上做修改就可以了,直接调用colorRGB()函数,将函数中3个参数写入所对应颜色的值即可。

2、在作业1的基础上,能否结合我们上面说的呼吸灯,将彩虹色以呼吸灯渐变形式变化。这样的变换会显得更加柔和。

3、Arduino是个开源的平台,从网上寻找一些别人已经写好了的库,不需要自己从头写,难度也比较大,所以我们只需调用别人写好的库,来达到我们想要的效果就可以了。

下面就提供一个DFRobot的RGB LED库文件。你可以尝试直接运行样例代码

http://www.dfrobot.com.cn/index.php?route=product/product&filter_name=RGB&product_id=756

4、RGB灯和按钮结合,用三个按钮分别控制R、G、B的颜色。随意变幻出你想要的颜色。

可以参看教程:

http://learn.adafruit.com/adafruit-arduino-lesson-7-make-an-rgb-led-fader?view=all

- END -

硬件军火库


DFRduino UNO R3

Proto Shield

高品质面包线(30根-公公头)


点击了解详情👆


大家有什么想法,或是对文章的指正,都欢迎在下方留言

学有余力的小伙伴,可以点击阅读原文,到社区继续学习!




 往期回顾 




【基础系列教程】初识Arduino

【基础系列教程】项目一:LED闪烁

【基础系列教程】项目二:S.O.S求救信号器

【基础系列教程】项目三:互动交通信号灯

【基础系列教程】项目四:呼吸灯


点击阅读👆


【声明】内容源于网络
0
0
DF创客社区
我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
内容 1282
粉丝 0
DF创客社区 我们是专注于创新和开源硬件开发的公司——DFRobot成立的创客社区,无论你是资深创客还是小白,这里都有你的一席之地。一个人玩自己的项目,你只是寂寞宅;一群人看你玩项目,你就是技术牛!快来分享你的项目吧!
总阅读2.4k
粉丝0
内容1.3k