烽火社区

标题: 〔Arch BLE〕8. 呼吸灯 [打印本页]

作者: emmaxie    时间: 2015-12-25 11:44 PM
标题: 〔Arch BLE〕8. 呼吸灯

nRF51822没有PWM输出,所以不能直接通过PWM方式做呼吸灯。但是我们可以利用定时器,在定时器中自己修改LED的亮和灭的时间(软件PWM),产生呼吸灯的效果。



#include "mbed.h"

DigitalOut LED(p30);

Ticker tmr;
Ticker BreathingLamp;
uint8_t BreathingLamp_cnt = 0;
uint8_t BreathingLamp_duty = 128;
uint8_t dt = 2;

void BreathingLamp_isr()
{
    BreathingLamp_cnt += 4;
    if(BreathingLamp_cnt < BreathingLamp_duty)
        LED = 1;
    else
        LED = 0;
}

void tmr_isr()
{
    BreathingLamp_duty += dt;
    if((BreathingLamp_duty == 255) || (BreathingLamp_duty == 0))
    {
        dt = -dt;
    }
}

int main() {
    
    BreathingLamp.attach_us(&BreathingLamp_isr, 320);
    tmr.attach_us(&tmr_isr, 10000);
    
    while(1) {
    }
}


和硬件PWM效果相比,软件PWM占用CPU时间,也不能做到很高的频率,效果要差一些。







欢迎光临 烽火社区 (http://bbs.cnecport.com/) Powered by Discuz! X3.2