原理
原理很简单,使用的是PWM(脉宽调制)机制,就是通过改变波形的占空比(在一个周期中高低电平所占比例)
高电平占比大的时候,小灯比较亮;
低电平占比大的时候,小灯比较暗;
在点亮一个小灯(或者让小灯闪烁)时,我们基本都是写类似下面的代码:
1 2 3 4 5 6 7 8 9
| int T1; int T2;
while(1){ ledOn(); delay(T1); ledOff(); delay(T2); }
|
之前我们都是让 T1=T2
, 这样小灯就可以交替闪烁;在这里为了让高电平时间 T1
变长,低电平时间 T2
变短,可以像下面这样写:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| const int T = 300; int T1; int T2;
int deltaT = 10; int flag = 1;
while(1){ T1 = T1 + deltaT * flag; T2 = T - T1; if(T1 >= T) flag = -1; if(T1 <= 0) flag = 1; ledOn(); delay(T1); ledOff(); delay(T2); }
|
一个周期的时间T
则保持不变,而随着 T1
变大, T2
就会变小,这样就能进行脉宽调制。完整实现可以像下面:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| int main(){ int T = 300; int T1 = 0; int T2 = T; int deltaT = 10; int flag = 1; ledConfig(); while(1){ T1 = T1 + deltaT * flag; T2 = T - T1; if(T1 >= T) flag = -1; if(T1 <= 0) flag = 1; ledOn(); delay(T1); ledOff(); delay(T2); } }
|