找回密码
 注册
关于网站域名变更的通知
查看: 125|回复: 1
打印 上一主题 下一主题

【开源教程11】疯壳·开源蓝牙心率防水运动手环-整机功能代码讲解

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-16 13:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
整机功能代码讲解

! w/ n6 p  J% n# K
: p. w' S) l3 G$ X# ~. B, S& Q$ u" j4 {6 }
! v; q+ x" ]1 z  {0 _& ^) Y
整机代码 ' @8 c; @4 e2 o5 }8 B6 a

/ }$ R$ @* }  N9 W, J1 软件设计 * D! W5 ~) p7 Q' I
  本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。
& Z% Y* C# t0 u" i$ i' M, K  以上各个部分可以参考前面的章节。 ( p. r( z2 j2 U0 Z5 g7 L
  首先,看一下我们手环的整个软件主函数流程。. a" P& @1 w" `9 F# O

0 @' |8 \2 c' `& ]+ w
% F- ]+ Y$ i" D  b6 ^, N2 K图1
2 T; B  w5 [+ G. B7 t9 _  代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。. P3 b( B7 R3 p% j* E
  我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。
; C" p3 o. g7 f9 ^  这里的 GPIO 中断主要是用来切换屏幕显示页面。
3 ^; a; T# x  |. X
: B* I  ~5 G( J  g , Q) i3 ^1 C0 H
代码1
4 r! q$ n+ B9 B$ w3 k  从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。
9 m' g3 }; P+ @( P/ b' u6 m  在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。! s. J" k$ ]. ~9 ~+ x; h
  关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数
0 O: `6 R, v( S. C! K, y8 G8 J% I. n$ W4 D& k  A  Y
7 R, l/ K: O1 o; S
代码2.1
8 y9 ^! B! e* ?+ F8 v
9 f1 A- `7 ~/ K% B/ ?
) ~8 h+ r: J) K8 \2 W7 I代码2.2" C0 c5 W- \3 ?4 x, Y

# o0 |% ~3 W: G# J: l% @+ [5 @2 s  每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。+ G  Y  m) C3 d% \8 r6 g6 H
  对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡/ K( C) h8 c* S# C& a$ M
路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。; {$ p! h; C9 w0 `
" @1 Y+ d" h7 Z% ]1 \; C
0 i& \% I% L0 E' n0 n$ [- v. O1 K
代码3/ D# q' h7 m9 o* ]" U( u
关于其他部分代码,请参考我们的我整机代码例程。
6 O3 k, z; v& ~4 f* r# W* @; |) u5 O0 M  W/ o6 u- O- I* Y. R8 b

3 f5 }. m, B) A9 N8 K. Q2  实验现象
! Z0 p, H" J9 q2 g! w9 f, L# V* T
  首先打开 SmartSnippets。
5 G$ ~' |5 T; v7 E( b. o6 z9 H
9 ]- g/ P8 a" B. U' s( y" X
& L" c# w8 Z* v图2: a9 U% O( @# Z- h
  设置好 SmartSnippets 之后,点击上图中的 Open。
3 m5 X1 ?9 i/ Z# J  (1)点击 Connect,连接我们的单片机7 m5 S! s7 D8 H/ X' S: J5 ~4 F

5 U' c4 M0 S  @/ M: t9 h
2 N0 A3 m8 b5 X& G图3
9 a. [+ q/ p% G* [( Q2 X: }
3 Y' g( O: x& G) a: b  (2)点击 Erase,擦除 Flash。- L  h4 W# p; Y% k" _6 I: z- A

) I8 T: h) Y$ u# c$ k( E" j" Z5 i! F5 _- P ) A, t0 ~, H; v- ^* O
图4
% a1 D7 e9 M5 L3 ]% X
4 x6 a  D0 H6 e  W0 \% b" I6 \8 n3 [1 L  (3)点击 Browse,找到我们工程的.hex 文件。$ P' O" b0 M" f. e* o1 g6 q' n; i

2 {- }: ?) a0 ]% q, j" z" ?
9 ^$ [6 j9 F. u; b% Z. G* p图5
$ K9 m4 Z9 @4 s- p5 ]' V: ^8 J8 p/ v) _) ^# F) ?0 |
  (4)点击 Burn,完成代码下载。4 M5 @8 Y7 c& s& n

' m/ v% K4 C  L; O2 g" _6 P/ e8 ^ $ C( Y4 V& Q$ a5 h
图 6
" F+ {7 q, _3 V) [6 I, C  代码下载完成之后,运行代码,能看到屏幕显示时间。4 R& u2 i5 {1 P: b" a* ?! c, `
8 y1 C5 _* l7 k  x2 d$ p

+ i8 w; A+ U$ g! c. Q图 7, A0 {5 U8 E4 k& }0 J2 C
  在时间显示界面下,触摸一下按键,会显示心率。* o. t$ S6 P( t, N5 k' Q5 w5 l

3 [6 `: \/ G/ f: r5 S+ g5 ~3 y ' x% {$ M: X3 i% y- M7 U- [
图8
( D5 {1 ?* n; |3 [0 L' [( s
" F- D, ~. y1 A9 e  在心率显示界面下,触摸一下按键,会显示步数界面。
. N9 K( |. V+ S; W. g5 Y
8 G9 F. B8 `" k; @+ \ # C9 A" T8 n: h8 ?+ l# l# V/ C
图 92 U8 N4 e* g; ]# w8 n

! s; x0 w2 b. d4 w9 f   再触摸一下按键,就会进入卡路里显示界面。
& n) J# }3 }3 M5 f6 `; a' \9 b9 D7 q0 _0 @

9 ?; U/ ?, @+ ~/ M图10; `7 a  _% b  ~- F( y' r

1 b+ ^' P1 t0 \9 \; y6 l  打开手机软件 Wolverine BLE。9 r4 M! J6 R, [& e& L# S  F

9 L2 v% m) l- W/ K% c/ e' Z" Y+ p7 w  ~
  (1)点击 Connect。
( O/ C1 c/ v! i5 d/ e% i8 z) N4 H$ r3 M) o9 r  |; B

; V; T; t1 W+ X. H3 c- u/ F* b图11, m$ U# I  C' k9 N, R

1 H6 x5 Z4 H  D" U7 S  (2)选择我们的蓝牙设备 DIALOG-PRFL。
/ i' T; L; ^# w' l  |4 B
# u/ n# ~( E" |% O , C. z/ x2 q/ d" m/ e. V0 R" o
图12
; k3 \% {+ \. K  J+ g
( x0 k0 W" i- x" y  我们发送 step,会获取步数。
. d+ m+ S2 a8 W! D+ `7 K- o
" a- b/ E8 _. ?  L! t: P ' b- M* T' X( w4 W  `  v* c- v7 o+ I
图 13
& f! m" @1 g5 y! P7 q  发送 cal,会获取卡路里。: `, G' L, H0 f7 E! Q2 {# y

/ ?2 c) j) I6 V: z- d& f8 C9 a
, |, d' a6 [# a* o4 Y3 [4 K图14
# O6 w8 a8 \( K  发送 heart,会获取心率。' L( S# a) w& h& Z1 T) B1 c

/ {& |3 X7 J3 X3 X# L. G " Z; J* p$ k, p( e( z
图15
. v% T  J  i$ o
3 U. E9 j9 c8 y; k( k- m) ]- U5 _9 T7 Z. o  u: r/ ~9 E
( j8 G3 C7 m( s0 L; M
文件下载请点击: 9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf (1.86 MB, 下载次数: 0)
9 b; E; g) t7 Y7 ^( s
1 `8 ?; i/ A$ x9 z+ {, V
# ]% Y6 X& S) ]

该用户从未签到

2#
发表于 2022-8-17 18:36 | 只看该作者
运动手环是个好项目,大部分人都会根据手环看身体状态
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-21 17:42 , Processed in 0.093750 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表