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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-28 19:51 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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