梨园元 发表于 2015-6-19 20:59:40

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

本帖最后由 梨园元 于 2015-6-19 21:05 编辑

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

梨园元 发表于 2015-6-19 21:04:23

对了用的是arduion 如何编写这个程序!

liuxue4503 发表于 2015-6-19 21:58:14

从题目来说,程序上很好实现,个人觉得,你那5个色的灯,需要有个具体的东西吧,那样的话需求会明确一点

梨园元 发表于 2015-6-21 11:56:47

liuxue4503 发表于 2015-6-19 21:58 static/image/common/back.gif
从题目来说,程序上很好实现,个人觉得,你那5个色的灯,需要有个具体的东西吧,那样的话需求会明确一点

红绿蓝的RPG led灯

梨园元 发表于 2015-6-21 11:58:07

求解具体程序该如何编写!

xxJian 发表于 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配置成输入接按键的方法:
const int buttonPin = 2;
pinMode(buttonPin, INPUT);

//------------------------------------------------------------------------------------------------------------------------------------------------
另外,我觉得假如按键IO配置成中断,会更加的节省CPU资源。
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;
}
这个项目中,我将Io配置成中断的形式,在中断函数中翻转LED的状态。其他的按键可以通过将IO口配置成普通的输入口,在loop()死循环里面一直读取其状态即可知道按键有没有被按下。

//------------------------------------------------------------------------------------------------------------------------------------------------
最后就是我做的三个PWM控制三种颜色亮度的工程代码:
//工程内,初始化了三个PWM信号,以及串口是用来输出到电脑,告诉用户现在的PWM占空比到底到多少的。
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);
}


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

梨园元 发表于 2015-6-26 15:27:52

xxJian 发表于 2015-6-23 20:09 static/image/common/back.gif
晒一下我做的工程吧。

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

多谢大神指导!
页: [1]
查看完整版本: 小白求解如何用arduionb编写5个按钮控制led灯的5个亮度?