一、参考
二、目标
驱动一颗RGB三基色LED产生七色光的变化
引脚最长的为共阳的正极,剩下3个分别为红色、绿色、蓝色。
三、理论学习
四、实物图
淘宝链接:https://item.taobao.com/item.htm?spm=a1z0d.7625083.1998302264.5.5c5f4e69AeWU7v&id=638544134425
五、代码
7色光切换
// 定义三基色
#define LED_R 6
#define LED_G 4
#define LED_B 5
// 红、绿、蓝、黄、紫、青、白
enum{Color_R,Color_G,Color_B,Color_RG,Color_RB,Color_GB,Color_RGB};
void setup()
{
Serial.begin(115200);
// 三基色
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
}
int color_index = 0;
void loop()
{
Change_Color(color_index);
color_index++
//if(color_index>7)
if(color_index == Color_RGB+1)
{
//color_index = 0;
color_index = Color_R;
}
delay(1000);
}
// 切换颜色
void Change_Color(unsigned char data_color) {
switch(data_color)
{
case Color_R: // 红色
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, HIGH);
break;
case Color_G: // 绿色
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, HIGH);
break;
case Color_B: // 蓝色
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, LOW);
break;
case Color_RG: // 黄色
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, HIGH);
break;
case Color_RB: // 紫色
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_B, LOW);
break;
case Color_GB: // 青色
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
break;
case Color_RGB: // 白色
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(LED_B, LOW);
break;
default:
break;
}
}
颜色渐变
参考:使用RGB共阳极LED,基于Arduino实现七彩渐变
需要把三根线接到板子带波浪线的引脚,比如3,,5,6
颜色值是从0~255
#define LED_R 3
#define LED_G 5
#define LED_B 6
int PWMValue = 0
void setup()
{
// 初始化三个颜色都是不亮,都是低电平
analogWrite(LED_R, 255);
analogWrite(LED_G, 255);
analogWrite(LED_B, 255);
}
void loop()
{
int i = 0;
// 红色逐渐变亮
PWMValue = 255;
for(i = 0;i<255;i++)
{
analogWrite(LED_R, PWMValue--);
analogWrite(LED_G, 255);
analogWrite(LED_B, 255);
delay(10);
}
// 红色逐渐变暗
PWMValue = 0;
for(i = 0;i<255;i++)
{
analogWrite(LED_R, PWMValue++);
analogWrite(LED_G, 255);
analogWrite(LED_B, 255);
delay(10);
}
// 绿色逐渐变亮
PWMValue = 255;
for(i = 0;i<255;i++)
{
analogWrite(LED_R, 255);
analogWrite(LED_G, PWMValue--);
analogWrite(LED_B, 255);
delay(10);
}
// 绿色逐渐变暗
PWMValue = 0;
for(i = 0;i<255;i++)
{
analogWrite(LED_R, 255);
analogWrite(LED_G, PWMValue++);
analogWrite(LED_B, 255);
delay(10);
}
}