Arduino 点亮RGB彩色流水灯

栏目: 软件资讯 · 发布时间: 7年前

内容简介:Arduino 点亮RGB彩色流水灯

Ardiuno第一个程序:点亮LED灯  中,介绍了用Arduino 进行开发的步骤以及如何点亮一个LED灯;本篇文章在上一篇的基础上教大家在Arduino uno R3上点亮一个6位的RGB彩色流水灯。

实验的效果是 6个RGB彩色流水灯依次点亮,颜色变化依次为:红色-绿色-蓝色-白色-黄色-青色,如下图。

Arduino 点亮RGB彩色流水灯

有个实验的小视频,也可以看下效果:

一、准备材料

Arduino uno R3 开发板:1

杜邦线:10

RGB彩色流水灯模块:1

二、原理介绍

树莓派GPIO控制RGB彩色LED灯 中,介绍了RGB彩色流水灯的原理以及点亮一个LED灯的方法。本篇文章,我们用代码实现依次点亮LED灯,在点亮的同时,改变RGB的输出值,就可以改变RGB灯显示的颜色,从而实现彩色的流水灯。

硬件使用了一个RGB彩色流水灯模块,模块上集成了8个共阳RGB彩色LED灯,使用时只需要将模块上的引脚接到Arduino uno R3开发板上即可,不用自己连接电阻,方便了使用。要注意的是,由于我杜邦线不够,所以就只是用了模块上的6个RGB灯。如果你要控制8个RGB灯,你应该修改我使用的代码。

Arduino控制RGB彩色灯就需要使用PWM输出,本文使用analogWrite函数来产生PWM。脉宽调制(PWM)是一种用数字手段获得模拟结果的技术。数字控制用于产生方波,信号在只能在开与关之间切换。这种开关模式通过改变高电平持续时间与低电平持续时间比值,可以模拟在开(5伏)和关闭(0伏)之间的任一模拟电压。高电平持续时间称为为脉冲宽度。为了获得不同的模拟值,可以改变或调整脉冲宽度。

analogWrite(pin, val)命令 :其中pin是引脚的编号,在uno R3上只能使用3,5,6,9,10,11这几个引脚;val是0~255的整数值,对应电压从0到+5V,不同的值对应不同的占空比,通过控制占空比从而模拟出不同的模拟电压值,实现PWM控制。不同的值对应的占空比如下:

产生PWM的示例代码:

int pin = 11; //可以选择3,5,6,9,10,11

void setup()
{
    pinMode(pin, OUTPUT);
}   

void loop()
{
    analogWrite(pin, 127);
    delay(500);
}

这种方式产生的方波周期大概是2ms左右(490Hz),占空比位50%,产生方波不需要占用额外的cpu命令时间。

三、硬件连接

RGB彩色流水灯模块的引脚与UNO的连接对应关系如下:

RGB LED ———— Arduino UNO R3

R ————9

G ———— 11

B ————10

VCC —— 5V

D0————2

D1————3

D2 ———— 4

D3 ———— 5

D4 ———— 6

D5 ———— 7

四、流水灯代码

点亮6个RGB彩色流水灯的代码如下,颜色变化顺序为:红色-绿色-蓝色-白色-黄色-青色

/*
 * 作者:科技爱好者博客
 * 时间:2017年6月11日12:46:41
 * IDE版本号:1.8.2
 * 发布地址:http://blog.lxx1.com
 * 作用:共阳RGB流水灯循环点亮
*/

//定义RGB灯颜色控制引脚
int R=9;
int G=11;
int B=10;

int t=1000; //延时时间控制

void setup() {
  // put your setup code here, to run once:
  
for(int i=2;i<8;i++){
  pinMode(i,OUTPUT);
  }
pinMode(R,OUTPUT);
pinMode(G,OUTPUT);
pinMode(B,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

//从左到右点亮RGB流水灯  
for(int i=2;i<7;i++){ digitalWrite(i,0); color(i); digitalWrite(1,1); } //从右到左熄灭RGB流水灯 for(int i=7;i>2;i--){
  digitalWrite(i,0);
  color(i);
  digitalWrite(i,1);
  }
  
}

//颜色控制函数
void setColor(int r,int g,int b){
  analogWrite(R,255-r);
  analogWrite(G,255-g);
  analogWrite(B,255-b);
  }

//选择要显示的颜色
void color(int c){
  switch(c){
    case 2:
      setColor(255, 0, 0);  // 红色灯全亮,蓝灯,绿灯全暗(红色)
      delay(t);
      break;
      
      case 3:
      setColor(0, 255, 0);  // 绿色灯全亮,红灯,蓝灯全暗(绿色)
      delay(t);
      break;

      case 4:
      setColor(0, 0, 255);  // 蓝色灯全亮,红灯,绿灯全暗(蓝色)
      delay(t);
      break;

      case 5:
      setColor(255, 255, 255);  // 红灯,绿灯,蓝灯全亮(白色)
      delay(t);
      break;

      case 6:
      setColor(255, 255, 0);  // 红灯,绿灯全亮,蓝灯全暗(黄色)
      delay(t);
      break;

      case 7:
      setColor(0, 255, 255);  // 绿灯,蓝灯全亮,红灯全暗(青色)
      delay(t);
      break;  
    }
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Google's PageRank and Beyond

Google's PageRank and Beyond

Amy N. Langville、Carl D. Meyer / Princeton University Press / 2006-7-23 / USD 57.50

Why doesn't your home page appear on the first page of search results, even when you query your own name? How do other web pages always appear at the top? What creates these powerful rankings? And how......一起来看看 《Google's PageRank and Beyond》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器