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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
整机功能代码讲解
8 A3 g. s: F. e3 `' Q& X" h
0 b2 N2 [1 k( a* T& w

0 B# Q( _& a" `! F' o
6 ]9 H% \' o( O. I8 \7 t整机代码
- x4 g! P4 }) ]+ g( A9 L7 k3 g& b! c9 {" d$ K* [
1 软件设计
% a' @0 ~. T0 |$ |8 m  本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。 + W5 u  B0 W# B: e5 _0 g2 r9 I2 n/ {
  以上各个部分可以参考前面的章节。
) T5 `$ I! {5 l  首先,看一下我们手环的整个软件主函数流程。3 y0 r2 }: e+ e( X1 O

# ^2 C/ c& h6 w 1 R) Y7 G/ _' o
图1
: K2 F: m5 Z- z/ u5 q3 m  代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。
( ~$ x! K% w! h1 V; ]  我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。
& z5 _9 [- W8 A7 O/ @; ^( _  这里的 GPIO 中断主要是用来切换屏幕显示页面。; n5 \) C0 R- o* s* d

8 |# u: l% E) B+ a' A( }2 @& V - t5 k! T' a1 b- _6 K, H1 e1 O5 E
代码1
: c1 o' @  b) K- @* @8 y4 c  从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。
  I  W& v3 h! {; U  在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。
; k& P4 l) L! J# }  关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数6 F) c, R+ p/ d! j; U6 m
8 _0 a- X8 Y, n% O' ~
" `) J: D6 T2 N0 g( F# Q
代码2.1; M9 o5 O4 M$ p. K" h! d) v
$ S' a+ J4 J! k2 J$ n7 U3 W2 [& y' p
3 ]+ V, H$ z5 [. ~- Z
代码2.2
, L  M1 M% v+ W) B% |2 m# n: c& e1 Y* }7 [& \2 Z, }
  每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。
  C" X+ G' C& G; c4 J$ D  对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡
6 i- ~0 x7 n4 a( t; C7 S) T, e路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。
9 B* ^2 \  I3 A$ r0 O0 F3 j3 ^: H! q: g' E2 q* \
1 ^# M- L1 X9 ]
代码3
5 [8 y5 w/ \: j1 k8 K, T8 N2 E关于其他部分代码,请参考我们的我整机代码例程。
" _! _, }& u: b4 m
1 Z3 [6 L; b/ J) Z! R) g" u4 }* R# V' S4 C( t. e) `
2  实验现象; u, b3 y7 K9 f" k! P( |

3 G! P' S* n$ b6 f: H; E  首先打开 SmartSnippets。
3 }) m; t9 {: B, u/ r1 n! g: K% @
( W4 t8 M! a/ E+ I# S4 x 9 s5 p. j( c. E4 A/ h
图2
( s6 j: U" Z8 A0 }. b/ d' g; A; C  设置好 SmartSnippets 之后,点击上图中的 Open。 3 O7 U! O  J  ^$ Y
  (1)点击 Connect,连接我们的单片机9 B7 o! M; f) M. g" Q
4 Q) j* Y0 L% z4 r) e7 n) U( R

  h3 J9 w* d' k# ?9 `. o# K图3! {7 `  z- N: X

% }# C( T; Y/ d9 n! q( [  (2)点击 Erase,擦除 Flash。- U0 p( }: ]) p5 I( ]

3 j% n# r9 r( Y- ? , c' N) Q) I) U$ _6 z  q
图41 q$ X7 T" K$ m

! o, U" W$ c# M( g: r0 A; F  (3)点击 Browse,找到我们工程的.hex 文件。
  S6 `1 u8 X+ t4 u0 D% B) N1 {% n4 i/ ]! g, T# i1 x
, v( B+ o2 e% J5 u+ e
图5
+ h9 D$ t" i" `6 m  y! U6 i$ @8 j6 s9 O$ B
  (4)点击 Burn,完成代码下载。
) E1 V2 H7 \5 @, Q: R" V- z1 ]; q3 h
2 l, R, T/ N, B8 c, r
- @( N5 E5 T$ V* w图 6
" e" c; r) G& j) Y4 p  代码下载完成之后,运行代码,能看到屏幕显示时间。2 a7 U) E+ u1 q6 a! T+ n: a
) @% e6 ]/ s% }; `

. z2 T, ?5 i! w' J# s# X图 7
& {) x, Y, B- t1 y% h! t  在时间显示界面下,触摸一下按键,会显示心率。7 x' D- _) i8 |5 L1 E0 Q# u; d
7 G6 Q. b; a+ [: T: F" E4 b
* x: |* a0 F2 I# n2 G0 C
图8
) _7 ?; Q1 |, }, e' T- l: o+ U/ Z, u
  在心率显示界面下,触摸一下按键,会显示步数界面。
# W) f; L9 w; p+ i7 o) e6 E- e# B, a& q+ v- [" ^, w! {

/ f1 l; Z  h8 y) v9 p图 9) s6 h1 l- g1 M% i6 |
" u8 g; I" {1 L2 u* c. \# _# q# D
   再触摸一下按键,就会进入卡路里显示界面。" o* D3 ?, K2 w! G, V
5 r% M8 a( O5 h4 [' j8 j7 D% |

% {+ C  ~4 m9 i) d7 T1 Q图10# ^  T0 J; j- f8 q+ [( |
# i6 [# {( w# ]# O! s3 h! d
  打开手机软件 Wolverine BLE。( a7 U5 S: y1 ~/ L( C

, n2 X  e$ V& {' F
6 y/ F1 w4 B1 x& e" D4 |  (1)点击 Connect。( c# |; F6 m2 R$ M: n2 c" w

4 b' g. Y* n9 S1 d- N5 j8 @( \: N& m
/ ]$ L0 Y+ _8 K/ I- l- G; t图11& ?1 i, h& H: B2 W' V
) l+ t' i; s$ }" G7 O0 L
  (2)选择我们的蓝牙设备 DIALOG-PRFL。
; n) e( X3 ~# @" N3 w" y$ K1 D0 @. p1 e  h6 z" J5 n
4 Q7 S! }5 c8 k/ w
图12
. O3 g) T! M1 G: j
6 M- `# ^! j( s0 R; |+ @  我们发送 step,会获取步数。6 K2 V& V% b" z  d2 f

7 T2 t8 L( O1 i# ? * \2 g) l6 o) ~2 I$ a
图 13
: f2 m; I2 ^7 T7 S7 |7 |, t( ]$ B  发送 cal,会获取卡路里。/ ^! A' d: l. j! f9 B6 c, }

+ |/ B9 M6 e/ G1 p
/ r" \! s9 d: m, h+ K图14
  [1 j- ]8 H0 M% T0 J( c9 ~  发送 heart,会获取心率。
* X% P- v$ }0 s1 [; Y; ?! S9 D9 b/ Y5 D2 K) t/ b, t

/ H) A% [4 G6 X$ v图15; e' v" [# o, b$ S# D& \
; c* B7 k, Q" c5 U
, ~; @$ }  o7 b7 f

  z7 [  G3 B4 A$ W文件下载请点击: 9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf (1.86 MB, 下载次数: 0) & I0 ^- a% G. Q) u5 |& t

' U6 U* _: [- ~: C4 n) [& r. \5 `0 e0 R1 K
  • 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-22 02:43 , Processed in 0.156250 second(s), 30 queries , Gzip On.

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

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

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