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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-26 14:59 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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