本帖最后由 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资源。
[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),祝愿楼主早日把想做的做出来! |