本节书摘来自华章出版社《Microduino实战》一 书中的第3章,第3.6节,作者:姚琪 杨立斌,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.6 RGB彩色LED——彩色的世界
上一节实践了如何控制一个LED,如何控制多个LED呢?
本节会用一个 RGB彩色LED做实验,目的在于练习Arduino编程以及函数的
封装。
1.基本原理
RGB 彩色LED相当于将红色、绿色和蓝色3种LED集成了在一起,分为共阴和共阳两种类型。如图3-28所示是一种共阳的彩色LED,即共阳的引脚要接高电平,而控制端口则是低电平才能点亮LED。通过三路PWM控制3种颜色的亮度,便能合成不同颜色的光。
小知识 RGB LED有4个引脚,用最长的一根公用引脚作为标志。排列顺序是这样的:R引脚、公共引脚(最长)、G引脚和B引脚。
程序清单
/*功能描述:
* 通过三路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()函数,传递的参数是对应每个引脚的占空比数值。
- 观察现象
根据提供的连接示意图搭建电路,并与计算机相连。
打开Arduino IDE,输入程序代码,编译并下载,然后观察彩色LED的颜色变化。
可以看到在彩色LED上会出现红、绿、蓝、黄、紫、白等颜色,以及渐明渐暗的效果。
- 进一步探索
请读者思考:除了以上的控制方式,还能做出什么样的灯光秀呢?