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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
整机功能代码讲解
! t8 y9 z* e1 h- [# w# v
% K1 B1 P0 J0 i( E3 U8 R
5 f6 Q3 n. }$ j0 I- Q& G4 \" ~) ?

% a' a! D$ n$ x! w$ g整机代码
2 {  ?& N7 k$ _8 N0 J8 W2 p. \  ~5 |0 _8 G# e6 Z  b4 L/ D7 n% @& I+ f
1 软件设计
- G. G! g3 Z1 C+ j2 J  本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。
! \5 x' v: l1 n. v( k# n7 p% Q  以上各个部分可以参考前面的章节。
$ h1 a- z; |( |0 K  首先,看一下我们手环的整个软件主函数流程。8 X1 |4 [+ {5 l. a1 ?* j! s

2 D* o+ r% F. O# L  r7 ^ % D" p' F, N& ]1 \0 l; u
图1
% i& p1 ~5 e' M% [5 v  代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。$ W4 r4 }7 S6 w" t+ t
  我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。
9 m( t9 I' I1 ]! R+ Z- A9 m  这里的 GPIO 中断主要是用来切换屏幕显示页面。
3 _% }( h5 l+ O5 s  E$ Y4 M- s' U0 B
5 M2 \  x5 F8 y& b2 ]2 A8 [1 x
6 t6 F% y; j& z代码1
* Z% }6 c. j) \5 t8 T6 ~  从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。
8 \" C9 g5 Y6 R5 d( H+ r  在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。
9 _7 ]# J! L' Q  X& T  关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数. _" t" _' x8 a) e) Q  u

8 c  q! t1 h6 P- b" q9 D4 ] % C. |0 C9 M% X
代码2.13 X% T  H, |9 \
% |& H0 r# C9 Z( m& u" I

* G" o/ Y! h: Q. m9 ~3 f代码2.2
4 T/ m- }; j% a  V
8 F0 U; D! Y; z9 O4 m9 W  每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。
  v" ~: D5 q+ {9 K' s* G( Y- u: T) O  对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡
7 I/ p8 U  O: R% ^% r路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。" k6 c" E9 @- g- n- m6 _0 f
0 P# k/ x8 f3 Z2 J4 f, y4 V! E5 J
2 J+ W* C" m/ A  T$ [
代码3" q3 b5 w+ H9 H( P& k
关于其他部分代码,请参考我们的我整机代码例程。& w( ?% D, ~0 r6 `

3 A0 {. b5 J3 k0 ]6 q+ q. @6 o, m& e3 v4 u2 n5 ~
2  实验现象' h7 F/ [- @! W0 N

2 o& a/ D6 u$ ]: B3 y  首先打开 SmartSnippets。
# t$ A4 e, v( n8 M/ F" L1 {
; a5 g4 Z# q& |3 s6 G 1 W6 I/ K, z& O' K
图2* z5 W' F- v6 j- P+ O) H
  设置好 SmartSnippets 之后,点击上图中的 Open。 / R2 {$ D6 \" y3 K
  (1)点击 Connect,连接我们的单片机
6 N3 y  o; _2 b- Y( d3 ~; w
% e  {- G: Z/ d4 S
  d$ s* ]+ P4 k1 h/ D图3
$ _% I3 ]3 v' w, o/ G1 W% u. L1 Y1 Q) T# e/ k/ t
  (2)点击 Erase,擦除 Flash。
- r( o# v. w, `6 t! O# ~6 c* n
  Y9 B, V2 p. X9 } 8 e# `3 ?9 o( Q) V; }" H2 _! K
图4
$ t% i' P  a  F- F; W  Z6 f, Q$ U& s( T) l7 p6 ^
  (3)点击 Browse,找到我们工程的.hex 文件。
, g* ?3 z7 @( j$ V6 I5 X$ Y! \. L) Q- q' s* M

5 o' }6 d# d* ?3 A4 E图58 `9 ]' w- g, ~" d4 _) G0 M5 ^
) W6 ~% w0 E5 G; R8 x* C
  (4)点击 Burn,完成代码下载。
$ v  d" I: y5 M% {& d$ B( M% m# e' `& ]

7 R5 n) {+ Z7 [! ]; b; Z图 6
2 X% M0 F7 ]% R* ?8 e# }  代码下载完成之后,运行代码,能看到屏幕显示时间。4 Y- t& \7 X' I4 [' U' u6 |! e

: U1 G  G+ L' q. i : F5 f: N9 ~% {/ W9 U/ p
图 70 b( S+ X0 Q8 b3 v( U
  在时间显示界面下,触摸一下按键,会显示心率。" v) r6 ?# K- d' q+ ~

: R5 q8 }: H: R& z! c
' \& `+ W2 E- [+ ~! Z4 s" V图8/ t  u# G* i! T

" ~6 S" v1 p9 n7 W  在心率显示界面下,触摸一下按键,会显示步数界面。( y  i9 g; A. W

# U* ~) H; }+ e- P+ E ( v4 y+ J8 _9 O2 A' f6 p5 I
图 9: H+ ?6 {: V9 g! Q% B: O6 e6 Z
8 E. f  n2 w, D: R% {& n
   再触摸一下按键,就会进入卡路里显示界面。& b8 f* ~/ G2 b; j  C1 Y

2 v$ Y6 Z# l$ ^& z; }9 C
. s; b, o( ?. y4 g. N  n) y" n图10; Z, B4 x/ M4 h1 _  A  \

3 x$ X# N8 X1 `. l* Z$ @  打开手机软件 Wolverine BLE。; e9 s( G; x% G' T7 j
& ~8 a. L" C/ U! d4 b. W9 N

( i* d5 P: c) R& b8 a3 s  (1)点击 Connect。- N" F. @, v* f( ~; B3 l4 O

2 p) J  ^5 I6 ^- t# Q: y 2 {+ u, w) F8 `( W0 t( I# R
图110 G" G! ]/ N1 Z' B. e- c" \5 l
- G8 a' E9 v: N; m+ r
  (2)选择我们的蓝牙设备 DIALOG-PRFL。1 y& T7 g+ C- o

8 C: P( O* V: H( M
2 @4 ^4 S  W6 h/ g! O5 r# l. W图12- Z+ p- Q$ o! }* E/ m& I2 a
* ^# a6 N4 I; _1 `4 A& r  J, i
  我们发送 step,会获取步数。
) G8 m9 \$ A7 `4 {0 g; c# z" \: }2 ?) }4 [  \) Y9 s  P5 \

  O, K; |0 ~6 v+ }# y$ b. n图 13' {& X( N% u" D% ^# u6 @6 l
  发送 cal,会获取卡路里。
, D4 g/ e7 y4 g
) n% A  d3 U9 D, j6 B( O+ F
+ W& h8 G; o4 D& e图14
2 a( c, y  D3 j) M$ t8 d  发送 heart,会获取心率。
& t2 c5 Q, U  i" m# G9 I+ F' b; P5 r% ]9 R* `; O* L. E0 c

  N. E- B% O7 H9 |* O% ]* G# f3 U+ J7 u图15
/ u( n: J! Y' q! [. B* @& Y/ }5 b  I1 `1 h) q; C

7 R0 N. Y! c! d! x3 k% z7 B7 C. H8 d7 H- \) _- Z+ ^- Q
文件下载请点击: 9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf (1.86 MB, 下载次数: 0) * u4 Z; S0 s! H* z  [8 Q

( ]# e% E$ N+ X$ H2 C3 T, t9 y& t! q3 o
  • 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-10-8 13:17 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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