今天我们来做个厉害的,PWM
调光灯,调光精度就定个1024
级吧。
PWM
调光原理有些像控制脉冲灯,只是延时精度更高,使用微秒级延时。
我们来一起写个定义PWM
的函数,精度就定为1024
级吧,用0
到1023
表示各个亮度。函数需要一个int
型输入,表示高电平脉宽,也就是亮度值。
void pwm_led(int k)
{
if(k<0)
k=0;
if(k>1023)
k=1023;
digitalWrite(LED_BUILTIN, LOW);
delayMicroseconds(1023-k);
digitalWrite(LED_BUILTIN, HIGH);
delayMicroseconds(k);
}
然后写个主函数,给pwm_led
函数输入0
到1023
不同的值,灯的亮度是不一样的。int i;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
i=100;
pwm_led(i);
delay(500);
i=300;
pwm_led(i);
delay(500);
i=500;
pwm_led(i);
delay(500);
}
void pwm_led(int k)
{
if(k<0)
k=0;
if(k>1023)
k=1023;
digitalWrite(LED_BUILTIN, LOW);
delayMicroseconds(1023-k);
digitalWrite(LED_BUILTIN, HIGH);
delayMicroseconds(k);
}
现在大家都学会调光了吧,接下来就可以做一些光效了,比如呼吸效果。
今天我们来做个厉害的,PWM
调光灯,调光精度就定个1024
级吧。
PWM
调光原理有些像控制脉冲灯,只是延时精度更高,使用微秒级延时。
我们来一起写个定义PWM
的函数,精度就定为1024
级吧,用0
到1023
表示各个亮度。函数需要一个int
型输入,表示高电平脉宽,也就是亮度值。
void pwm_led(int k)
{
if(k<0)
k=0;
if(k>1023)
k=1023;
digitalWrite(LED_BUILTIN, LOW);
delayMicroseconds(1023-k);
digitalWrite(LED_BUILTIN, HIGH);
delayMicroseconds(k);
}
然后写个主函数,给pwm_led
函数输入0
到1023
不同的值,灯的亮度是不一样的。int i;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop()
{
i=100;
pwm_led(i);
delay(500);
i=300;
pwm_led(i);
delay(500);
i=500;
pwm_led(i);
delay(500);
}
void pwm_led(int k)
{
if(k<0)
k=0;
if(k>1023)
k=1023;
digitalWrite(LED_BUILTIN, LOW);
delayMicroseconds(1023-k);
digitalWrite(LED_BUILTIN, HIGH);
delayMicroseconds(k);
}
现在大家都学会调光了吧,接下来就可以做一些光效了,比如呼吸效果。