查看: 5704|回复: 1

【入门教程】DFR0100 Arduino教程06--炫彩RGB LED

[复制链接]
  • TA的每日心情

    2018-1-11 13:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2016-12-2 11:08 | 显示全部楼层 |阅读模式
    本帖最后由 dfrobot 于 2016-12-5 16:52 编辑

    该教程实验套件平台:Arduino入门套件
    上一篇教程:Arduino教程 Lesson 5 -- 呼吸灯


    简单回顾下Lesson 5的内容:
    • 什么是PWM?
    • analogWrite(pin,value)函数

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

    所需元件
    • 1 ×  5mm RGB LED灯
    • 3 ×  220欧电阻

    STEP 1 : 硬件电路搭建

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


    STEP 2:输入代码
    完成硬件连接后,打开Arduino IDE,输入下面这段代码。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    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颜色呈现随机的变化,不只是单一的一种颜色。


    STEP 3:代码回顾

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


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

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


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


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

       

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

       


    上表只是罗列了几种典型的颜色,可调的色彩远多于上表所示的,使用PWM可以产生0~255之间的全部颜色,共16777216种颜色(256×256×256)。不妨可以动手尝试一下,设置三个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、Arduino是个开源的平台,从网上寻找一些别人已经写好了的库,不需要自己从头写,难度也比较大,所以我们只需调用别人写好的库,来达到我们想要的效果就可以了。这里就提供一个RGELED库。

    如何加载库?
    可以参看帖子 ---
    加载库

    RGB灯小制作帖子


    RGBLED.rar (2.12 KB, 下载次数: 16, 售价: 1 金币)
    打赏作者鼓励一下!
  • TA的每日心情
    难过
    2019-4-16 15:20
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    发表于 2018-9-19 18:12 | 显示全部楼层
    666,膜拜一波哦
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    【项目】基于Arduino Nano的多功能桌面感应垃圾桶
    【项目】基于Arduino Nano
    基于Arduino Nano的多功能桌面感应垃圾桶随着大学生活不断往前迈进,宿舍桌面上的杂物
    智能物联网花盆
    智能物联网花盆
    打坏了一个费时5小时 3D打印的花盆,耗时22小时 下载:Kittenblock软件,安装、运
    呼吸灯实验
    呼吸灯实验
    本文节选自《Arduino程序设计基础》 之前的章节已经介绍了多种方法控制LED,但单是开
    为开发板 Generic ESP8266 Module 编译时出错
    为开发板 Generic ESP8266
    第一次尝试Arduino UNO软串口通信,编译一直通不过,错误信息 “开发板 generic (平
    Arduino Uno 无法上传程序
    Arduino Uno 无法上传程序
    原来可以正常使用的Arduino Uno 板子突然不能上传程序了,硬件驱动正常,TX和RX指示灯
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表