|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 整机功能代码讲解 ( i& \$ M- h) z% I3 b2 F; W
0 [* H4 P+ ^9 [6 g8 B$ D4 ^# l6 @7 e) F" q J
1 ?3 U8 O( E) A' N: X5 ?6 P
整机代码 2 y$ P4 j, l2 H- J8 J. \! d! a
' L# Z6 O C+ ~1 J$ B
1 软件设计 6 D2 Z2 I0 x$ r+ N- p0 a
本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。
+ C0 X3 g: v& b3 F5 X 以上各个部分可以参考前面的章节。 ) {- s" c- B( B
首先,看一下我们手环的整个软件主函数流程。$ ]. z& d9 r% P# U) d8 @0 U
( x' E0 p0 a$ z( n1 r. w
# I# k: I. h. \( W& i( J# f
图1
: s+ L5 b: D5 M0 N 代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。3 b! }, g) {8 |$ |
我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。# ^1 j9 O8 C9 X: ]
这里的 GPIO 中断主要是用来切换屏幕显示页面。
1 Q! p% O$ j0 z' n
. h. I* f! y: p. m
( ?) k9 V9 _4 u2 [& A. Q代码1
5 u0 p$ o- F2 x! u! J S) p/ P: d7 N 从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。
+ }9 J: m; c+ b" g" G 在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。
$ N% X& O9 q% L' s 关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数$ m% P* k2 R" F
$ u+ w1 V3 H; M
" ` U* n$ ]- J- u代码2.1
7 t$ D' y) D. K& M% q2 f6 w0 H, D* }9 R3 i& |0 i+ P3 m% x
4 X9 N- G6 l8 p3 K' ^! [- e: @ u" t
代码2.23 ?/ M2 K R+ n" ^. h
# ?5 \) u E' M9 x7 L
每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。# d# c' @! G; {% U
对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡
8 x* I$ s+ o; N1 v0 G0 T% x路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。
. J' {7 O+ r& ^+ K, U- ~3 d' n( }2 I& `, j9 U: ?) d
$ T! t8 |3 o- ?2 `
代码3! _ A, A9 W, O, }
关于其他部分代码,请参考我们的我整机代码例程。1 V& V. {9 I- Z
u4 j4 J8 b* K' R7 n; i, D
. e. F" A3 Y3 j. d; D2 实验现象- [4 w$ _4 u; A- T A9 c/ P7 k
4 `; L8 \1 K1 d9 J2 X. G$ j6 G% d! z) _ 首先打开 SmartSnippets。
7 t0 |; V, x: _2 ^2 t7 R o) L
3 ?5 z. t4 k+ i y
) ^8 m& K9 \6 e# y* l, w图2
$ D' S: w( n/ p4 Y% d% N 设置好 SmartSnippets 之后,点击上图中的 Open。
. I3 D- a, a0 A (1)点击 Connect,连接我们的单片机。 w' n/ m b) q8 ^, g5 N- G
! p# @4 q6 Y6 h Y
) n' Q9 J0 [, f, {9 Q% c' l4 c) r
图3
8 Y& l( ^8 k( m/ F2 \, m; f9 Q* ?
/ o: h4 E( k: d& a* T (2)点击 Erase,擦除 Flash。
* V+ @ G* f" v1 H B
5 p3 U& Q) E5 n
F3 S# z* [ s+ m
图4
$ \# ?7 N/ y+ S
* N% u! i7 ]4 n2 @ (3)点击 Browse,找到我们工程的.hex 文件。
8 h9 W( n8 ^- o; S" K- g8 b# n/ ~; A( m( ] D3 \1 q# E! Y3 Z e
5 e- d* `- ~' a$ o7 F a( H
图5
3 H; {* K, C* x/ p
, X o4 O/ C8 \3 P) e- m) o" b (4)点击 Burn,完成代码下载。
+ [2 B& @' ~; }6 J' V5 w7 B. w c* b8 X& B6 ]2 p
1 I: m3 b, g' v* J5 A) i
图 6
, I% I7 h5 S" n; N# @) B 代码下载完成之后,运行代码,能看到屏幕显示时间。
% F% A0 n. \1 G" d1 w9 G. L5 A [* _* p8 h, T- Y5 f" V
( |4 Q$ u# {5 [; s7 C7 K图 7* S! u7 |1 k: v* X
在时间显示界面下,触摸一下按键,会显示心率。
2 \$ b" q5 U7 i5 N+ C8 S0 J/ J! z
8 P" J. T2 v7 ^; y
图85 t' G0 c% D- V- i( h
3 U! t8 m4 R2 u 在心率显示界面下,触摸一下按键,会显示步数界面。
! A- e% B, g! p, w3 R: c& e2 ]* W
( Q# A# _2 W2 U9 y# B$ M
; J0 _' ^. ` R. |: j7 c' L$ r5 P图 9
! j- `& G2 O5 e* [* ~/ T( P: t' u
; B9 R$ U3 ?/ P$ w 再触摸一下按键,就会进入卡路里显示界面。
6 k' i0 q, t9 F- K( H w F& X' q f' u) v
( J- A$ m) x, @+ w图10
n! t/ O) C0 L( n9 L0 V
$ }' ~+ @& z4 {1 r% b9 ~- v) L9 m+ x 打开手机软件 Wolverine BLE。! i, M9 E# j7 i6 Y
6 j( i4 n/ O* Q" ^" u+ W
9 l4 |9 s$ t& F- Y9 B F, \# c# g; N (1)点击 Connect。4 |4 C7 r* E# M$ d0 B! G8 ~
& a6 C9 A6 Q8 h$ R0 ^1 r
# h1 B& b/ ~$ F) x# a% u/ M8 h图116 e' m; f z7 a
# z, n2 W$ @; m% V0 T! D/ U3 h (2)选择我们的蓝牙设备 DIALOG-PRFL。
5 d, l. W/ R8 G3 i& X" e6 @* m& J# D+ t8 C$ y+ z
8 l" E9 a/ h% d6 {
图12
/ U' t2 l& ?0 D/ s: `! H q" j l) H: v; c: D* D' z( v1 I/ ~/ F
我们发送 step,会获取步数。
/ z ^% x2 E% Z: L M% s' ^. W4 w; h; N% x$ o
& d6 ~* X- n( k2 t( g图 137 a! s5 m4 e4 \3 }$ g. Q
发送 cal,会获取卡路里。+ ^9 R; M" g4 Q# u1 u7 ?: r
! t [6 ^' v4 R1 d
9 [- O( F9 g" n/ h* T) }图145 \9 T8 ~6 l( V5 ~5 C/ {
发送 heart,会获取心率。0 j G! R$ f3 b" p/ L5 R8 {, U& k
r2 _0 m/ O* s5 ~
Q6 l8 {. a% r/ n7 x3 x图157 }3 }" n9 {6 q h' G7 F
! A" k1 t2 I& a" E0 ?9 S5 o
6 `( J* M O0 \2 A/ T- |# V
2 \4 V" R8 w1 t) n8 r文件下载请点击:
9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf
(1.86 MB, 下载次数: 0)
! U- k+ v! ?) ?+ i* s/ G R) J$ C' V5 c1 r/ b6 d
7 Y# B$ ~$ k' B1 l# C' p" u. m
|
|