|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 整机功能代码讲解
9 D6 t. A% _" S) s( l- J" B" ?6 l. h1 ]# ?2 j1 ?7 r
# p" p$ O6 S0 M. X
4 Z Z% j1 |: b7 E w% A
整机代码 ! t" b% |0 L6 p" ^( h! I- g% ]
: h& V) T3 X# b& n) D% `1 软件设计
9 K( a1 C( C/ i; G. r* k$ Q/ L 本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。 8 f$ q6 |2 T( F2 M; D0 m- m
以上各个部分可以参考前面的章节。 5 T0 a" ?6 a/ Q8 a2 G
首先,看一下我们手环的整个软件主函数流程。
: ~4 M# ? } h" Q. o, Q
/ t* A8 k! D/ |5 w& X3 g' c; L
2 z: C- H. N6 U) ~
图1) w; M! _: X- \3 |8 _; R/ O5 P: ]
代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。
2 w# n# e8 |7 Q+ g8 L" n. [; o H 我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。8 K$ n5 D) J$ h3 _$ m9 C/ Y
这里的 GPIO 中断主要是用来切换屏幕显示页面。6 k' W6 z- \0 _8 } O- h' |
5 k! R! p- j9 d0 I- d8 q( N
; Q5 z4 V0 i# T5 x9 R7 h代码16 r* g* ?; f4 {9 B" N/ P
从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。. K5 @. a! ]' k# B/ z% a ` {
在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。6 y/ r/ i0 ?6 p* I! J `5 S5 E. W% \
关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数
' A& O+ z% r R. F- v
3 @7 a: X! R% F9 Z8 d D$ B+ x/ p
$ {8 c- j7 q0 W$ b5 [( q" y
代码2.10 X8 u G( d/ |: d2 R3 |7 S1 ?
W" y! a, s' T% X, B; n
0 E' E- i* P* N3 J$ o9 |
代码2.2
1 u: Q* \0 y9 \! K D1 y( S/ x4 p# k/ O3 A, G
每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。
: l; {( z1 ~3 h/ F- t/ x 对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡
/ h4 g" [/ r4 a" f) W+ B( K路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。& t. D- e7 w$ ` H7 H& w; x4 }
% S& `8 G; x8 [, T# {
1 ^1 A! j8 i5 X& D4 o代码3
2 d' I' ~5 S, V! N$ \3 D关于其他部分代码,请参考我们的我整机代码例程。9 a* y. `- l$ b* [" @' N' N; N- [% f
8 |- ^. y$ a: g/ U8 K
9 A- K% g& M5 _: W! l) g2 实验现象
/ C6 w6 z9 i! h/ |9 y" E! x; p; ^
7 w5 Y6 j/ T1 J2 W# A' I# t 首先打开 SmartSnippets。7 r0 J& d. U6 h$ g8 R" V% E# ]% s
5 u% ]/ v* E8 J- m" v0 y" L# v# u
& q4 c8 |) d8 h+ y+ G图25 Y9 M, h( i1 Y+ n9 g7 @6 {
设置好 SmartSnippets 之后,点击上图中的 Open。 % f4 s2 r2 X* Y4 \% X0 `' K
(1)点击 Connect,连接我们的单片机。
; a b$ t* p) @- c; W
# D2 Z# {) e: e( x& P i+ S
2 z5 ]( N4 ^* L2 d8 ^) V+ X图3% f' B$ C& k& B4 G: `0 z
0 g, u/ M" n& t
(2)点击 Erase,擦除 Flash。
& }# Q( M G, D8 C- H( F
4 s" W! Y% f/ n/ N: X! [0 ~. ^
$ P& ? B- [( Z6 G; u& i4 d图4* M" A0 |2 q8 @
! g c: Z# H5 {+ r1 i+ z6 R/ z
(3)点击 Browse,找到我们工程的.hex 文件。
! h6 K6 X: R$ ]
* q( ^5 s2 W8 _
~; m/ A$ R# O4 A
图5
% H# ^& C/ ?9 N5 \, x, N4 T8 ^# s3 ]* } D& c( c
(4)点击 Burn,完成代码下载。
& y# S3 A$ i! T) B4 C- r; k. N5 ^0 A3 X. b0 A. @) S" g
9 S& z; w9 B- ~- g% s* D. E: t
图 6
; R \/ J6 v$ V1 H( c0 o) E 代码下载完成之后,运行代码,能看到屏幕显示时间。 J! l* r; V. z' w6 ~
d3 `7 {( Z! k8 C& H2 Q0 S
g, F$ j3 P/ Z6 E: E' y$ o$ f) [7 Z- g
图 79 _. q+ ^ W2 ^/ Y: L
在时间显示界面下,触摸一下按键,会显示心率。
! V! F; X- V7 A! l: {1 Y! ?% ^+ \! C, u, e2 b# y8 J
+ [: m. F3 }2 W. G
图8
! T L8 e) K; X# n1 H3 O; m+ p. y8 S9 I
3 I4 c+ ~7 ?* ^5 c. x1 M 在心率显示界面下,触摸一下按键,会显示步数界面。8 S* Y+ ]- z& B8 y
% p: r5 t6 w3 ~' L- F
/ b. O, B# w5 N
图 9
; W* w- h! B: H5 ?1 n7 c0 i5 T/ {4 k. v0 B7 Q- |. p, m
再触摸一下按键,就会进入卡路里显示界面。
! ]* b* W" @; [! a$ C: d. |4 G3 i3 i$ ]
+ h& v. F; r$ e+ ]4 Q5 l& @+ G
图10
. ]# S* {+ ]9 n% P9 e/ H9 O+ J% d8 c; ^" h3 g5 I. |6 e
打开手机软件 Wolverine BLE。
7 O1 D( g/ w( q# {. ~# g, q
; {) c" Y" m+ R# Y' J, V6 x6 d0 c: l% K4 l d
(1)点击 Connect。
8 [& D9 X4 u' d) T" ~, b8 ?. P2 S! W$ O" S5 N: h$ |; a6 e
, ]4 ] A D3 E' _, j图11- [/ [3 Y- L$ t0 D
6 }# n/ `* |' a: Y$ ^: z% }0 j
(2)选择我们的蓝牙设备 DIALOG-PRFL。
7 ?2 _5 O: Z) q5 l) Y4 Q
! y# `0 |7 Q. r
- }+ N2 o, w. n) c
图12) v( q0 V$ r/ S4 x* `! t
2 a) d' \4 }! w8 e/ `( X 我们发送 step,会获取步数。
- x8 D. ?, V9 @( w
' ^, ?: ~) e# x1 @: n0 `4 t/ y
" A# b r! i6 k' N. j) J6 N图 130 _6 A9 j0 s. u6 ^, t7 `' T+ N
发送 cal,会获取卡路里。
* {/ Z3 r$ ~4 c" L" v! e- F
) \# U2 }4 ?6 h }9 d
4 X: p6 S! Q+ s
图14
" f' P" Q% T( C 发送 heart,会获取心率。
9 L) o3 |4 V5 ]$ h* n5 U: X3 ^4 D
" Q: ~+ P. d4 S图15% ^! \0 h, w. h- ?" O
! t2 M/ j# L+ c: s$ u: ]
" o. D. m& t+ ~+ r" Y9 d, ^9 Q) L( \$ d1 ]0 O- w" N
文件下载请点击:
9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf
(1.86 MB, 下载次数: 0)
! C/ [/ L0 `1 a* `, g
8 l8 L( o8 ?+ ^9 e( k5 y7 J( }4 ]5 _9 }7 d
|
|