NRF52840 多传感器通讯(II)——数据定时读取

任务目标

在上一章的基础上(已经完成对传感器IIC的数据读取),
链接: link
https://blog.csdn.net/qq_34344752/article/details/134041509
对NRF52840中的定时器进行设置,从而实现在一定时间间隔后自动进行数据采样
注:基于官方库例程中的ble_app_blink进行更改

main.c 文件中进行更改

#define m_SENSOR_DETECTED_INTERVAL      APP_TIMER_TICKS(5000)    /**< 全局变量, 设置传感器检测中断时间2s
/*
设置定时器启动
 */
static void application_timers_start(void)
{
    ret_code_t err_code;

    // Start application timers.
    err_code = app_timer_start(m_sensor_timer_id, m_SENSOR_DETECTED_INTERVAL, NULL);
    APP_ERROR_CHECK(err_code);
}
/* 
中断处理函数,即每隔‘m_SENSOR_DETECTED_INTERVAL’所定义的时间将会跳转至以下中断
*/
static void Sensor_detected_timeout_handler(void *p_context)
{
    ret_code_t      err_code;
	
//这里通过调用TCA9548(IIC拓展模块)对不同通道的传感器进行顺序依次读取数据
    TCA9548_Open_Channel(0); //Spec sensor 1 detect
    NRF_LOG_INFO("Spec_sensor1 detecting. \r\n");
    Getdata_test();
    TCA9548_Close_Channel(0);
    nrf_delay_ms(50);
    err_code = ble_Spec_change(&m_lbs); // 这里用来跳转到蓝牙数据发送函数中,具体在 ble_lbs.c

    TCA9548_Open_Channel(1); //Spec sensor 2 detect
    NRF_LOG_INFO("Spec_sensor2 detecting. \r\n");
    Getdata_test();
    TCA9548_Close_Channel(1);
    err_code = ble_Spec_change2(&m_lbs);	
    
    TCA9548_Open_Channel(2);
    NRF_LOG_INFO("Humi_sensor detecting. \r\n");
    SHT41_sensor();
    TCA9548_Close_Channel(2);
    err_code = ble_TH_change(&m_lbs); //温湿度蓝牙数据发送


}
/* 定时器初始化函数
	m_sensor_timer_id,定时器事件ID号,对特定ID触发事件
	APP_TIMER_MODE_REPEATED,定时器重复触发模式
	Sensor_detected_timeout_handler 定时器中断函数,一定要确保和上面的函数名称一致!
 */
static void timers_init(void)
{
    // Initialize timer module, making it use the scheduler
    ret_code_t err_code = app_timer_init();
    APP_ERROR_CHECK(err_code);

    err_code = app_timer_create(&m_sensor_timer_id,
                                APP_TIMER_MODE_REPEATED,
                                Sensor_detected_timeout_handler); // TH sensor
    APP_ERROR_CHECK(err_code);
}

最后,在main函数中对下面函数进行调用
timers_init() 和 application_timers_start()

int main(void)
{
    // Initialize.
    log_init();
    twi_init();
    leds_init();
    timers_init(); // 定时器初始化
    buttons_init();
    power_management_init();
    ble_stack_init();
    gap_params_init();
    gatt_init();
    services_init();
    advertising_init();
    conn_params_init();

    // Start execution.
    NRF_LOG_INFO("Blinky example started.");
    application_timers_start(); //定时器服务打开
    advertising_start();

    // Enter main loop.
    for (;;)
    {
        NRF_LOG_FLUSH();
        idle_state_handle();
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值