Arduion学习——三色传感灯实验

本文介绍了如何通过Arduino控制RGB三色灯,实现单个灯的颜色变化,以及加入开关后灯的开关控制功能。通过模拟电压值,代码程序实现了红、绿、蓝三种颜色的组合变化。
摘要由CSDN通过智能技术生成

前言

RGB 3色灯是由内部三个不同颜色的灯珠组成的一个灯。RGB灯分为共阴和共阳两种,我们这里用的是共阳。四个引脚中最长的那个为阳极,其他三个分别为红灯,蓝灯,绿灯的阴极,我们通过控制三个灯两端的电压值,可以控制灯的发光亮度,然后组合,让RGB灯发出不同的颜色的光。本文将通过2个实验进行相关学习。

一、单个三色传感灯

1、目标实现

通过控制三个灯2端的电压值,使RGB灯的颜色逐渐变化,颜色变化为紫、青、黄。

2、实验器件

  • 开发板:arduion
  • 面包板:1 个
  • 220欧电阻:3 个
  • RGB三色灯:1 个
  • 多彩杜邦线:若干

3、接线

接线原理如下图所示

实验接线如图所示

4、代码程序

在编写相关程序之前,我们应该对颜色的叠加有所了解。

红+蓝=紫-->蓝+绿=青-->红+绿=黄

要使代码实现相关目标,可以对实验要求进行转换:

   ①红灯变亮,绿灯变暗,蓝灯常亮
   ②蓝灯变亮,红灯变暗,绿灯常亮
   ③绿灯变亮,蓝灯变暗,红灯常亮

具体代码如下:

//观察到RGB灯的颜色在渐渐变化,可以组合出多种颜色
/*
   需求:
   ①红灯变亮,绿灯变暗,蓝灯常亮
   ②蓝灯变亮,红灯变暗,绿灯常亮
   ③绿灯变亮,蓝灯变暗,红灯常亮
*/
int RedPin = 11;
int GreenPin = 10;
int BluePin = 9;    //定义LED接口
int redval = 0;
int blueval = 0;
int greenval = 0;   //定义LED变量
int value;

static void color(int red, int blue, int green);  //给LED接口相关模拟值

void setup() 
{
   pinMode(RedPin, OUTPUT);
   pinMode(BluePin, OUTPUT);
   pinMode(GreenPin, OUTPUT);//设置LED接口为输出接口
}

void loop() {
  value++;
  if (value < 200)
  {
    redval++;         //0-200       红色最亮变暗
    greenval--;       //0-(-200)  绿色瞬间熄灭后变亮
    blueval = 1;      //1           蓝色一直很亮         红+蓝=紫-->蓝+绿=青
  }
  else if (value < 400)
  {
    blueval++;        //1-200      蓝色最亮变暗
    redval--;         //200-0      红色变亮
    greenval = 1;     //1          绿色一直很亮          蓝+绿=青-->红+绿=黄
  }
  else if (value < 600)
  {
    greenval++;       //1-200       绿色最亮变暗   
    blueval--;        //1-(-199)  蓝色瞬间熄灭后变亮
    redval = 1;       //1           红色一直很亮          红+绿=黄-->红+蓝=紫
  }
  else
  {
    value = 0;       //重新给val赋值进行新循环
  }
  color(redval, blueval, greenval);  //执行color()函数
  delay(20);
}

static void color(int red, int blue, int green)  //给LED接口相关模拟值
{
  analogWrite(RedPin, red);
  analogWrite(BluePin, blue);
  analogWrite(GreenPin, green);
}

二、三色传感灯与开关

1、目标实现

在上个实现的基础上,我们加入一个开关,当开关松开时,RGB灯开始工作,当开关按下时,RGB灯停止工作。

2、实验器件

  • 开发板:arduion
  • 面包板:1 个
  • 220欧电阻:4 个
  • RGB三色灯:1 个
  • 开关:1 个
  • 多彩杜邦线:若干

3、接线

接线原理如下图所示

实验接线如图所示

4、代码程序

int Switch = 2;     //定义数字2接口为按键的引脚编号
int RedPin = 11;
int GreenPin = 10;
int BluePin = 9;    //定义LED接口
int redval = 0;
int blueval = 0;
int greenval = 0;   //定义LED变量
int value;

static void color(int red, int blue, int green);  //给LED接口相关模拟值
static void run_RGB();                            //执行RGB灯

void setup()
{
  pinMode(RedPin, OUTPUT);
  pinMode(BluePin, OUTPUT);
  pinMode(GreenPin, OUTPUT);//设置LED接口为输出接口
  pinMode(Switch, INPUT);   //定义按键接口为输入接口
}

void loop()
{
   if (digitalRead(Switch) == HIGH) //松开按钮
  {
    run_RGB();
  }
  else                             //按下按钮
  {
    color(255,255,255);
  }
}

static void run_RGB()
{
  value++;
  if (value < 200)
  {
    redval++;         //0-200       红色最亮变暗
    greenval--;       //0-(-200)  绿色瞬间熄灭后变亮
    blueval = 1;      //1           蓝色一直很亮         红+蓝=紫-->蓝+绿=青
  }
  else if (value < 400)
  {
    blueval++;        //1-200      蓝色最亮变暗
    redval--;         //200-0      红色变亮
    greenval = 1;     //1          绿色一直很亮          蓝+绿=青-->红+绿=黄
  }
  else if (value < 600)
  {
    greenval++;       //1-200       绿色最亮变暗
    blueval--;        //1-(-199)  蓝色瞬间熄灭后变亮
    redval = 1;       //1           红色一直很亮          红+绿=黄-->红+蓝=紫
  }
  else
  {
    value = 0;       //重新给val赋值进行新循环
  }
  color(redval, blueval, greenval);  //执行color()函数
  delay(20);
}

static void color(int red, int blue, int green)  //给LED接口相关模拟值
{
  analogWrite(RedPin, red);
  analogWrite(BluePin, blue);
  analogWrite(GreenPin, green);
}

 Gitte源码仓库:https://gitee.com/chen_xy_chen/arduion_c.git


三、最终效果

具体效果视频就不在此展示了,感兴趣的伙伴可以自行接线复制代码进行实验。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值