本节书摘来自华章出版社《Microduino实战》一 书中的第3章,第3.6节,作者:姚琪 杨立斌,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
上一节实践了如何控制一个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上会出现红、绿、蓝、黄、紫、白等颜色,以及渐明渐暗的效果。
进一步探索请读者思考:除了以上的控制方式,还能做出什么样的灯光秀呢?