极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21763|回复: 5

从零开始 记录自己的arduino试验之按键控制RGB LED

[复制链接]
发表于 2014-7-2 22:08:42 | 显示全部楼层 |阅读模式
本帖最后由 hxf 于 2014-7-4 19:05 编辑

       前不久楼主看了arduino入门教程的点亮RGB LED觉得很漂亮于是忍不住自己也来做了一个。
楼主当时看过的原版的RGB LED试验
       遗憾的是原版的程序只是实现了RGB LED的循环点亮对于患有强迫症的楼主来说只能看不能参与实在是一件痛苦的事情所以楼主决定修改一下实现通过LED来控制RGB LED的点亮。{:soso_e135:}
       初步设想是通过三个按键来分别控制LED的红绿蓝三原色的亮暗这样就可以像一个调色板一样通过三个按键的控制来调出自己喜欢的颜色了。
      好了废话不多说了,正所谓千里之行始于足下,楼主第一次并没能实现预想的方法,只是简单的控制其实现红绿蓝三种颜色的点亮。和上次一样连接图比较简单楼主这里就不画原理图了。就是RGB的红,绿,蓝三个脚分别带电阻接到11,10,9上,剩下的管脚接vcc,三个按键分别接到7,6,5上(接开关要注意一定要加电阻,楼主第一次就忘了加电阻板子冒烟了才发现,不过板子还是奇迹般的活下去了)。
      下面来看一下楼主的程序:
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
int a=0,b=0,c=0;
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(7, INPUT);
  pinMode(6, INPUT);
  pinMode(5, INPUT);
}

void loop()
{ int r=0;                      //按键取值清零
  int g=0;
  int b=0;
  r=digitalRead(7);         //检查有无按键按下
  g=digitalRead(6);
  b=digitalRead(5);
  if(r==HIGH)
  {setColor(255, 0, 0);}   //第一个按键按下则红灯点亮
  else if(g==HIGH)
  {setColor(0, 255, 0);}  //第二个按键按下则绿灯点亮
  else if(b==HIGH)
  {setColor(0, 0, 255);}  //第三个按键按下则蓝灯点亮
  else
  {setColor(0, 0, 0);}     //无按键按下则灯不亮
  delay(10);
}

void setColor(int red, int green, int blue)
{
  analogWrite(redPin, 255-red);
  analogWrite(greenPin, 255-green);
  analogWrite(bluePin, 255-blue);  
}
效果如下:


       如果第一步实现了的话离最后的设计就已经不远了,只需要在原有的程序上加一个计数步骤就可实现
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
int a=0,c=0,d=0;
void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  pinMode(7, INPUT);
  pinMode(6, INPUT);
  pinMode(5, INPUT);
}

void loop()
{ int r=0;
  int g=0;
  int b=0;
  r=digitalRead(7);
  g=digitalRead(6);
  b=digitalRead(5);
  if(r==HIGH)  //如果第一个按键按下红色PWM值加5
  {a=a+5;}   
  else if(g==HIGH)  //如果第二个按键按下绿色PWM值加5
  {c=c+5;}  
  else if(b==HIGH)  //如果第三个按键按下蓝色PWM值加5
  {d=d+5;}  
  setColor(a, c,d); //显示当前颜色
    if(a>=255)      //PWM值达到255后清零
  {a=0;}
  else if(c>=255)
  {c=0;}
  else if(d>=255)
  {d=0;}
  delay(200);    //需要一个延时不然程序太快按键扫描不上
}

void setColor(int red, int green, int blue)
{
  analogWrite(redPin, 255-red);
  analogWrite(greenPin, 255-green);
  analogWrite(bluePin, 255-blue);  
}
话说作者最后虽然实现了当初的设计但是楼主发现是在是没有什么调色方面的天赋确实需要一个按键来炫一下前人已经调制好的颜色,虽然最后楼主也实现了这里就不贴程序了只要把第二个程序改动一下,加一个按键就可以了,下面是各种颜色的数据值。
RGB                        颜色名称
(255, 0, 255)        品红色

(0, 0, 255)        蓝色

(0, 255, 255)        青色

(0, 255, 0)        绿色

(255, 255, 0)        黄色

(255, 0, 0)        红色

(128, 0, 128)        紫色

(0, 0, 128)        深蓝色

(0, 128, 128)        鸭绿色

(0, 128, 0)        深绿色

(128, 128, 0)        橄榄色

(128, 0, 0)        栗色

(0, 0, 0)                 黑色

(128, 128, 128)        灰色

(192, 192, 192)        银色

(255, 255, 255)        白色
最后的效果视频:



回复

使用道具 举报

发表于 2014-7-3 11:16:33 | 显示全部楼层
日积月累,祝愿楼主不断收获。可以用三只电位器,调色更加丰富。
在此基础上,可以引入三轴重力传感器,加上蓝牙和pro mini,你就有了一只会调色的无线蓝牙魔术手套。
(重力传感器调LED在esploar手柄上是标准配置,也有代码参考)

看似简单的项目,坚持往下做就会收获很多乐趣。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-3 19:26:49 来自手机 | 显示全部楼层
沧海笑1122 发表于 2014-7-3 11:16
日积月累,祝愿楼主不断收获。可以用三只电位器,调色更加丰富。
在此基础上,可以引入三轴重力传感器,加 ...

嘿嘿,谢谢鼓励
回复 支持 反对

使用道具 举报

发表于 2015-4-23 17:29:38 | 显示全部楼层
楼主 要是一个按键控制三色灯 应该怎么做的啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-23 22:28:24 | 显示全部楼层
蓝色骨骨头 发表于 2015-4-23 17:29
楼主 要是一个按键控制三色灯 应该怎么做的啊

可以将程序改动为读取按键后显示固定的颜色,只要提前设定好RGB值就可以
回复 支持 反对

使用道具 举报

发表于 2016-12-1 10:07:47 | 显示全部楼层
hxf 发表于 2015-4-23 22:28
可以将程序改动为读取按键后显示固定的颜色,只要提前设定好RGB值就可以

怎么改啊 楼主
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 19:25 , Processed in 0.044746 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表