0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Arduino上使用RGB LED

454398 来源:网络整理 作者:网络整理 2019-12-03 11:07 次阅读

概述

在本课程中,您将学习如何在Arduino上使用RGB(红绿蓝)LED

您将使用 analogWrite 函数来控制LED的颜色。

乍一看,RGB(红色,绿色,蓝色)LED看起来就像普通的LED,但是,在通常的LED封装中,实际上有三个LED,一个红色,一绿色,是,一蓝色。通过控制每个LED的亮度,您可以混合几乎任何您想要的颜色。

我们可以混合颜色,就像您将音频与“混合板”或调色板上的颜料混合一样-通过调整三个LED各自的亮度。做到这一点的困难方法是使用第2课中使用的不同值的电阻器(或可变电阻器)。这是很多工作!对我们来说幸运的是,Arduino具有 analogWrite 函数,您可以将其与标有〜的引脚一起使用,以向相应的LED输出可变数量的功率。

零件

要构建本课中描述的项目,您将需要以下零件。

零件 数量

扩散RGB LED 10mm 1

270Ω电阻器(红色,紫色,棕色条纹)-可以使用的最大电阻为1K欧姆。小调光器

3

半尺寸面包板 1

Arduino Uno R3 1

跳线包 1

面包板布局

RGB LED有四根引线。封装中每个LED的正极连接都有一根引线,而LED的所有三个负极侧都有一根引线。

LED封装的公共负极连接是LED封装扁平侧的第二个引脚。它也是四个线索中最长的。该引线将接地。

封装内的每个LED都需要自己的270Ω电阻,以防止过多的电流流过。 LED的三个正极(一个红色,一个绿色和一个蓝色)使用这些电阻器连接到Arduino输出引脚。

如果您使用的是普通的ANODE LED而不是普通的CATHODE,请将长引脚连接到+5而不是接地端

颜色

您可以通过改变红色,绿色和蓝色的光量来混合任意颜色,这是因为您的眼睛具有三种类型的光接收器(红色,绿色和蓝色)。您的眼睛和大脑会处理红色,绿色和蓝色的数量,并将其转换为光谱的颜色。

在某种程度上,通过使用三个LED,我们在眼睛上发挥了作用。电视机中使用了相同的想法,其中LCD的红色,绿色和蓝色点彼此相邻,构成每个像素。

如果我们将所有三个LED的亮度设置为相同,则该灯的整体颜色将为白色。如果关闭蓝色LED,以便仅红色和绿色LED具有相同的亮度,则该光将显示为黄色。

我们可以分别控制LED的红色,绿色和蓝色部分的亮度,从而可以混合我们喜欢的任何颜色。

黑色并不是缺少光,而是一种颜色。因此,最能使我们的LED变成黑色的是关闭所有三种颜色。

Arduino草图

以下测试草图将循环显示红色,绿色,蓝色,黄色,紫色和浅绿色。这些颜色是一些标准的Internet颜色。

下载:文件

复制代码

/*

Adafruit Arduino - Lesson 3. RGB LED

*/

int redPin = 11;

int greenPin = 10;

int bluePin = 9;

//uncomment this line if using a Common Anode LED

//#define COMMON_ANODE

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0); // yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255); // aqua

delay(1000);

}

void setColor(int red, int green, int blue)

{

#ifdef COMMON_ANODE

red = 255 - red;

green = 255 - green;

blue = 255 - blue;

#endif

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

} /*

Adafruit Arduino - Lesson 3. RGB LED

*/

int redPin = 11;

int greenPin = 10;

int bluePin = 9;

//uncomment this line if using a Common Anode LED

//#define COMMON_ANODE

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0); // yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255); // aqua

delay(1000);

}

void setColor(int red, int green, int blue)

{

#ifdef COMMON_ANODE

red = 255 - red;

green = 255 - green;

blue = 255 - blue;

#endif

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

尝试一下草图,然后我们将对其进行详细剖析……。

草图通过指定每种颜色将使用哪些引脚:

下载:file

复制代码

int redPin = 11;

int greenPin = 10;

int bluePin = 9; int redPin = 11;

int greenPin = 10;

int bluePin = 9;

下一步是编写“设置”功能。正如我们在前面的课程中所了解的那样,设置功能在Arduino重置后仅运行一次。在这种情况下,它要做的就是定义我们用作输出的三个引脚。

下载:文件

复制代码

void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

} void setup()

{

pinMode(redPin, OUTPUT);

pinMode(greenPin, OUTPUT);

pinMode(bluePin, OUTPUT);

}

在我们看一下“循环”功能之前,先看一下其中的最后一个功能。草图。

下载:文件

复制代码

void setColor(int red, int green, int blue)

{

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

} void setColor(int red, int green, int blue)

{

analogWrite(redPin, red);

analogWrite(greenPin, green);

analogWrite(bluePin, blue);

}

此函数使用三个参数,一个用于红色,绿色和蓝色LED的亮度。在每种情况下,该数字都将在0到255之间,其中0表示关闭,而255表示最大亮度。然后该函数调用‘analogWrite’来设置每个LED的亮度。

如果您查看‘loop’函数,您会看到我们正在设置红色,绿色和蓝色的光量我们要显示的内容,然后暂停一秒钟,然后再继续使用下一种颜色。

下载:文件

复制代码

void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0);// yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255);// aqua

delay(1000);

} void loop()

{

setColor(255, 0, 0); // red

delay(1000);

setColor(0, 255, 0); // green

delay(1000);

setColor(0, 0, 255); // blue

delay(1000);

setColor(255, 255, 0);// yellow

delay(1000);

setColor(80, 0, 80); // purple

delay(1000);

setColor(0, 255, 255);// aqua

delay(1000);

}

尝试向草图添加自己的几种颜色,并观察LED上的效果。

如果使用的是公共阳极RGB LED,则需要更改模拟写入值,以便从255中减去颜色,在草图中取消注释#define COMMON_ANODE行!

使用Internet颜色

如果您已完成任何Internet编程,则可能会意识到颜色通常表示为“十六进制”数字。例如,红色的数字为#FF0000。您可以使用以下表格找到与特定颜色关联的数字:https://htmlcolorcodes.com/color-names/

该数字的六个数字实际上是三对数字。第一对是颜色的红色部分,后两位是绿色部分,最后两位是蓝色部分。红色为#FF0000,因为它的最大红色(FF为十六进制255)并且没有绿色或蓝色部分。

能够拨出这些颜色编号之一以使其显示在屏幕上将非常有用。 RGB LED。

让我们尝试制作靛蓝色(#4B0082)。

i》

靛蓝的红色,绿色和蓝色部分(以十六进制表示)分别为4B,00和82。我们可以将它们插入“ setColor”函数中,如下所示:

下载:文件

复制代码

setColor(0x4B, 0x0, 0x82); // indigo setColor(0x4B, 0x0, 0x82); // indigo

我们在颜色的三个部分使用十六进制数字,方法是在颜色的三个部分前面加上“ 0x”。

尝试将自己的几种颜色添加到“循环”功能中。不要忘了在每个延迟之后添加延迟。

理论(PWM)

脉冲宽度调制(PWM)是一种控制功率的技术。我们还在这里使用它来控制每个LED的亮度。

下图显示了Arduino上PWM引脚之一的信号

大约每1/500秒,PWM输出将产生一个脉冲。该脉冲的长度由“ analogWrite”功能控制。因此,“ analogWrite(0)”将根本不会产生任何脉冲,而“ analogWrite(255)”将产生一直持续到下一个脉冲到期的脉冲,因此输出实际上一直都在。 》如果我们在AnalogWrite中指定一个介于0到255之间的值,那么我们将产生一个脉冲。如果输出脉冲仅在5%的时间内为高电平,那么无论我们驱动什么,都将仅获得5%的全功率。

但是,如果在90%的时间内输出为5V,则负载将获得90%的电力。我们看不到LED会以这种速度打开和关闭,所以对我们来说,亮度似乎在变化。

其他要做的事情

尝试将乒乓球放在LED上

尝试更改延迟以加快速度或减慢颜色变化的速度

使用RGB LED可以做很多事情。检出Internet上使用RGB LED的一些项目,您会发现视觉设备的多色持久性以及各种照明效果。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    240

    文章

    22937

    浏览量

    651740
  • Arduino
    +关注

    关注

    187

    文章

    6456

    浏览量

    186107
收藏 人收藏

    评论

    相关推荐

    如何选择RGB LED驱动器

    电子发烧友网站提供《如何选择RGB LED驱动器.pdf》资料免费下载
    发表于 09-25 14:29 0次下载
    如何选择<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>驱动器

    基于LP50xx器件的全彩RGB LED矩阵系统设计指南

    电子发烧友网站提供《基于LP50xx器件的全彩RGB LED矩阵系统设计指南.pdf》资料免费下载
    发表于 09-25 11:52 0次下载
    基于LP50xx器件的全彩<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>矩阵系统设计指南

    何在Arduino使用ESP32-C6?

    我想在Arduino使用ESP32-C6我应该怎么做?
    发表于 06-11 06:48

    请问如何在ESPIDF v4.4.5下使用rgb_panel?

    各位好。ESPIDF的V4.4.5版本没有rgb_panel这个例程。请问如何在v4.4.5下使用rgb_panel?就像原来在V5的版本的rgb_panel例程里一样,会自动下载好l
    发表于 06-07 07:27

    5050RGB三合一LED WS2850B数据手册

    电子发烧友网站提供《5050RGB三合一LED WS2850B数据手册.pdf》资料免费下载
    发表于 03-07 18:16 1次下载

    arduino如何停止loop循环

    Arduino的loop循环是其主要的程序执行部分,该循环将在Arduino开发板持续运行,并且只有在程序被重新上传或开发板断电重启时才会停止。然而,在某些情况下,你可能需要在程序执行过程中停止或
    的头像 发表于 02-14 16:24 3423次阅读

    arduino中while循环怎么跳出

    Arduino 是一款开源的硬件平台,广泛应用于各种物联网和嵌入式系统项目。在 Arduino 编写代码时,循环结构起到了至关重要的作用。而其中的 while 循环更是常用于需要根据特定条件重复
    的头像 发表于 02-14 16:22 1970次阅读

    如何将LED连接到Arduino板并使其闪烁

     在本快速入门指南中,您将学习如何将 LED 连接到 Arduino 板并使其闪烁。
    的头像 发表于 02-11 10:53 1709次阅读
    如何将<b class='flag-5'>LED</b>连接到<b class='flag-5'>Arduino</b>板并使其闪烁

    如何使用Arduino控制RGB LED

    在本指南中,您将学习如何使用Arduino控制RGB LEDRGB(红-绿-蓝)LED可以通过混合不同强度的红、绿、蓝光来产生多种颜色。您
    的头像 发表于 02-11 10:28 3904次阅读
    如何使用<b class='flag-5'>Arduino</b>控制<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>

    何在KW45-EVK使用RTC

    电子发烧友网站提供《如何在KW45-EVK使用RTC.pdf》资料免费下载
    发表于 01-03 09:41 0次下载
    如<b class='flag-5'>何在</b>KW45-EVK<b class='flag-5'>上</b>使用RTC

    【每周一练】+盘古1K开发板+2. 按键控制RGB led

    : key_led_rgb_top:顶层模块实现,主要定义了信号,端口和模块名称,然后调用子模块key_ctl对按键做控制,调用子模块led_rgbRGB做控制; key_ctl:定义一个模块,名字为
    发表于 12-17 11:33

    树莓派Pico驱动RGB LED模块的方法

    RGB LED 模块内有红、绿、蓝三种颜色的灯丝。可以通过程序将其调制成丰富的色彩点亮。
    的头像 发表于 11-30 09:06 1109次阅读
    树莓派Pico驱动<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>模块的方法

    基于RGB Gamma曲线LED显示图像的色散校正技术

    电子发烧友网站提供《基于RGB Gamma曲线LED显示图像的色散校正技术.doc》资料免费下载
    发表于 11-02 10:54 0次下载
    基于<b class='flag-5'>RGB</b> Gamma曲线<b class='flag-5'>LED</b>显示图像的色散校正技术

    何在AT32 MCU使用FPU功能

    何在AT32 MCU使用FPU功能
    的头像 发表于 11-01 17:18 3892次阅读
    如<b class='flag-5'>何在</b>AT32 MCU<b class='flag-5'>上</b>使用FPU功能

    何在Zynq SoC开始使用FreeRTOS

    该项目演示如何在 Zynq SoC 开始使用 FreeRTOS。
    的头像 发表于 10-18 09:44 1609次阅读
    如<b class='flag-5'>何在</b>Zynq SoC<b class='flag-5'>上</b>开始使用FreeRTOS