|
八月的时候做的一个单子,是用NRF52832芯片做一个门锁以识别到手环等广播蓝牙设备的MAC地址,进行分析后判断开锁任务,由于他们提出的要求中对于功耗的要求较高,四个南孚电池要带电机工作半年以上,于是就加入了睡眠和睡眠唤醒系统。代码以下:
- int main(void)
- {
-
-
- NRF_POWER->DCDCEN = 1;
- nrf_gpio_cfg_default(O1);
- nrf_gpio_cfg_default(K1);
-
- log_init();
-
- timers_init();
-
- //buttons_init();
-
- power_management_init();
-
- ble_stack_init();
-
- gap_params_init();
-
- gatt_init();
-
- advertising_init();
-
- services_init();
-
- conn_params_init();
-
- control_set();
-
- NRF_LOG_INFO("Template example started.");
-
- //advertising_start();
-
- scan_start();
-
- while(true)
- {
-
- idle_state_handle();
- nrf_delay_ms(5000);
-
- <div class="blockcode"><blockquote>nrf_gpio_cfg_sense_input(BUTTON_1, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_HIGH);
复制代码
nrf_gpio_cfg_default(INTA);
nrf_gpio_cfg_default(INTB);
//nrf_gpio_cfg_default(LED1);
nrf_gpio_cfg_default(LED2);
nrf_gpio_cfg_default(beep);
app_timer_stop_all();
//nrf_gpio_cfg_default(BUTTON_1);
NRF_POWER->SYSTEMOFF = 1;
}
}
上述的代码中,较为重要的是设置BUTTON_1为唤醒口:- nrf_gpio_cfg_sense_input(BUTTON_1, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_SENSE_HIGH);
复制代码 该函数可以配置低电平唤醒,高电平唤醒,高电平之后低电平唤醒
之后使用
- NRF_POWER->SYSTEMOFF = 1;
复制代码
使得单片机进入睡眠。
下面是蓝牙事件的核心:
- case BLE_GAP_EVT_ADV_REPORT:
- if (p_adv_report->type.scan_response&&p_adv_report->rssi>-35)
- {
- NRF_LOG_INFO(" peer_addr = %02x %02x %02x %02x %02x %02x\r\n", p_adv_report->peer_addr.addr[5],p_adv_report->peer_addr.addr[4],p_adv_report->peer_addr.addr[3],p_adv_report->peer_addr.addr[2],p_adv_report->peer_addr.addr[1],p_adv_report->peer_addr.addr[0] );
- NRF_LOG_INFO(" p_gap_evt->params.adv_report.rssi = %d\r\n", p_adv_report->rssi );
- send_deta_band[0]=-p_adv_report->rssi;
- send_deta_band[1]=p_adv_report->peer_addr.addr[5];
- send_deta_band[2]=p_adv_report->peer_addr.addr[4];
- send_deta_band[3]=p_adv_report->peer_addr.addr[3];
- send_deta_band[4]=p_adv_report->peer_addr.addr[2];
- send_deta_band[5]=p_adv_report->peer_addr.addr[1];
- send_deta_band[6]=p_adv_report->peer_addr.addr[0];
- //uint8_t my_adv_manuf_data[5] = {0xDE,0x02,0x03,0x04,0x05};
-
-
- send_deta_band_1[5]=send_deta_band[1];
- send_deta_band_1[4]=send_deta_band[2];
- send_deta_band_1[3]=send_deta_band[3];
- send_deta_band_1[2]=send_deta_band[4];
- send_deta_band_1[1]=send_deta_band[5];
- send_deta_band_1[0]=send_deta_band[6];
-
-
- sd_ble_gap_adv_stop(m_advertising.adv_handle);
- //advertising_init();
- //advertising_start();
-
- beep_start();
-
- beep_stop();
-
-
- control_right();
- nrf_delay_ms(30);
- control_stop();
- nrf_delay_ms(10);
-
- led_start();
- //nrf_delay_ms(10);
- advertising_init();
- advertising_start();
- nrf_delay_ms(2000);
- control_left();
- nrf_delay_ms(30);
- control_stop();
- //application_timers_start1();
- // application_timers_start();
-
- //advertising_start();
-
- }
- sd_ble_gap_scan_start(NULL, &m_scan_buffer);
- break;
复制代码
|
-
-
app.rar
7.5 KB, 下载次数: 66, 下载积分: 黑币 -5
评分
-
查看全部评分
|