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;  
    }
  }

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

查看所有标签

猜你喜欢:

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

UNIX编程艺术

UNIX编程艺术

Eric S. Raymond / 姜宏、何源、蔡晓俊 / 电子工业出版社 / 2011-1 / 69.00元

本书主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一Eric S. Raymond倾力多年写作而成。包括Unix设计者在内的多位领域专家也为本书贡献了宝贵的内容。本书内容涉及社群文化、软件开发设计与实现,覆盖面广、内容深邃,完全展现了作者极其深厚的经验积累和领域智慧。一起来看看 《UNIX编程艺术》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具