2019-12-2 09:57:32 [显示全部楼层]
3623浏览
查看: 3623|回复: 1

[入门] 【炫彩 RGB LED】基于Mind+ Ardunio入门教程05

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



所需元件

1×  5mm RGB LED灯                 
3×  220欧电阻                                    


                        
硬件连接

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



图形化编程

       输入样例程序5-1所示程序。本项目中需要声明一个可以输入参数的函数,函数的创建步骤之前已经讲解。在新建函数时,如下图,点击框中的“添加输入项”即可命名输入参数的名称。

       点住并拖曳red”这一参数,能够像其他变量一样使用。并且它是个局部变量,仅可以在这一函数中调用。

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



图形化指令学习





代码学习

       本项目的C代码如下。接下来我们将依次学习每一行代码的意义
[mw_shl_code=c,true]// 函数声明
void DF_colorRGB(float red, float green, float blue);


// 主程序开始
void setup() {
        dfrobotRandomSeed();
}
void loop() {
        DF_colorRGB((random(0, 255+1)), (random(0, 255+1)), (random(0, 255+1)));
        delay(1000);
}


// 自定义函数
void DF_colorRGB(float red, float green, float blue) {
        analogWrite(9, (constrain(red, 0, 255)));
        analogWrite(10, (constrain(green, 0, 255)));
        analogWrite(11, (constrain(blue, 0, 255)));
}[/mw_shl_code]
       来分析一下,其实一个RGB灯,就是我们前面讲的单色LED的结合体,内部集成了三个LED,也就需要用三个数字PWM口来控制。

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

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

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

       我们上一个项目的课后作业部分提到的两个网站。通过那个方法,能否尝试自己来学习一下这两个函数。

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

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

■ dfrobotRandomSeed();

       dfrobotRandomSeed()函数用来设置随机数种子、初始化随机数生成器。利用模拟量引脚(A6、A7)来读取空气中不确定的模拟噪声,用它来做随机种子,可获取到更加理想的随机数。

random(min,max)

       random()函数用于生成一个随机数,min是随机数的最小值,max是随机数的最大值,生成[min, max-1]范围的随机数.。在代码中写为“255+1”是因为Mind+在转化图形指令的时候,为了确保能random()函数能够取到255这个值。关于random()函数的其他用法,可以参看手册。



硬件回顾

RGB

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

       RGB灯如何使用呢?如何实现变色呢?

       RGB只是简单的把三个颜色的LED灯封装在一个LED中。只要当做三个灯使用就可以了。我们都知道红色、绿色、蓝色是三原色,Arduino通过PWM口对三种颜色明暗的调节,也就analogWrite(value)语句,就能让LED调出任何你想要的颜色。
5-3  混合RGB获得不同的颜色

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

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


共阳RGB与共阴RGB的区别

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

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

       1)接线中的改变,共阳的话,共用端需要接5V,而不是GND,否则LED不能被点亮。
       2)第二点就是,在颜色的调配上,与共阴是完全相反的。

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



课后作业

1. 手动输入本项目的代码

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

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

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



hnyzcj  版主

发表于 2020-6-30 20:56:23

8错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail