《Microduino实战》——3.6 RGB彩色LED——彩色的世界

简介:

本节书摘来自华章出版社《Microduino实战》一 书中的第3章,第3.6节,作者:姚琪 杨立斌,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.6 RGB彩色LED——彩色的世界

上一节实践了如何控制一个LED,如何控制多个LED呢?
本节会用一个 RGB彩色LED做实验,目的在于练习Arduino编程以及函数的
封装。
1.基本原理
RGB 彩色LED相当于将红色、绿色和蓝色3种LED集成了在一起,分为共阴和共阳两种类型。如图3-28所示是一种共阳的彩色LED,即共阳的引脚要接高电平,而控制端口则是低电平才能点亮LED。通过三路PWM控制3种颜色的亮度,便能合成不同颜色的光。
 
screenshot

小知识 RGB LED有4个引脚,用最长的一根公用引脚作为标志。排列顺序是这样的:R引脚、公共引脚(最长)、G引脚和B引脚。
screenshot
screenshot

程序清单

/*功能描述:
* 通过三路PWM控制彩色LED
*
* 引脚映射:
* D11  --> red引脚
* D5   --> green引脚
* D6   --> blue引脚
* 注意:
* Microduino-Core只有引脚3、5、6、9、10、11才能输出PWM
*/
int redPin = 11;
int greenPin = 5;
int bluePin = 6;

/*自定义子函数,将三路PWM的控制集成到同一个函数中,便于控制
*/
void setColor(int red, int green, int blue)
{
    analogWrite(redPin, 255-red);    //共阳RGB,低电平点亮,用255-red
    analogWrite(greenPin, 255-green);    //占空比数值取值为0~255
    analogWrite(bluePin, 255-blue);
}

void setup()
{
    //设置3个引脚的输出
    pinMode(redPin, OUTPUT);
    pinMode(greenPin, OUTPUT);
    pinMode(bluePin, OUTPUT);  
}

void loop()
{
    setColor(255, 0, 0);        // (R,G,B)红色
    delay(1000);
    setColor(0, 255, 0);        // 绿色
    delay(1000);
    setColor(0, 0, 255);        // 蓝色
    delay(1000);
    setColor(255, 255, 0);    // 黄色
    delay(1000);  
    setColor(80, 0, 80);        // 紫色
    delay(1000);
    setColor(255, 255, 255);    //白 
    delay(1000);
    setColor(0, 0, 0);        //熄灭
    delay(1000);
    for(int i=0;i<255;i+=5)    //红色渐亮
    {
        setColor(i, 0, 0);  
        delay(30);
    }
    delay(100);
    for(int i=255;i>0;i-=5)    //红色渐灭
    {
        setColor(i, 0, 0);  
        delay(30);
    }
    delay(100);
    for(int i=0;i<255;i+=5)    //蓝色渐亮
    {
        setColor(0, i, 0); 
        delay(30); 
    }
    delay(100);
    for(int i=255;i>0;i-=5)    //蓝色渐灭
    {
        setColor(0, i, 0);  
        delay(30);
    }
    delay(100);
    for(int i=0;i<255;i+=5)    //绿色渐亮
    {
        setColor(0, 0, i);  
        delay(30);  
    }
    delay(100);
    for(int i=255;i>0;i-=5)    //绿色渐灭
    {
        setColor(0, 0, i);  
        delay(30);
    }
    delay(100);
}

程序中可以看到,要控制LED灯的颜色,必须同时控制3个引脚输出的PWM。为了方便编程,将3个引脚的控制封装成一个setColor()函数,传递的参数是对应每个引脚的占空比数值。

  1. 观察现象
    根据提供的连接示意图搭建电路,并与计算机相连。

打开Arduino IDE,输入程序代码,编译并下载,然后观察彩色LED的颜色变化。
可以看到在彩色LED上会出现红、绿、蓝、黄、紫、白等颜色,以及渐明渐暗的效果。

  1. 进一步探索
    请读者思考:除了以上的控制方式,还能做出什么样的灯光秀呢?
相关文章
|
9月前
|
存储 编解码 Linux
荔枝派Zero(全志V3S)驱动开发之RGB LCD屏幕显示bmp图片
了解 framebuffer 字符设备 了解 bmp图片格式 通过操作 /dev/fb0 字符设备来实现在 RGB LCD 屏幕上显示 bmp 图片。
261 0
|
9月前
|
编译器 Linux
荔枝派Zero(全志V3S)驱动开发之RGB LCD屏幕显示jpg图片
由于从上篇博文 “荔枝派Zero(全志V3S)驱动开发之RGB LCD屏幕显示bmp图片” 中只实现了显示 bmp 图片,实际上我们很常用到的图片多数是 jpg 格式图片,因此我们需要折腾一下,实现 jpg 文件的显示。
140 0
LabVIEW控制Arduino实现RGB调色灯(基础篇—6)
利用LIAT中的RGB函数库,通过LabVIEW控制Arduino Uno控制板实现RGB调色。
|
数据格式
基于uFUN开发板的RGB调色器
基于uFUN开发板的RGB调色器
99 0
基于uFUN开发板的RGB调色器
|
数据格式
基于STM32+Qt上位机的RGB调色器,全开源!
基于STM32+Qt上位机的RGB调色器,全开源!
211 0
基于STM32+Qt上位机的RGB调色器,全开源!
|
传感器 Ubuntu API
ESP32-C3入门教程 基础篇(五、RMT应用 — 控制SK6812全彩RGB 灯)
测试第五课,本来是准备测试一下PWM驱动 SK6812 RGB灯, 但是研究了一段时间,发现在ESP32-C3 有更好而且现成的方式 实现 SK6812 的控制, 使用PWM也不是不可以,只是对于初学者,需要多花好多时间, 所以本文还是先以ESP32-C3内置的 RMT 进行 SK6812 的控制,毕竟有现成的示例
1322 0
ESP32-C3入门教程 基础篇(五、RMT应用 — 控制SK6812全彩RGB 灯)
Photoshop - RGB 转 CMYK 如何不失真?
Photoshop - RGB 转 CMYK 如何不失真?
552 0
Photoshop - RGB 转 CMYK 如何不失真?
|
Python
树莓派使用 OLED 屏显示图片及文字
树莓派默认是不带显示屏的,如果想要查看系统的一些信息,需要使用电脑登录到树莓派,或者通过 HDMI 连接外接显示器查看。这样做总是有点麻烦,我们可以通过外接一个 OLED 屏来显示一些关键参数或者图片。本文将详细介绍操作方法。
476 0
树莓派使用 OLED 屏显示图片及文字
|
关系型数据库 Python
一起玩转树莓派(3)——点亮RGB炫彩LED灯
一起玩转树莓派(3)——点亮RGB炫彩LED灯
410 0
一起玩转树莓派(3)——点亮RGB炫彩LED灯