极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14224|回复: 6

小白求解如何用arduionb编写5个按钮控制led灯的5个亮度?

[复制链接]
发表于 2015-6-19 20:59:40 | 显示全部楼层 |阅读模式
本帖最后由 梨园元 于 2015-6-19 21:05 编辑

小白求解如何用5个按钮控制led灯的5个亮度?模式一每个按钮控制不同的亮度比如分成20%40%60%80%100%灯的亮度
并且用第六个按钮切换模式二 用五个按钮分别调整的led灯的5种颜色比如(红黄蓝绿粉)?
回复

使用道具 举报

 楼主| 发表于 2015-6-19 21:04:23 | 显示全部楼层
对了用的是arduion 如何编写这个程序!
回复 支持 反对

使用道具 举报

发表于 2015-6-19 21:58:14 | 显示全部楼层
从题目来说,程序上很好实现,个人觉得,你那5个色的灯,需要有个具体的东西吧,那样的话需求会明确一点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-21 11:56:47 | 显示全部楼层
liuxue4503 发表于 2015-6-19 21:58
从题目来说,程序上很好实现,个人觉得,你那5个色的灯,需要有个具体的东西吧,那样的话需求会明确一点

红绿蓝的RPG led灯
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-21 11:58:07 | 显示全部楼层
求解具体程序该如何编写!
回复 支持 反对

使用道具 举报

发表于 2015-6-23 20:09:36 | 显示全部楼层
本帖最后由 xxJian 于 2015-6-23 20:21 编辑

晒一下我做的工程吧。

这个用Nano3.0做的RGB控制。。。可以PWM控制三色的亮度。。使用了三路的PWM波,主电路是buck电路取消了输出电容,可以通过PWM控制通过LED的电流。
如果你先不要求大功率,可以用Arduino+7色LED(4个引脚RGB,共阳)+3个570欧姆限流电阻的硬件来做。
我觉得用不着5个按键。不过也可以用的。最简单的一个IO口一个功能,一个IO输入对应着一个按键,三个IO配置成PWM控制三色亮度。
最新版本的ArduinoIDE 是1.6.5。安装上了,打开实例2.Digital->Button里面有将IO配置成输入接按键的方法:
  1. const int buttonPin = 2;
  2. pinMode(buttonPin, INPUT);
复制代码


//------------------------------------------------------------------------------------------------------------------------------------------------
另外,我觉得假如按键IO配置成中断,会更加的节省CPU资源。
[pre lang="arduino" line="1" file="Key_Blink"]int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(1, blink, CHANGE);//当int.0电平改变时,触发中断函数blink
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()//中断函数
{
  state = !state;
}[/code]
这个项目中,我将Io配置成中断的形式,在中断函数中翻转LED的状态。其他的按键可以通过将IO口配置成普通的输入口,在loop()死循环里面一直读取其状态即可知道按键有没有被按下。

//------------------------------------------------------------------------------------------------------------------------------------------------
最后就是我做的三个PWM控制三种颜色亮度的工程代码:
//工程内,初始化了三个PWM信号,以及串口是用来输出到电脑,告诉用户现在的PWM占空比到底到多少的。
[pre lang="arduino" line="1" file="PWM_led"]int redpin=9;//定义LED接口    对应D9
int greenpin=10;//定义LED接口    D10
int bluepin=11;//定义LED接口  对应D11
int redval;//定义LED变量
int greenval;//定义LED变量
int blueval;//定义LED变量
int redChangeDirctionUp;
int greenChangeDirctionUp;
int blueChangeDirctionUp;
void setup()
{
  
  Serial.begin(9600);//连接到串行端口,波特率为9600
  
  redChangeDirctionUp= 1;
  greenChangeDirctionUp = 1;
  blueChangeDirctionUp = 1;
  redval = 60;
  greenval = 120;
  blueval = 180;
}
void loop()
{
  
  if(redval<=0)
   redChangeDirctionUp=1;
   else if(redval>=180)
   redChangeDirctionUp=0;
  if(redChangeDirctionUp==1)
    redval++;
  else
    redval--;
   
  if(greenval<=0)
   greenChangeDirctionUp=1;
   else if(greenval>=180)
   greenChangeDirctionUp=0;
  if(greenChangeDirctionUp==1)
    greenval++;
  else
    greenval--;
   
if(blueval<=0)
   blueChangeDirctionUp=1;
   else if(blueval>=180)
   blueChangeDirctionUp=0;
  if(blueChangeDirctionUp==1)
    blueval++;
  else
    blueval--;   
  delay(10);
  analogWrite(redpin,redval);//给LED接口付模拟值
  analogWrite(greenpin,greenval);//给LED接口付模拟值
  analogWrite(bluepin,blueval);//给LED接口付模拟值
  Serial.print(   "     R:");//分别显示出各个LED的模拟值
  Serial.print(redval);
  Serial.print(   "\t     G:");//分别显示出各个LED的模拟值
  Serial.println(greenval);
  Serial.print(   "\t     B:");//分别显示出各个LED的模拟值
  Serial.println(blueval);
}[/code]


//------------------------------------------------------------------------------------------------------------------------------------------------
楼主最好把示例都翻一变,看哪些代码是对自己的工程有用的,然后用之。基本模块的初始化应该都找得到的(如IO、中断、PWM、ADC),祝愿楼主早日把想做的做出来!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-26 15:27:52 | 显示全部楼层
xxJian 发表于 2015-6-23 20:09
晒一下我做的工程吧。

这个用Nano3.0做的RGB控制。。。可以PWM控制三色的亮度。。使用了三路的PWM波,主 ...

多谢大神指导!
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 06:22 , Processed in 0.046193 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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