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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
整机功能代码讲解
$ J; K3 \& }) e, b0 g0 g1 H; r

$ s$ Q  `. ^+ z# M4 Q! H* K6 f0 B$ ]: ^/ k# O* h; X
, O9 W) g# t' `3 t2 l- @. V, a( A
整机代码 / j5 U0 S) k( k3 k1 D6 \  d

. D7 s* X! E; ?( `1 软件设计 # C5 {0 K5 o* S# E; `* H# N( b
  本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。
! D2 |& H1 i8 F8 z9 {  以上各个部分可以参考前面的章节。 4 p( q6 G# d/ n% `5 e; x  |
  首先,看一下我们手环的整个软件主函数流程。2 c1 V1 O: q: S1 ]( |* E* B" N! Q. X
, y! C" Q+ C( S0 Y* i
' h/ C2 Z5 r* R, c
图10 J: x5 A" {4 u
  代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。
1 A1 \) b7 v/ V3 O) U) W  我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。* \6 P$ F+ e) m8 R9 T0 \: X
  这里的 GPIO 中断主要是用来切换屏幕显示页面。7 k, i2 |8 }/ \9 `; G" {, T  w

- H; g, ]. a! Z 3 q7 ]9 x5 _* m. D/ y  m+ P4 q  X+ Y8 f
代码1, h$ R) |% m& g. p
  从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。
+ }! ]4 T0 i& z: u% D; R* ^& H  在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。# y' @+ |# p& l& {! ^9 c: Y( p
  关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数' Q* ?+ h4 u( \4 V9 n7 k

: D) L* Z4 x2 g8 y6 T, G! g 1 S% G6 I7 O4 q$ X$ L7 x
代码2.1% `, w. {, f7 Z

2 P* V$ |' Q! m) A5 A- Y
" _5 @8 h( d' g/ I2 _; S3 \/ F代码2.2
3 u, J/ B7 A( G: ~+ q$ i
6 M  D; `: u  T  I" ]  每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。3 P) q& b6 w& |9 M2 A; Q% G
  对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡
% c9 O# U6 I8 e3 I路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。
$ R' j6 q# R, t* J' e
: k5 n5 t3 P8 C, @   B( T# A7 R1 [4 ^) {- X# s+ @
代码3
$ Q+ ~9 q0 c* d: ~关于其他部分代码,请参考我们的我整机代码例程。
" T2 t+ v2 u4 B/ [, p* Y* S0 k0 f

. _4 C" G4 Z3 [! I- R9 d% P2  实验现象" F: X  s, E$ X% H. C- e/ h$ p
, h, Q/ f9 k& W) V' v
  首先打开 SmartSnippets。& i$ [7 T; V) L$ v
' `1 q5 W$ x8 g2 U. f& x

! ?+ h8 x* K0 T" a图2
. |& h$ K% X2 d+ {$ Y) C3 G  设置好 SmartSnippets 之后,点击上图中的 Open。 2 E# i3 |3 r; }. ?* R% ^
  (1)点击 Connect,连接我们的单片机" m6 x6 f5 Q. T) G) c$ m8 n. c

8 i( }9 `: ]& k; B: ^
, m! d& f$ P4 m4 N图3  A% i( Y* T2 {; y4 r1 x
; W9 K; r$ S4 U, ?9 e" g( Q9 K
  (2)点击 Erase,擦除 Flash。
* `( C/ K# [/ p. V- v. f7 D8 }0 }! d" a

6 @! R& f( r9 [图4- H+ i5 v/ l3 m3 n2 ~0 s

! c% A9 O- f& }1 ?6 _5 T% ~  (3)点击 Browse,找到我们工程的.hex 文件。
4 v' Y1 C5 f9 l9 F5 x( h( p* s1 A8 h4 h# |( T3 U* c

( ]# U3 ]6 Q- _( ]% @9 }0 @& y图5
+ @5 z3 a. ~; K+ V
) J1 g! Q. p, Z* x  (4)点击 Burn,完成代码下载。# v; x, \5 \% u. _

4 K4 g$ E+ V% b% d- U6 ~9 V& L# ?
. }+ n7 q" n8 y3 m' g图 69 e; r5 `+ i5 ^  U+ z7 E
  代码下载完成之后,运行代码,能看到屏幕显示时间。1 r( W% d. b4 b( W" Q) _$ j( r  X

- {) C, Q; H6 t$ C ; c9 B4 a+ Q. Z8 d% \/ v' M
图 7
8 H! W7 Y( V& C( R  在时间显示界面下,触摸一下按键,会显示心率。
0 _, _, L6 _; |3 |( N+ k
: G' j+ B1 x8 c* S, L! t5 ` + c7 h5 r# \. Q
图8# @5 Z5 U/ e! f6 t
, O: {! p2 P" q$ c
  在心率显示界面下,触摸一下按键,会显示步数界面。! c* C2 y) Z$ G+ q/ q; G) Z. s' X
* z7 P6 [) z. S
7 y  f5 _5 I+ d; Z  Y
图 9
* e4 z# J$ M# k0 p" x' [+ ^/ y& a5 w$ D) b# z8 r& B& i, k1 e  z
   再触摸一下按键,就会进入卡路里显示界面。" s5 J9 v$ j$ }. K. O7 i" m5 \

' m$ k+ b8 |9 }; U0 g( y $ F3 V* |* \) H0 i
图10- c( N: F/ r% u: h
' j  O0 _* r+ u4 u- q: [
  打开手机软件 Wolverine BLE。& i9 L3 {* @) w  {; F! I

/ O; S* q( d: I# [
( S4 \" K2 l6 o; N" N  (1)点击 Connect。0 T9 n# p( @, y& x7 U8 M. P

$ U6 T1 I7 w( H) L% { ! M7 y0 k$ u7 S; S5 G2 j/ b$ W7 @5 w
图11  M; u- O4 K4 s

# W9 t& r1 d! ~; C2 _: |  (2)选择我们的蓝牙设备 DIALOG-PRFL。
. K% ]; J( c8 Q9 X+ `; b
# |8 K  {* y! S7 e4 j, E& u + p6 i! R4 D4 J* I6 a! P( T
图12
) i; d6 p5 V3 G" Y
1 |# ^& g( s6 _7 M/ ~0 I  我们发送 step,会获取步数。6 x  }1 S2 {' W- o# S
' O$ C( L0 J! F$ ^
) ?! e8 b  _6 b1 z2 _+ C
图 13
7 F9 k1 z9 @) K0 X  发送 cal,会获取卡路里。
; P9 x( {2 m. i: `; L: c
6 @+ e& z. g) \
, t) ~3 L# D+ J" X+ _/ t3 O图14  i9 K6 ~- m; ]7 z8 a+ {
  发送 heart,会获取心率。
+ a  U6 {8 L' D4 w2 Y% L- S- `
$ e4 ^' Z0 l3 [, k; y- B- q! P: m' T 1 a1 q6 t1 x' ^4 f7 l2 [/ S0 c
图15
+ Z4 a, ~4 n/ Z$ W9 R6 m7 z" _! o
  o$ ]0 j$ o" ]. Q) ]( H0 B1 ~$ J6 j6 v1 O! W" p* Y! d
9 T4 P0 F' J! X- F3 U/ ]- q- P
文件下载请点击: 9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf (1.86 MB, 下载次数: 0) 3 k7 v; ~1 q: D

' m/ Z. q; c8 b. Z2 d- _* t0 O9 ~7 T: |) _- m
  • TA的每日心情
    开心
    2022-1-29 15:03
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-8-5 14:41 | 只看该作者
    这个是FPGA编程控制的吗?

    点评

    你可以加官网“***”里的QQ群,获取专业答复  发表于 2022-8-5 14:44
  • TA的每日心情
    开心
    2024-4-29 15:07
  • 签到天数: 466 天

    [LV.9]以坛为家II

    3#
    发表于 2022-8-5 21:28 | 只看该作者
    :hug::hug::hug:
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-25 21:23 , Processed in 0.140625 second(s), 30 queries , Gzip On.

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

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

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