找回密码
 注册
关于网站域名变更的通知
查看: 245|回复: 3
打印 上一主题 下一主题

【开发教程11】疯壳·开源蓝牙心率防水运动手环-整机功能代码讲解

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-5 11:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
整机功能代码讲解
! g9 e3 q4 d. P6 q7 z1 X
3 y+ Z1 e! J" I3 B
) l) C/ G6 n2 h# k
) q3 o8 S9 I1 Z0 G
整机代码
- K  P# q1 k% F, }  B1 J$ R( G9 K; D7 V- z. I
1 软件设计
$ w" }$ A6 i) e  z, B  本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。 3 D! Q" }- B' F3 p
  以上各个部分可以参考前面的章节。 8 ~0 t  M" B0 `- j9 `
  首先,看一下我们手环的整个软件主函数流程。
9 v# V4 B4 U( z& Y9 C7 r' z$ y* `6 l3 N
: r- d( W1 T3 V
图1# t6 c7 R3 j' a  _" d$ z: P" u& M
  代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。
* P  {5 A6 g3 i( O2 V! X0 Y  我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。
/ o! R: n. b7 c3 L( b* N0 L- t  这里的 GPIO 中断主要是用来切换屏幕显示页面。
% F% q. N; u4 ]; z& U2 t
! M% @+ J' L. U! C & h0 Y9 t1 K/ w& D' T
代码19 s/ H- c" g# R, `9 S2 Y
  从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。
, I2 g: ?7 r% @: o  在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。! K' r* x' g7 Q% f
  关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数+ ]3 C( g0 s) w! y* R2 _
9 o/ e. f7 u3 V. o

+ }- `  u1 ]( D3 o: K4 K* y$ n代码2.1, W0 o* c. M; c  _! J' u6 t# Q# J1 f* U
6 x) I  P, s# J* X. A$ d3 w! T

$ @4 X/ p5 ]) M代码2.2
- Q. V# D2 h% p, V0 o( ~% L9 `
4 B  `, ^- P4 }. H" |  每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。% \7 `: C# M1 _0 M$ u- L
  对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡7 H+ t  ~: p: ^4 D- D+ H& A( j
路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。
- o3 d6 D& j  `) W
4 v* {6 V. C7 H0 {2 S " L# a, D5 f8 W# _; Z
代码3
; s9 q+ O9 \' E- X$ _/ _" k8 n, @9 @关于其他部分代码,请参考我们的我整机代码例程。
, [* a& l" P4 r6 O& G/ z& n  n
- z: f6 R2 x3 u* t. D8 g4 b4 p+ r+ d0 p2 B- f
2  实验现象
" J! R4 I& @* P6 A. X+ O, n
" ]. D; J1 Q2 O3 w- Q  首先打开 SmartSnippets。
% Y% ]: N) P; Z
& M6 Y. B. u8 J2 N1 j& U- K; L
) v5 R+ z7 ?" @6 ?1 W( j图2
- P) Y& W  T6 U) O# o, S5 T/ u  设置好 SmartSnippets 之后,点击上图中的 Open。 3 O3 ^. H1 p- [' M2 N
  (1)点击 Connect,连接我们的单片机5 E' k  n/ T1 b
+ d9 Z) [# @9 _5 Q1 @1 W5 u
/ k% ]2 S  Y  [/ d: a& [
图3
; E$ W% ]4 T7 Q, T% r
$ c1 K+ F) ^' n4 b6 v  (2)点击 Erase,擦除 Flash。8 _' q& O# m2 v3 E: _/ f/ n

5 T5 k) L4 S0 a9 e: A 4 f0 z, y6 M3 f, H
图4( @6 h# B: p4 F7 m; z

6 Z# ^2 {, _6 d% L2 f% q  (3)点击 Browse,找到我们工程的.hex 文件。
; n0 a( V7 _9 {! _% A7 b$ G+ C" ?4 L. j# v
& `' \* A4 u& p+ S
图5
- v% k, W! P. c% J' ]9 W3 q  O) z
  (4)点击 Burn,完成代码下载。1 S# r' r& @) X0 f4 _

8 ]5 S2 N8 c" \4 I1 G: w! W; ? 5 j7 A3 O2 c" n  i6 q
图 6
. u/ O' k. U$ X  代码下载完成之后,运行代码,能看到屏幕显示时间。
8 V% H% `0 B( [* s) M- d) r" |+ I& `0 s' k- S
/ w8 ~! n2 B: `( K  i0 P
图 7
+ m7 K: x# w5 T# m) w* @% U  在时间显示界面下,触摸一下按键,会显示心率。/ t# f* z. ^4 _7 P* ?! K3 ~; v
4 S9 d! ?7 y- D$ e# B$ I+ I

! P2 b# T7 X2 U" k" [图8. e0 s/ K/ u0 \* s1 A/ j" M% B5 u
3 e) }% t* A9 G! C8 D3 c# v
  在心率显示界面下,触摸一下按键,会显示步数界面。: D9 r- y/ A, K3 y. o) v

. F4 ]. p$ p+ M- O1 T  z : e9 e- b4 h% ]. N+ g0 E: |8 s1 L( G2 P
图 9) ?. \* e# p+ D$ F8 J5 d; V' e

! k- f0 x0 {. D4 w# k; p. _0 s   再触摸一下按键,就会进入卡路里显示界面。3 O$ V) I+ g2 V' B2 q

& b1 q5 [0 z5 d
9 a- `4 Q5 R  f8 B0 K5 F) B图109 }' ]& J( r1 X( g6 y" j
2 E2 k6 F" `0 h9 K
  打开手机软件 Wolverine BLE。' q& d/ j7 U& S" v1 a# p

: g& A+ G2 v- A( {& b6 e) W% c1 c0 I
  (1)点击 Connect。1 M# l6 K, w7 |0 M5 f

6 Q8 P/ L" Q& ~( J' E3 v! ]6 ~ ( U# R; C2 s; b& q1 F
图11$ T4 U5 U* k7 w' z
: y1 v' {3 B' b' A
  (2)选择我们的蓝牙设备 DIALOG-PRFL。2 `) e( H0 M* R9 ]! q, z/ E" h; s& c
: C" ^  l% I: E& {" G

- ?- k- }& ~  n5 s图12/ A" \' }% B' D- }

( [$ a9 W, d6 P  我们发送 step,会获取步数。
7 V" D# Z: w/ _9 L9 Z4 O' Q+ o/ l. e# ^0 I/ }8 P, R) W, d
9 X# |" E# q, Q& n/ u  ~% m0 o
图 13
/ J/ h1 l9 ]0 F; C  发送 cal,会获取卡路里。2 \5 C& k9 d2 u: n) {' J

8 C) p9 E( u& x9 R  m+ [0 q3 r; S
5 P( K) S' C; S% O  V* M图14
: v# m* P1 G/ k  X4 {/ s1 L  发送 heart,会获取心率。
! y. H. b4 z) S* l. N- _; `
& O; `# o& A8 r& l! r: | 4 h% O1 @6 p) q
图15. Y* f. N3 ^9 a& Q
7 o1 ^4 ^) N' l( m( B

2 m2 q8 P/ B1 T
% W) s' w* z9 d) ~: r文件下载请点击: 9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf (1.86 MB, 下载次数: 0) * G, Z0 f% C2 q3 ]8 m5 l: j

" V2 j! K( p/ h: H, Z
# J9 u, `$ c0 n+ p
  • TA的每日心情
    开心
    2022-1-29 15:03
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-8-5 14:41 | 只看该作者
    这个是FPGA编程控制的吗?

    点评

    你可以加官网“***”里的QQ群,获取专业答复  发表于 2022-8-5 14:44
  • TA的每日心情
    开心
    2024-4-29 15:07
  • 签到天数: 466 天

    [LV.9]以坛为家II

    3#
    发表于 2022-8-5 21:28 | 只看该作者
    :hug::hug::hug:
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-10-28 19:51 , Processed in 0.187500 second(s), 30 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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