第六篇 蜂鸣器和app_timer

开发板上的蜂鸣器是有源的,所以控制上相对比较简单,要让蜂鸣器出声,只需要把控制gpio口拉高就可了。

什么时候关闭蜂鸣器呢?有两种办法,一是在打开蜂鸣器之后加上一段延时,然后再关闭蜂鸣器。二是使用timer,加延时不好的地方在于蜂鸣器发声之后cpu就不能做其他工作了,在有些情况下会影响用户体验,所以呢,这里需要使用timer来控制。

在蓝牙样板程序中已经有app_timer的初始化,对于我们来说只需要创建一个timer,然后启动这个timer就可了,初始化的代码如下:
static void timers_init(void)
{
    // Initialize timer module, making it use the scheduler
    APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_MAX_TIMERS, APP_TIMER_OP_QUEUE_SIZE, true);

    /* YOUR_JOB: Create any timers to be used by the application.
                 Below is an example of how to create a timer.
                 For every new timer needed, increase the value of the macro APP_TIMER_MAX_TIMERS by
                 one.
    err_code = app_timer_create(&m_app_timer_id, APP_TIMER_MODE_REPEATED, timer_timeout_handler);
    APP_ERROR_CHECK(err_code); */
}

使用APP_TIMER_INIT宏来做初始化。在timers_init()函数中也告诉你了,可以使用app_timer_create()来创建一个timer。

在main()函数里,最后还会调用timers_start()函数,用来启动timer,但是现在这个函数里面是空的,需要自己往里添加的。

最后,蜂鸣器的代码如下:

#include "buzzer.h"

#define BUZZER_EN 12

#define TIMER_INTERVAL APP_TIMER_TICKS(1000, 0)

static app_timer_id_t buzzer_timer_id;

static void buzzer_timer_handler(void *p)
{
	buzzer_off();
}

void buzzer_init(void)
{
	uint32_t err_code;
	err_code = app_timer_create(&buzzer_timer_id, APP_TIMER_MODE_REPEATED,
			buzzer_timer_handler);
	APP_ERROR_CHECK(err_code);

	nrf_gpio_cfg_output(BUZZER_EN);
}

void buzzer_on(void)
{
	uint32_t err_code;

	nrf_gpio_pin_set(BUZZER_EN);

	err_code = app_timer_start(buzzer_timer_id, TIMER_INTERVAL, NULL);
	APP_ERROR_CHECK(err_code);
}

void buzzer_off(void)
{
	nrf_gpio_pin_clear(BUZZER_EN);
}
在打开蜂鸣器的同时启动一个timer,在timer时间到之后再关闭蜂鸣器。

注意,默认系统最大timer个数为2个,在timer初始化时就指定了,而这个样板程序中,蓝牙和按键部分就分别使用了一个timer,所以这里我们还需要将timer的最大个数修改为3,才能正常使用timer。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值