swim 发表于 2012-12-14 22:50:09

Arduino入门教程--点亮RGB LED

本帖最后由 弘毅 于 2012-12-20 22:56 编辑

在这一课中,您将学习如何用Arduino控制共阳RGB(红绿蓝)LED,您将使用Arduino中的analogWrite的功能控制RGB LED。

需要用到的原件:

器件数量
10毫米共阳RGB LED1
220Ω电阻3
标准面包板1
Arduino mango控制板1
面包板专用跳线盒1
引脚整形器1


下图是一个直径一厘米的RGB LED



乍一看,RGB(红绿蓝)LED看起来就像普通的LED,但是,和一般LED不同的是RGB LED封装内,有三个LED,一个红色,一个绿色的,一个蓝色的。通过控制各个LED的亮度,你可以混合出几乎任何你想要的颜色。

共阳RGB LED共有4个引脚,常见的正极是第二管脚,也是最长的那个引线。此管脚将被连接到+5V。其余的每个LED的需要串联220Ω的电阻,以防止太大的电流流过烧毁。三个正管脚的LED(一个红色,一个绿色以及一个蓝色)连接到电阻然后连接到Arduino的PWM输出引脚,这里我们用到了D9、D10、D11号管脚。






下面的测试程序为红,绿,蓝,黄,紫,浅绿色的循环

/*
作者:极客工坊
时间:2012年12月18日
IDE版本号:1.0.1
发布地址:www.geek-workshop.com
作用:共阳RGB颜色循环
*/

int redPin = 11;
int greenPin = 10;
int bluePin = 9;

void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}

void loop()
{
setColor(255, 0, 0);// 红色
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(0, 255, 255);// 浅绿色
delay(1000);
}

void setColor(int red, int green, int blue)
{
analogWrite(redPin, 255-red);
analogWrite(greenPin, 255-green);
analogWrite(bluePin, 255-blue);
}

程序下载好后,就可以看到颜色的依次循环变化,可以看我们的演示视频

http://v.youku.com/v_show/id_XNDg3ODI3MDcy.html

如果你熟悉网页编程,你可能会意识到,颜色通常表示为一个“十六进制”数。例如,红色的编号为#FF0000。你可以在这找到一种特定的颜色对应的响应编码
六位数字的编码,实际上是三组数字。第一组2位数字表示红色成分的颜色,在接下来的两组数字分别是绿色部分和蓝色部分。红色是#FF0000,因为它的最大的红色(FF是十六进制的255),它有没有绿色或蓝色的部分。

这将是非常有用的,你可以直接输入色号,通过RGB LED显示出来。让我们尝试这种浅绿颜色(#32B16C)。

我们可以插入这样的“setColor”函数:
setColor(0x32,0xB1,0x6C)//浅绿
不要忘了在setColor函数后面加上延时函数,这样就可以显示你所需要的颜色了

丧心病狂 发表于 2013-2-7 00:21:16

沙发~很漂亮的效果啊。。

peter13447 发表于 2013-2-18 17:55:11

不错,好看
楼主,辛苦了,谢谢

maplezxcwc 发表于 2013-2-22 13:32:27

大顶楼主,很漂亮的灯。。。

太行摄狼 发表于 2013-2-22 19:43:56

很好,可管子没有,

天天向上/tp 发表于 2013-3-19 15:49:08


很好,可管子没有~~我也是这样的

Mei_Ling 发表于 2013-4-2 16:56:45

一定要用Arduino mango控制板?用Arduino UNO 控制板可以吗?

swim 发表于 2013-4-2 17:08:00

Mei_Ling 发表于 2013-4-2 16:56 static/image/common/back.gif
一定要用Arduino mango控制板?用Arduino UNO 控制板可以吗?

可以的

Mei_Ling 发表于 2013-4-2 17:23:32

谢谢了。。。。。。。。。。

玄冰之神 发表于 2013-4-16 09:53:02

:lol顶。。。

swdsbt 发表于 2013-7-15 11:08:33

void setColor(int red, int green, int blue){analogWrite(redPin, 255-red);analogWrite(greenPin, 255-green);analogWrite(bluePin, 255-blue);}这个函数为什么用
'255-red"...而不是直接用“red"...?

弘毅 发表于 2013-7-15 11:19:40

swdsbt 发表于 2013-7-15 11:08 static/image/common/back.gif
void setColor(int red, int green, int blue){analogWrite(redPin, 255-red);analogWrite(greenPin, 2 ...

这个RGB LED是共阳的~~~

swdsbt 发表于 2013-7-15 19:36:34

弘毅 发表于 2013-7-15 11:19 static/image/common/back.gif
这个RGB LED是共阳的~~~

哦,Thanks

机智的小学生 发表于 2013-10-22 10:33:16

还不错!!学习了!

最后的醉 发表于 2013-12-9 10:38:46

void setColor(int red, int green, int blue)
{
analogWrite(redPin, 255-red);
analogWrite(greenPin, 255-green);
analogWrite(bluePin, 255-blue);
}
这个没有的话会怎么呢?它有什么作用呢?
页: [1] 2 3 4
查看完整版本: Arduino入门教程--点亮RGB LED