我的项目中需要用到小红板的PWM功能,要使用此功能,那就必须在ArduinoIDE环境下启用PWM输出引脚,标准Arduino开发板带有6路PWM输出,分别是D3 D5 D6 D9 D10 D11。Arduino开发板的PWM精度一般,用于电子DIY爱好者的项目中是没有问题的,如接上MOS管调节LED的亮度等,但是用于工业控制的话,精度就有点低了。
我启用Arduino开发板的D9 D10 D11三路PWM引脚,接上一个三输入RGBLED灯:
在ArduinoIDE里面启用PWM代码非常简单,只有两步,第一,初始化引脚pinMode(pin,OUTPUT)函数,第二,设置引脚占空比analogWtite(pin,value),其中value的取值为0~255,也就是说Arduino中PWM的可调节梯度有256度,0为最低梯度,对应LED的最暗,电机停转梯度;255为最高梯度,对应LED最亮,电机全速转动梯度。在代码中我循环调节D9 D10 D11的占空比依次从低到高再从高到低变化,就可以做出三色呼吸灯的效果:
const uint8_t LED_R=9;
const uint8_t LED_G=10;
const uint8_t LED_B=11;
void setup()
{
pinMode(LED_R,OUTPUT);
pinMode(LED_G,OUTPUT);
pinMode(LED_B,OUTPUT);
analogWrite(LED_R,0);
analogWrite(LED_G,0);
analogWrite(LED_B,0);
Serial.begin(115200);
}
uint8_t value=0,i=0;
void loop()
{
for(i=0;i<255;i++)
{
analogWrite(LED_R,i);
delay(5);
Serial.print("R+ i=");
Serial.println(i);
}
for(i=255;i>0;i--)
{
analogWrite(LED_R,i);
delay(5);
Serial.print("R- i=");
Serial.println(i);
}
for(i=0;i<255;i++)
{
analogWrite(LED_G,i);
delay(5);
Serial.print("G+ i=");
Serial.println(i);
}
for(i=255;i>0;i--)
{
analogWrite(LED_G,i);
delay(5);
Serial.print("G- i=");
Serial.println(i);
}
for(i=0;i<255;i++)
{
analogWrite(LED_B,i);
delay(5);
Serial.print("B+ i=");
Serial.println(i);
}
for(i=255;i>0;i--)
{
analogWrite(LED_B,i);
delay(5);
Serial.print("B- i=");
Serial.println(i);
}
}
看看效果:
我的项目中需要用到小红板的PWM功能,要使用此功能,那就必须在ArduinoIDE环境下启用PWM输出引脚,标准Arduino开发板带有6路PWM输出,分别是D3 D5 D6 D9 D10 D11。Arduino开发板的PWM精度一般,用于电子DIY爱好者的项目中是没有问题的,如接上MOS管调节LED的亮度等,但是用于工业控制的话,精度就有点低了。
我启用Arduino开发板的D9 D10 D11三路PWM引脚,接上一个三输入RGBLED灯:
在ArduinoIDE里面启用PWM代码非常简单,只有两步,第一,初始化引脚pinMode(pin,OUTPUT)函数,第二,设置引脚占空比analogWtite(pin,value),其中value的取值为0~255,也就是说Arduino中PWM的可调节梯度有256度,0为最低梯度,对应LED的最暗,电机停转梯度;255为最高梯度,对应LED最亮,电机全速转动梯度。在代码中我循环调节D9 D10 D11的占空比依次从低到高再从高到低变化,就可以做出三色呼吸灯的效果:
const uint8_t LED_R=9;
const uint8_t LED_G=10;
const uint8_t LED_B=11;
void setup()
{
pinMode(LED_R,OUTPUT);
pinMode(LED_G,OUTPUT);
pinMode(LED_B,OUTPUT);
analogWrite(LED_R,0);
analogWrite(LED_G,0);
analogWrite(LED_B,0);
Serial.begin(115200);
}
uint8_t value=0,i=0;
void loop()
{
for(i=0;i<255;i++)
{
analogWrite(LED_R,i);
delay(5);
Serial.print("R+ i=");
Serial.println(i);
}
for(i=255;i>0;i--)
{
analogWrite(LED_R,i);
delay(5);
Serial.print("R- i=");
Serial.println(i);
}
for(i=0;i<255;i++)
{
analogWrite(LED_G,i);
delay(5);
Serial.print("G+ i=");
Serial.println(i);
}
for(i=255;i>0;i--)
{
analogWrite(LED_G,i);
delay(5);
Serial.print("G- i=");
Serial.println(i);
}
for(i=0;i<255;i++)
{
analogWrite(LED_B,i);
delay(5);
Serial.print("B+ i=");
Serial.println(i);
}
for(i=255;i>0;i--)
{
analogWrite(LED_B,i);
delay(5);
Serial.print("B- i=");
Serial.println(i);
}
}
看看效果: