|
|
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 |
|