共阳RGB就是把阳极拉到一个公共引脚,其他三个端则是阴极。
共阴RGB就是把阴极拉到一个公共引脚,其他三个端则是阳极。
本实验采用共阳极RGB,共用端需要接5V,而不是GND,否则LED不能被点亮。
一、LED颜色随机变化
原理图:
实物图:
参考代码:
int redPin = 9;
int greenPin = 10;
int bluePin = 11;
void setup(){
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void loop(){
//R:0-255 G:0-255 B:0-255
colorRGB(random(0,255),random(0,255),random(0,255));
delay(1000);
}
void colorRGB(int red, int green, int blue){
analogWrite(redPin,constrain(red,0,255));
analogWrite(greenPin,constrain(green,0,255));
analogWrite(bluePin,constrain(blue,0,255));
}
二、炫彩LED
用红色、绿色、蓝色、黄色、青色、品红色和白色交替点亮RGB LED,并在每种颜色上暂停1秒。
表 不同的PWM值所组合产生的颜色(共阳极RGB LED)
颜色 | 红色 | 绿色 | 蓝色 |
红色 | 0 | 255 | 255 |
绿色 | 255 | 0 | 255 |
蓝色 | 255 | 255 | 0 |
黄色 | 0 | 0 | 255 |
青色 | 255 | 0 | 0 |
品红色 | 0 | 255 | 0 |
白色 | 0 | 0 | 0 |
参考代码:
int redPin=9;
int greenPin=11;
int bluePin=10;
void setup() {
// put your setup code here, to run once:
pinMode(redPin,OUTPUT);
pinMode(greenPin,OUTPUT);
pinMode(bluePin,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
colorRGB(0,255,255);//red
delay(1000);
colorRGB(255,0,255);//green
delay(1000);
colorRGB(255,255,0);//blue
delay(1000);
colorRGB(0,0,255);//yellow
delay(1000);
colorRGB(255,0,0);//青色
delay(1000);
colorRGB(0,255,0);//品红
delay(1000);
colorRGB(0,0,0);//白
delay(1000);
}
void colorRGB(int red,int green,int blue)
{
analogWrite(redPin,constrain(red,0,255));
analogWrite(greenPin,constrain(green,0,255));
analogWrite(bluePin,constrain(blue,0,255));
}
三、由RGB LED制作的交通灯。
要求实现红灯亮10秒,绿灯亮10秒,黄灯亮3秒
参考代码:
int redPin=9;
int greenPin=11;
int yellowPin=10;
void setup() {
// put your setup code here, to run once:
pinMode(redPin,OUTPUT);
pinMode(greenPin,OUTPUT);
pinMode(yellowPin,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
colorRGB(0,255,255);//red
delay(10000);
colorRGB(255,0,255);//green
delay(10000);
//yellow
for(int i = 0; i < 3; i++) { // 闪烁3次,每次闪烁持续500ms,间隔500ms
colorRGB(0, 0, 255); // 黄色亮
delay(500);
colorRGB(0, 0, 0); // 黄色灭
delay(500);
}
}
void colorRGB(int red,int green,int yellow)
{
analogWrite(redPin,constrain(red,0,255));
analogWrite(greenPin,constrain(green,0,255));
analogWrite(yellowPin,constrain(yellow,0,255));
}