|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 整机功能代码讲解 4 b$ Q; X+ p$ z9 b# X
; x+ _- z$ Y/ ]% o
% z! V2 a6 N$ Q/ @+ Y+ [
! K1 [/ t4 D# r- X9 s整机代码 * M6 E' _( N7 k/ `7 A) E# }
, M4 t; A' f9 ?
1 软件设计 : \" r! M0 l7 P3 H
本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。
/ c3 l+ z, A9 _8 s1 k. Q: `6 |; m 以上各个部分可以参考前面的章节。
J6 Y! H5 z6 t7 f: b4 V5 j 首先,看一下我们手环的整个软件主函数流程。
" _% }* p. B* p8 F3 }& t
( y1 z" V/ u0 W6 |2 \
% _- f- F& C8 E* T' Q) x% e图1
$ n$ @ H2 i2 E( b5 v+ g4 r 代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。
% s( v3 U' D5 j) C t1 _' } 我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。
" _6 M4 w8 Z4 N6 i0 ^% w 这里的 GPIO 中断主要是用来切换屏幕显示页面。' m9 `7 p5 M) i. ?
" m' f' y: _3 v' h# |
9 F2 r& Y6 ?/ ]3 U
代码1" b) @2 H& Y# r& Q+ a4 i# X
从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。5 X1 w) Y; ^: a8 W
在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。! Y2 f/ R7 e# z% l; a; Z- J$ O
关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数
8 T- @( a# c% Y9 Z0 b# i, V e7 a' O6 s2 w# w/ Y5 Z, ~
* ~$ }8 W+ i4 X+ Z6 g' ~/ s$ t9 P0 e
代码2.1
) F/ J/ k0 @7 J6 h6 k+ c" Z9 }) I
0 P) V# q; q2 @% b3 P7 ^4 h
; H$ b; v# E9 l3 A/ v' `. Y
代码2.2! G' U9 Z+ {0 q2 E4 p
5 E( y0 O/ Q1 _/ d4 `7 ~
每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。" v7 u0 U" O# f2 A Y
对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡" f. X0 e+ S p3 i" Q
路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。
" T- v% i) c% Z! _7 S3 X9 n/ [
7 x3 t: z+ y V$ K9 l$ w( ?
1 |% W; G7 k! K/ J
代码3
! e# Z9 y% A, S5 G! ]0 l关于其他部分代码,请参考我们的我整机代码例程。. o5 H& }% l- B
, q4 u% c5 x6 X# w! t
7 {* f6 v& M$ ^
2 实验现象
8 ^ y' a e, b1 e
2 G% O$ q! C7 D 首先打开 SmartSnippets。
# u9 e6 U) ?& t- I) } ~ s4 q1 }% B3 o$ v$ |. n; e
5 H9 Q m. ]- Y1 F! w( Q5 U( `图2
4 [. J9 u( u" C- { 设置好 SmartSnippets 之后,点击上图中的 Open。
7 S4 Q" _; c( ^( T9 B6 u (1)点击 Connect,连接我们的单片机。
4 ^( V1 q0 c7 U- Y* | N8 K. h, O- c0 e0 t' X
4 g! P+ ]3 v4 t6 H
图3
# m1 n# v) E1 n( u/ P( f- K% M% i& B) s
(2)点击 Erase,擦除 Flash。1 i4 u0 x. x' Z4 j# ?3 L
. w+ y. A2 y* b* c. M
: T* Q2 u- F9 @6 v# F图4
5 w: ]! E7 z$ J, c
! o3 B& M# P! t9 j (3)点击 Browse,找到我们工程的.hex 文件。) a$ A/ x! _8 {$ W: `
~8 h2 s7 _- @. f
( c( c1 R- R2 @, K7 B" S. p1 i图5
6 `2 S H: e0 l$ `8 A# b- j
, J) e8 x: {& H1 \ (4)点击 Burn,完成代码下载。
! n, E t( ^1 g; X6 L" ]
+ A7 g' n2 x6 r4 f/ m% W! e
" t, ]- R. C; X# I( m& N3 n; J) j9 k
图 6! ~: _9 R& T8 o& H) V7 J
代码下载完成之后,运行代码,能看到屏幕显示时间。2 N& a) }8 g8 F8 W3 R! J
7 F+ J* d6 @9 x4 h4 x
* ~! s& R9 A* C
图 7
+ I0 A* Z. l' V8 I' A2 n" }: I 在时间显示界面下,触摸一下按键,会显示心率。
6 G0 _( ?3 w! Q3 C+ W
" s" P$ h5 a% C+ f0 N
+ X# q V* r; \5 `% a1 {; n3 j
图8: Q& w, r9 A! ?( w3 ~
1 ]2 f* e7 O9 L' Z% s; w/ d2 H. w. X2 ~5 K
在心率显示界面下,触摸一下按键,会显示步数界面。
& \, J: Z- @5 z+ b! c% A# x
, B4 h$ h1 h# t* p/ Z
6 s4 a0 y7 z& P/ a; B2 P( X
图 91 T! R1 ~) h9 ], f8 X
2 t8 _7 u" m* h0 k9 v J
再触摸一下按键,就会进入卡路里显示界面。
0 _5 w" w. K( a3 v8 q6 ^; }) R5 B
) S- c4 k3 U6 K. M
图10
" o. o' i: y, [
' |7 F# {: d+ f: ]( n) x( L8 }! _! A 打开手机软件 Wolverine BLE。% D, M) Z+ Z+ X4 s
+ a# X% g. V! S/ Q4 [7 w: e- Y7 e3 z1 _5 i5 g8 W
(1)点击 Connect。
5 P6 \6 Q2 m7 d# H, W, p, O5 x- u; p- b
3 w* j: P/ G/ ?% y9 f
h: [9 k5 y: X" J5 X
图11+ _* ?8 U, a) o' {
Y: u; [' n" y2 T/ j! y5 w5 v
(2)选择我们的蓝牙设备 DIALOG-PRFL。# r8 s$ m) P( v5 K; v8 m
4 v- Q, W4 \4 p( s' F
$ f e3 g8 H9 X1 Y' N% i0 [
图12
+ P" o1 Q! C$ z0 m8 e
+ R5 h) B0 b! x 我们发送 step,会获取步数。4 n" \; o5 k) j9 M9 T
0 n) U$ d: }/ w3 u/ ^3 e# C
/ b ]+ \% a8 y* q, c
图 13% }5 c- C8 `( C- d ]/ J
发送 cal,会获取卡路里。
) `& _2 K5 M6 S; @2 f+ A% i9 m. ] a5 T
~7 ^4 B* }" f3 `1 g
图14
J: T+ `. y4 v' e7 [- H h 发送 heart,会获取心率。# o8 `, j8 P4 O1 Y
( B1 f. {5 J c$ }7 `6 W
+ b6 K# w3 B" D4 H! E* N
图151 \9 ?; X( G4 Z2 ` V3 c* \
; j- C: n: B! y' V! d) s7 Z1 Z+ b! T
5 S* C, Q! n) |* h+ K
文件下载请点击:
9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf
(1.86 MB, 下载次数: 0)
& @6 e* y; M6 F0 q: v8 N* r
?. S: n z# m) E( m
0 ^- o& u" T# @* P7 s7 a( l# Z* ? |
|