11(100%开源)蓝牙心率防水运动手环_整机功能代码讲解(1).docx

上传人:lao****ou 文档编号:80827 上传时间:2023-02-12 格式:DOCX 页数:16 大小:1.18MB
下载 相关 举报
11(100%开源)蓝牙心率防水运动手环_整机功能代码讲解(1).docx_第1页
第1页 / 共16页
11(100%开源)蓝牙心率防水运动手环_整机功能代码讲解(1).docx_第2页
第2页 / 共16页
11(100%开源)蓝牙心率防水运动手环_整机功能代码讲解(1).docx_第3页
第3页 / 共16页
11(100%开源)蓝牙心率防水运动手环_整机功能代码讲解(1).docx_第4页
第4页 / 共16页
11(100%开源)蓝牙心率防水运动手环_整机功能代码讲解(1).docx_第5页
第5页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《11(100%开源)蓝牙心率防水运动手环_整机功能代码讲解(1).docx》由会员分享,可在线阅读,更多相关《11(100%开源)蓝牙心率防水运动手环_整机功能代码讲解(1).docx(16页珍藏版)》请在第一文库网上搜索。

1、蓝牙心率防水运动手环整机代码配套资料:https:/www.fengke.club/GeekMart/su_fkZyGYgrp.jsp、后r 一 左n幺匕生rTT 右、歹0配套视频:https:/www.fengke.club/GeekMart/su_fTSgUL3y3.jsp整机代码1 软件设计.本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部Flash读写、心率检测和Led屏幕显示,完成手环的制作。以上各个部分可以参考前面的章节。首先,看一下我们手环的整个软件主函数流程。开始代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外,还开启了定时中断和GPIO中断。我们的定时

2、中断每10ms触发一次,用于ADC定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能,步数20秒更新一次,心率模块1分钟打开一次,亮屏无操作,5秒熄灭屏幕。这里的GPIO中断主要是用来切换屏幕显示页面。void my_int_buttonl_handler(void)Touch_release =1; 触摸释放标志从GPIO的中断回调函数中可以看出,每次中断只是把变量Touch_release置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touchjelea

3、se的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件Wolverine BLE发送step获取步数、发送cal获取卡路里、发送heart获取心率值、发送rtc加时间完成手环的时间设置。下面是函数static int gattc_write_cmd_ind_handler(ke_msgjd_t const msgid, struct gattc_write_cmd_indconst *param, ke_task_id_t const

4、destjd, ke_task_id_t const srcjd)的部分代码。switch(attjdx)case CUST1_IDX_INDICATEABLE_VAL:attmdb_att_set_value(param-handle, param-length, (uint8_t*)&(param-value0);memcpy(value_buf,&(param-value),param-length);复制读出的数据至value_buffspi_flash_read_data(dghData, 0x040000,10);读取 flash 中的数据Number_Of_Steps=dghDa

5、tal;hr_capture=dghDataO;DataConversion();if(value_bufO =s)&(value_bufl = t)&(value_buf2 = e,)&(value_buf3=,P)(value_buf0=Steps0+0x30; 返回步伐值value_bufl=Stepsl+0x30;value_buf2=Steps2+0x30;value_buf3=Steps3+0x30;value_buf4=Steps4+0x30;attmdb_att_set_value(custsl_env.shdl+CUSTl_IDX_LONG_VALUE_/AL)/5,(uin

6、t8_t*)&(value_buf0);prf_server_send_event(prf_env_struct *)&(custsl_env.con_info), false,(custsl_env.shdl+CUSTl_IDX_LONG_VALUE_VAL);else if(value_bufO =c,)&(value_bufl = a,)&(value_buf2 = T)value_buf0=(Calorie0)+0x30; 返回卡路里value_bufl=(Caloriel)+0x30;value_buf2=(Calorie2)+0x30;value_buf3=(Calorie3)+0

7、x30;value_buf4=(Calorie4)+0x30;attmdb_att_set_value(custsl_env.shdl+CUST1DX_L0NG_VALUE_VAL),5,(uint8_t*)&(value_buf0);prf_server_send_event(prf_env_struct *)&(custsl_env.con_info), false,(custsl_env.shdl+CUSTl_IDX_LONG_VALUE_VAL);ys. I 7 else if(value_buf0=,h,)&(value_bufl=,e)&(value_buf2 = *a)&(val

8、ue_buf3=r)&(value_buf4 = t)value_buf0=(Heart_Rate0)+0x30;返同心率值value_bufl=(Heart_Ratel)+0x30;attmdb_att_set_value(custsl_env.shdl+CUSTlDX_LONG_VALUE_VAL),(uint8_t*)&(value_buf0);prf_server_send_event(prf_env_struct *)&(custsl_env.conjnfo), false,(custsl_env.shdl+CUSTl_IDX_LONG_VALUE_VAL);else if(valu

9、e_bufO =r)&(value_bufl = t)&(value_buf2 = c)dghData6=value_buf3-0x30; 将时间存入 FlashdghData7=value_buf4-0x30;dghData8=value_buf5-0x30;dghData9=value_buf6-0x30;dghData2=value_buf7-0x30;dghData3=value_buf8-0x30;dghData4=value_buf9-0x30;dghData5=value_buf10-0x30;spi_flash_write_data(dghData, 0x040000,10);

10、break;default:break;每当手环收到来自手机软件Wolverine BLE的数据时,首先从Flash中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从Flash中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上0x30,换算成该数字对应的ASCII码值。对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。void DataConversion(void)( 7 CalorieNum =

11、 Number_Of_Steps2;StepsO = (unsigned char)(Number_Of_Steps/10000);Stepsl = (unsigned char)(Number_Of_Steps%10000/1000);Steps2 = (unsigned char)(Number_Of_Steps%1000/100);Steps3 = (unsigned char)(Number_Of_Steps%100/10);Steps4 = (unsigned char)(Number_Of_Steps%10); Calorie0=0;Caloriel = (unsigned cha

12、r)(CalorieNum/100000);Calorie2 = (unsigned char)(CalorieNum%100000/10000);Calorie3 = (unsigned char)(CalorieNum%10000/1000);Calorie4 = (unsigned char)(CalorieNum%1000/100);Heart_RateO=(unsigned char)(hr_capture%100/10);Heart_Ratel=(unsigned char)(hr_capture%10);)关于其他部分代码,请参考我们的我整机代码例程。2 实验现象首先打开 Sma

13、rtSnippetSo图2设置好SmartSnippets之后,点击上图中的Open。(1)点击Connect,连接我们的单片机。(2)点击 Erase,擦除 Flasho图3图6:S1TO fie-01-14 8:A:X: rrnwM C1 .Pwr*Jhetoiai?xT9r.*rtJe49trce3rr.*ta X, c Mlectw:MOei.ijM; nu-C d*ces WX ca f : 8 oM y MecM gars x:b Cob 2alXlSM zt CsXCtOM:UWKecar:rfimmtv flU M 4 M.tarse:M:M: 1*: aacrj -)*oc0aU.;3TC M-6S-U 6;M;I6: MA.M MMCV 3 MfJMb MMrr 4MMU.m8;*;8: M4M Mf riMM NM WW.(3)点击Browse,找到我们工程的.hex文件y LXM F ,Z“:_ _q i i d一二 H 一-i ill=三三三三三三三=.w 均色:;:3T:(OFCX-C*-L Oir(M!Z1%L4ne-w o:M:到XI M OI::M::m 91*6-14 Ot: 1:: *m:r7 rwi*teaxwZA;,.“m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服