|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 整机功能代码讲解
! E* T3 C: \) E4 H3 h0 Q) ?" ^4 d
. y( j7 _0 |4 D& N* H
0 d V: a S' \9 E* J6 b- A) H9 E7 ^- ^! X& g+ A
整机代码 4 x1 ^! m6 g5 C8 l2 A3 [6 }; e* v
( `, Q; u( w: {; E; _; Y
1 软件设计
4 V3 \: J2 V8 K- {( V 本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。 8 @( d3 h" B+ Z H1 d# ?
以上各个部分可以参考前面的章节。
& G+ O' \ D; G 首先,看一下我们手环的整个软件主函数流程。
! S1 G: K( C8 r' X. Y0 H( o' C- |$ ?3 ]& r t6 d
* m" q( M0 z& V* U" f, \. g图1
$ }" }) p) \# E$ [# m- Y- i5 D# A 代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。' W, P1 l0 A2 c$ l2 z
我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。# f: q( u% Q% k! `
这里的 GPIO 中断主要是用来切换屏幕显示页面。$ H9 w, G" v0 L" E8 @# ]8 \9 }+ g
3 L, v; `, p* C9 p
1 X8 ~# l" s" G- b代码1
7 J5 V) I! a% N 从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。
Q0 }$ U" I. q, z 在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。7 U/ E" w1 H# `* E- O
关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数 [2 R, y- W, j# k; g
; y0 m5 d8 [ j" r8 j
& V2 X: {( W8 `+ E) T0 H4 b6 \代码2.1
9 {4 H( L; V) h3 @- {7 b' R+ A( J# k+ d1 ^; g H
, g8 s3 j# z/ s0 O/ L, `6 M
代码2.2, ~. k( e' R* E% H2 W( d- c6 r
& q% N/ X3 j7 h; D1 `8 K
每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。
8 V$ N+ ?! M( }- I o+ a" t 对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡
9 s! P3 O+ K( i路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。$ l7 _0 l/ s3 b
5 M) p' ?! s. P! P5 c {6 Y4 r
/ `7 n* T" D' J7 H
代码3, P' D2 q: `; m, I
关于其他部分代码,请参考我们的我整机代码例程。
/ e, C( P. j. P v* @) J& k; Q! U) Y
/ R1 S3 ? U3 ^
2 ~$ j0 J* e9 Z1 S2 A2 实验现象
. q% ?- i0 ]- G7 K- A$ v0 j6 F# I) m! z3 {1 W
首先打开 SmartSnippets。
( A& }( A( P' X& w8 d2 ]8 n6 C5 V8 P; \& z
) J# g( P2 N( t9 h
图2
; N- l \ j4 H+ {. L& V 设置好 SmartSnippets 之后,点击上图中的 Open。 7 u9 l" s9 R" y2 x0 ]
(1)点击 Connect,连接我们的单片机。
C# X7 I% l4 T6 N' P7 C
; u |$ ~. ^& Y0 k& m( B
3 n1 L4 F) |4 h$ C
图3
# C! x0 T8 m: [( x0 ?; q
# j% T, K3 f- H( @7 j c (2)点击 Erase,擦除 Flash。. r6 D+ P1 T' ]9 [* j
: X0 `- O* ?- p; t' g
+ d5 F$ y3 P; R
图43 s9 j! y1 c) D3 H+ ?
7 q$ s) Y" e# ?, D& t (3)点击 Browse,找到我们工程的.hex 文件。
) n) b5 t- Z5 p+ z; \* y
4 c# R0 g5 ?5 a# w: N1 ^
* N1 d" b, n% N8 S9 ?0 k6 Y
图5, ^& h! A- S" Y8 @6 h1 d! A
4 F2 J2 s5 n0 P: ~$ ? (4)点击 Burn,完成代码下载。
! p& C/ a5 K) H2 g/ q# N9 x1 }7 ]8 G
' w6 i/ p) h9 a6 \
图 6
# i1 q, T- |% P+ H 代码下载完成之后,运行代码,能看到屏幕显示时间。
/ ?( X1 w( j9 {: @/ A2 [ L- X
" V, V% _& m- j7 C7 B! I+ U
图 7& S$ Y) F: L8 u
在时间显示界面下,触摸一下按键,会显示心率。& L9 e4 P2 _; o$ h1 m7 E* ]* Z, \: S
, x3 a# K( \1 S9 g1 v$ H4 n+ n
6 l) Z! B8 x( Y
图8! h/ h- P1 N/ `$ T# q
; d S2 Q. g7 b9 e' r. @" @5 [ 在心率显示界面下,触摸一下按键,会显示步数界面。
+ T, x! j' F2 Q6 I
5 z4 F+ o8 U- C$ g% ^
7 g! Z3 T2 |& ^0 W
图 9
9 l0 m* Z2 i/ W% K8 V5 j0 \7 y
' o, q% K, z; ?7 [/ A# b& j; C) ~% | 再触摸一下按键,就会进入卡路里显示界面。2 c" f; c- a3 H
2 \, b0 A: V ^1 \! Z5 G8 a+ v0 j
; e _) B8 p2 E) a" e! v
图10
) T- c3 [, n y' P6 p5 o# R" r! r
打开手机软件 Wolverine BLE。( F4 ~9 E' ]8 X
$ d$ v# f) n: a
! ], a( W7 k8 G9 E9 ] (1)点击 Connect。
# p) r5 M3 s5 B' w9 V7 L% h9 M5 C6 M
1 ^" Y- P P( \: O" F5 W* D
图11: H1 |3 h2 M# L6 D3 M) k$ _0 [" t
$ @( o% B, ?# b) h2 B1 t
(2)选择我们的蓝牙设备 DIALOG-PRFL。- a8 k5 g! `, s$ p
9 w v$ |0 ]; j8 z: F
- T( O. `/ _, F! |% u7 ~/ n图12- b2 N3 u. M& E
4 _# T5 I; I: z/ ?0 r8 h d 我们发送 step,会获取步数。
7 V3 I6 ~' q& n6 h2 J6 g% J3 Z, j4 L) Z
5 l. n) A- }- o) B9 Q2 q图 13+ k2 u3 X7 z0 b# k8 R
发送 cal,会获取卡路里。
: w9 X" d, P- f0 [/ o7 L4 ~% g$ y9 J8 R* A
% G) {0 `# t+ } _9 O- m图14
6 U4 J6 J9 N3 R 发送 heart,会获取心率。
$ d( @/ { d! ~' r3 r! U
: g5 P- N8 W0 A1 l5 a7 I) i' d
# S, Q0 B" N# r" O
图15
4 R- v2 N0 w( Z3 L2 E2 n
9 ], |, D& z; E+ l2 w) l1 G D; X3 x7 `
4 G6 D8 X6 E7 c. _) X
+ F ]$ T. B0 y: _/ k6 b, n: P文件下载请点击:
9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf
(1.86 MB, 下载次数: 0)
- _7 d! j8 C8 v4 g+ C4 @5 F& \ V$ M6 `7 @
' @( c0 m/ p/ x* H" R3 t |
|