查看: 466|回复: 0
打印 上一主题 下一主题

〔Arch BLE〕8. 呼吸灯

[复制链接] qrcode

28

主题

31

帖子

95

积分

注册会员

Rank: 2

积分
95
楼主
跳转到指定楼层
发表于 2015-12-25 11:44 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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时间,也不能做到很高的频率,效果要差一些。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表