RGB三基色LED实验

前言

了解RGB三基色LED的原理和使用方法; 认识Arduino开源硬件开发平台中PMW输出控制的方法; 掌握Arduino通过C语言实现电路组建和信号控制的基本方法。

提示:以下是本篇文章正文内容,下面案例可供参考

一、实验基础知识

1.RGB三基色LED
三基色是指RGB三种颜色,R=Red,G=Green,B=Blue,通过这三种颜色不同比例的混合,可以显示任何颜色。全彩的 LED 屏幕就是通过这种单个的 RGB 灯珠集成在一起做成的,一个 LED 就是一个像素,这个像素可以通过程序控制显示任何颜色、任何灰度。在单片机中是通过 PWM 来实现调色功能,之前学习过 PWM 调光功能,使用 1 个单色 LED,主要功能是亮度变化,如果三种颜色都用 PWM 控制器亮度,就可以混合出不同的比例。看到的彩色图片一般也会用 RGB 格式表示,比如 24 位彩色,RGB 三种颜色各占 8 位,组成的格式是 RGB=888 格式。每种颜色都有 2 的 8 次方=256 个亮度等级,那么整个像素是可以显示 2 的 24 次方=16777216 种颜色,这就是一个像素可以实现的颜色,位数越高,颜色就分的越细。另外一种常用格式是 16 位,RGB=565 格式,一个像素可以显示 2 的 16 次方=65536种颜色,这种格式在单片机里面用的非常多,尤其是单片机控制的彩屏。还有一种格式是18 位,RGB=666 格式,一个像素显示的颜色数量是 2 的 18 次方=262144,以前常听说的 26万色就是说的这种格式。还是从最基本的说起,既然三基色灯是 3 种颜色灯的组合,那么控制部分也就变得非常明确,1 种颜色用 1 路 PWM,三种颜色就用三路 PWM,很幸运,UNO 有大于 3 路 PWM功能输出,所以还有剩余 PWM 来完成其他功能。下面是电路图和实物连接他。同样的 RGB也分共阳和共阴,LED 一共 4 个有效引脚,1 个公共端,另外 3 个是三种颜色的另外一端。
在这里插入图片描述
在这里插入图片描述

二、接线及实验要求

1.基础接线

在这里插入图片描述
2.实验要求
1、使RGB三基色LED自动循环显示红、绿、蓝三种颜色。
在这里插入图片描述

void setup() {
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
}

void loop() {
 digitalWrite(11,255);
 digitalWrite(9,0);
 digitalWrite(10,0);
 delay(1000);
 digitalWrite(11,0);
 digitalWrite(9,255);
 digitalWrite(10,0);
 delay(1000);
digitalWrite(11,0);
 digitalWrite(9,0);
 digitalWrite(10,255);
 delay(1000);
}

2、控制RGB三基色LED显示红、绿、蓝、黄、紫、青、白、熄灭。(代码关键是加一个延时代码delay)
在这里插入图片描述

int PIN_R=11;
int PIN_G=9;
int PIN_B=10;
//int PIN_KEY=2;
//int key_count=0;
void setup() {
  pinMode(PIN_R,OUTPUT);
  pinMode(PIN_G,OUTPUT);
  pinMode(PIN_B,OUTPUT);
  //pinMode(PIN_KEY,INPUT);

}

void loop() {
  
    color(0,255,255);//红
  delay(1000);
  
    color(255,0,255);//绿
 delay(1000);
  
    color(255,255,0);//蓝
  delay(1000);
  
    color(0,0,255);//黄
 delay(1000);
 
    color(0,255,0);//紫
 delay(1000);
  
    color(255,0,0);//青
delay(1000);
    color(0,0,0);//白
  delay(1000);
}

void color (unsigned char red,unsigned char green,unsigned char blue)
{
  analogWrite(PIN_R,255-red);
  analogWrite(PIN_G,255-green);
  analogWrite(PIN_B,255-blue);
}

3、添加按键,通过按键按下,控制RGB三基色LED显示红、绿、蓝、黄、紫、青、白、熄灭。
在这里插入图片描述

int PIN_R=11;
int PIN_G=9;
int PIN_B=10;
int PIN_KEY=2;
int key_count=0;
void setup() {
  pinMode(PIN_R,OUTPUT);
  pinMode(PIN_G,OUTPUT);
  pinMode(PIN_B,OUTPUT);
  pinMode(PIN_KEY,INPUT);

}

void loop() {
  ScanKey();
  if(key_count==1)
  {
    color(0,255,255);//红
  }
  if(key_count==2)
  {
    color(255,0,255);//绿
  }
  if(key_count==3)
  {
    color(255,255,0);//蓝
  }
  if(key_count==4)
  {
    color(0,0,255);//黄
  }
  if(key_count==5)
  {
    color(0,255,0);//紫
  }
  if(key_count==6)
  {
    color(255,0,0);//青
  }
   if(key_count==7)
  {
    color(0,0,0);//白
  }
   if(key_count==8)
  {
    color(255,255,255);//白
  }
  if(key_count>7)
  {
    key_count=0;
  }
}
void ScanKey()
{
  if(digitalRead(PIN_KEY)==LOW)
  {
    delay(20);
    if(digitalRead(PIN_KEY==LOW))
    {
      key_count++;
      while(digitalRead(PIN_KEY)==LOW);
    }
  }
}
void color (unsigned char red,unsigned char green,unsigned char blue)
{
  analogWrite(PIN_R,255-red);
  analogWrite(PIN_G,255-green);
  analogWrite(PIN_B,255-blue);
}