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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

. w" A$ N& _8 U8 O8 T
" f9 ]/ \+ ?3 \6 {' L
# Z( v1 ~6 A# V8 F9 ?0 y' T5 z
. b: k: ?8 e, ]1 v1 E6 S6 ]整机代码
  J% G8 l2 l- ^, V2 ^% Y- {- O- t; q" a  N! Y) Z
1 软件设计
$ [$ r% r; t# y4 F( I8 m  本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。
: i. g2 E$ D6 _/ ^  以上各个部分可以参考前面的章节。
9 V# s! F: s& M  首先,看一下我们手环的整个软件主函数流程。
' j# `) w% g# I" B5 A( ^' ~& o, }  S/ J# `. R# @

; r# a' d. B4 t8 O4 h7 W图1
) X& e- O/ I7 B# E8 E  代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。
3 t% E/ V3 D7 p& h" |  我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。9 f; m; t- F5 q8 V2 `
  这里的 GPIO 中断主要是用来切换屏幕显示页面。
! W3 c1 b+ }( _- Y( j, F
& l6 c- o1 X+ G9 C
1 _1 D/ @% Z$ G  \. c* J- j0 D代码14 r- R$ D2 ], [# y7 D& }
  从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。
4 J! R7 N, x; N& k+ {$ W1 C! o  在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。3 S! c4 L. a# O$ t2 w" P
  关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数6 P/ e9 H; T4 T$ Y; @) D' k9 O0 r
4 }8 X4 C0 u5 r) d

) M. w2 m. i" l. E9 {2 a3 Y代码2.1
, |) X# C) u6 [% r) v/ s
2 w+ K' F( b  W( E 1 e* ]& x: d2 u$ }5 I
代码2.2& c; d1 U' K5 Y3 w0 l) ~
( C2 Z1 t; E$ H1 T* r
  每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。! s( S9 h9 c  [4 J+ A$ U! o
  对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡
) g# V, j+ l& F) k+ m& X: L7 p路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。6 ]& k: o" I5 [% ^6 |$ }/ K4 j: f
6 f! A) V. H' X! D

  j* ]) ~/ R1 Y8 U+ i代码3
/ M+ d  Y0 n6 [0 ]9 \/ t关于其他部分代码,请参考我们的我整机代码例程。
4 T% Q! A3 p. ]1 p. N" D) v. b5 _% d$ i) D6 M) @/ m

" m2 p* R8 w3 ], ?& s2  实验现象
) P3 p  E% Q  J, G& d. h( d7 I+ X3 h" j, ~2 M5 ^+ C# y
  首先打开 SmartSnippets。4 m  x9 k, Q+ I
1 [9 T* W* N# W* g

& u; K( @# v( X. C5 @6 l图2* H* }) L  c' X. ~$ f! e6 X: L3 M
  设置好 SmartSnippets 之后,点击上图中的 Open。
0 y8 Q/ l/ y0 f  (1)点击 Connect,连接我们的单片机5 C  v2 ~7 o5 M$ ?2 D! x

( o" z" E1 V5 r
, g0 P& m: ^; U, a6 O: b8 V' I图3
# U1 a1 D5 M9 a; _) f1 i
" W7 i! s# v( l- g  (2)点击 Erase,擦除 Flash。4 }4 }  O8 j4 ^% U

; d6 U2 W' O8 G 8 \! R0 |: |7 @' E( `
图4
7 d6 S; V. ~/ n: Z/ E% {. |5 z. E4 z% F4 \2 N) s5 F
  (3)点击 Browse,找到我们工程的.hex 文件。0 o, O. X. R+ T, Z( O# f

; N/ S$ w/ \9 t/ K5 K ( m0 C- H/ L# n  X% k1 x  {6 b
图50 x7 w  J& a, l( g

4 d5 d- u8 z" j0 `: {: ^6 r  (4)点击 Burn,完成代码下载。
( H+ l# a1 o" x# V$ S0 c
6 t* d) u7 V9 g6 z& w4 z ! e6 f, B8 `0 _: D6 z3 O. d9 y
图 6  F$ U2 ^) s5 k- b5 S
  代码下载完成之后,运行代码,能看到屏幕显示时间。
. S1 C( }' l( L9 v% X: B, X, z! j$ a) F4 @

, s( I" h6 m/ R9 c- z% Y5 s图 7
8 f9 K' Y" {! W9 M( C" \- q2 a  在时间显示界面下,触摸一下按键,会显示心率。: b/ a8 x8 F2 }

6 s; l+ k/ O8 }$ M$ C
8 g% z  ^3 _2 m% o; x/ A图8% \6 o1 j4 U2 o' Z' x" E$ N' S

' U+ i# D" f) i$ u8 |8 v3 q5 L& F  在心率显示界面下,触摸一下按键,会显示步数界面。% w; T3 f+ L9 \5 F: X7 m
" a& h; k" v8 Z8 y2 V2 }2 y% G

' O: J& Q. m, n) q) [/ N. t图 9
9 ^. h3 P* _: K- w  N+ `5 A$ j2 m' E, ~% k, ^
   再触摸一下按键,就会进入卡路里显示界面。
" \3 I! v( L, _1 v5 R3 s$ m; |. o! @; L; ^& o! c! a# {, L  Z8 Y

1 R/ N' W) g+ h! f( j图10
" q/ f4 ^. H/ k5 i8 O# L5 o0 g+ T6 i  ?8 y1 u; W
  打开手机软件 Wolverine BLE。
. `* o  k/ K2 }0 e. c1 b5 N% Z( N# ?" j, ]- n6 y$ o. e  y8 t
$ O1 P1 Z: O. N9 t' P) \" J( N
  (1)点击 Connect。4 Y) N% s  g5 R$ o, s5 L' b

$ s; J; i* p1 M8 v3 @- m  D( f3 X/ n
) X) C4 ^+ _% _% ~7 d1 {- t图11
' V3 T5 z4 k2 k  j
, D, f, O2 a1 R+ Z0 J% |2 \, t  (2)选择我们的蓝牙设备 DIALOG-PRFL。
/ W* n7 ]- P" l$ N* K0 I8 p3 L; P2 b2 |1 M+ o5 E3 e1 \4 {  p
+ a+ U! T/ p! P
图121 h# P' }6 v  Y7 F( I
& @" p: x, s+ c' W. U0 N% B
  我们发送 step,会获取步数。) x, ?7 q& P( `: ]# h. [2 X' X

6 k, @5 ^& o1 T1 S' T; k/ E
1 r& p+ d7 k8 ^, j$ l1 {- l$ S图 13
3 u+ b* b: g. P8 T7 w  发送 cal,会获取卡路里。# h5 X7 p3 P. P1 N" z& p

/ ^* @* d2 R6 |% y% z5 x
5 I. P* X6 s& M/ \" S图14
" v4 w. v+ H& |9 v+ e. g  发送 heart,会获取心率。) r" z" O+ n. d& k: X% Y2 b

9 W+ H8 L) ^4 L 8 y6 A  `% H" Y% M
图151 m1 L/ l- I1 i- p+ o' u

! M2 ^1 Q: I3 W  R
/ R' o$ |' Q0 e% m: B, }- I% a4 r( f+ K1 V& L& Q! n6 S8 G+ V: k7 _
文件下载请点击: 9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf (1.86 MB, 下载次数: 0)
7 y2 ~% v# k9 n# `* {% T  x7 E8 |8 U
# i& y& s" o! m6 {: U  A, {) Z5 f/ k1 G1 j2 i* w6 E  E& q

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-13 04:15 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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