ArduinoUNO实战-第十八章-三基色LED实现七彩色渐变

一、参考

二、目标

驱动一颗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);
	}
}
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值