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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

# F$ ]9 G0 Q8 @! o" n6 z+ H6 A* R0 }+ k4 t& L

" K5 P) ~% H5 |, k. c% R* w# j' }0 ]7 ^' u" p" H9 y1 h
整机代码
3 b, @$ ]# c* B) {) [! j. N8 ~  L: o7 C, J! r3 u
1 软件设计
/ e& H6 N  T6 Q/ x$ M  本节,我们将融合前面的蓝牙收发、三轴记步、电量检测、外部 Flash 读写、 心率检测和 Led 屏幕显示,完成手环的制作。 0 Y+ \) B, U) e7 W
  以上各个部分可以参考前面的章节。
% B7 G, D1 E; ~  首先,看一下我们手环的整个软件主函数流程。
& z! W! G' W7 I( Z& }# A
/ Y9 s; n9 a/ k . U$ s. l. ?4 ^2 I6 y! F
图1
0 q! G' }& s. Q; ~8 ?  c# G  代码运行后,首先进入初始化,初始化系统时钟、外设和蓝牙。除此之外, 还开启了定时中断和 GPIO 中断。
. F, B- M/ a% H  我们的定时中断每 10ms 触发一次,用于 ADC 定时采集心率数据,以及定时和时间更新。另外,由于一些原因,主函数中的步数读取、电量检测、心率检测、屏幕显示并不是每一次循环都执行一次。这里的定时中断也作为一个计时功能, 步数 20 秒更新一次,心率模块 1 分钟打开一次,亮屏无操作,5 秒熄灭屏幕。! _- \# }% W' x2 [
  这里的 GPIO 中断主要是用来切换屏幕显示页面。# A2 @5 }/ y, _/ s

; @, H/ i2 G, C. ~
" e5 k; l' f4 |* v代码1) f" i8 r, U3 o( N: I% G  ~! z
  从 GPIO 的中断回调函数中可以看出,每次中断只是把变量 Touch_release 置1,并没有直接对显示做任何处理,而在定时中断的回调函数中,判断变量Touch_release 的值,从而确定我们是长时间按键,还是短时间按键,来完成相应的处理。
+ {3 D6 A+ I8 p  在定时器中断函数中,检测到短时间触摸,就打开显示标志位,同时设置显示的页面。& l9 }- h. M  ?5 P$ e
  关于蓝牙收发部分,我们在蓝牙收发章节的基础上进行了修改,通过手机软件 Wolverine BLE 发送 step 获取步数、发送 cal 获取卡路里、发送 heart 获取心率值、发送 rtc 加时间完成手环的时间设置。下面是函数
+ C# w' U7 p! S+ }% O2 u" r6 r( z1 M$ V/ U# P$ I( \2 l; w/ s
# u. R8 v- \) D: w( u& Y8 u
代码2.1" @  I: s" n: `' R6 I
! t2 w* V  o: m7 K  D7 H

5 j$ V6 T; t1 T* l8 F  u  \代码2.2
) O; Y' F* n+ F3 O" }$ e* T" o) w, J% v7 |* ]' L( R1 Z+ R; I- Q
  每当手环收到来自手机软件 Wolverine BLE 的数据时,首先从 Flash 中读取步数和心率数据。然后对比接收到字符串。最后发送或设置相应的数据。这里有一点要注意,我们从 Flash 中读取到的是数据,而通过蓝牙发送的是字符串,就需要将数字转换成字符就如同代码中将一个位的数字加上 0x30,换算成该数字对应的 ASCII 码值。. Y; t" ?0 g1 W' T! ]
  对于发送给手机的卡路里数据,其实是通过三轴步数计算过来的。消耗的卡
6 Y7 @( R! D) p# M- y路里跟步数以及个人的体重等因素呈比例关系,大家可以根据自己的情况修改卡路里与步数之间的系数。+ \) U5 Z3 T: x

0 h2 C7 ~6 q5 h4 R5 m5 _
% {' ^" i( u. i4 `; y代码3* ?3 [% }: Z: r; S( O$ l) a
关于其他部分代码,请参考我们的我整机代码例程。8 f) K2 p$ X) i9 O2 f) g: a

* Q$ R  y" f/ m3 r3 L; i( }, Y% c* Z9 l0 t& O; F) E
2  实验现象
4 E# ?0 F4 s: H4 U5 v) u6 e. C% |
9 M5 d, e- o2 s( {1 [# m  首先打开 SmartSnippets。  \: [8 g$ [) a: w" l
$ ]  M4 q* h: W- D8 {* s& d2 r
- X4 C. i& W  y, h/ Q
图2% }- q! q; w$ w+ J2 x) L$ D0 R  ?
  设置好 SmartSnippets 之后,点击上图中的 Open。
7 \8 ~$ |* _  ~  ?1 X9 L) T  (1)点击 Connect,连接我们的单片机
* W' `+ p( K$ T* W( j: l! e8 \  [( q5 s" j, C
' f1 I! k: s# N5 t" E7 e
图3" e2 C: J- `6 w( M) V* I# t

& K- i; X# P/ I  (2)点击 Erase,擦除 Flash。
. S4 P$ z. q0 F4 E* U; [# ^& j  T. k. n/ T

. i4 h! G) j9 u8 b图43 w& V1 g; e5 `) C& R

  O7 v& C+ z+ D0 i% y) Y  (3)点击 Browse,找到我们工程的.hex 文件。
1 [9 n7 c6 U, G8 J- C
- U# `" ^! ~, B& A" D  }
: x+ m; w, e8 f1 [图5
) g+ j, K5 c/ U; c5 V6 ]2 d1 Z# X8 E
7 C) p" v& \/ k. f  (4)点击 Burn,完成代码下载。
; T3 g! H7 }. F0 Y+ k. L# {2 a3 U. P5 d' N' s6 B# _4 q0 Y* }5 c! l

2 a, y; R4 ]7 z- v1 j- K5 |, Y图 6: o* f& B$ s: m$ J2 ~
  代码下载完成之后,运行代码,能看到屏幕显示时间。
8 A% \: L/ q0 ^! e2 z8 q$ j& _
4 `) N& ]3 h% p" @& t) N
% C% R& a' ?$ O6 [5 m( q6 m图 7
$ C/ k3 |, G/ r  J7 ]  I  在时间显示界面下,触摸一下按键,会显示心率。
8 U; b) ^2 [6 P6 \3 R/ j4 W& c; }9 O# Z3 t- {

; x% M& a, L4 T# \& S图8
/ `. z( B, }- c3 q4 t0 l6 ~4 o: ]: d/ I* k  ]
  在心率显示界面下,触摸一下按键,会显示步数界面。, R" M: ?6 F- Q- J1 L0 o/ ]- o
3 x- _3 j5 _2 p+ `0 X0 i" @3 J
0 {2 g5 ]1 ~  U. E" G
图 9
6 x+ r; r& x& B  ~) h% n; |7 D( Q3 C/ c0 P. M
   再触摸一下按键,就会进入卡路里显示界面。& T+ H1 W& r& ~$ b4 }/ ~

# c* b8 V: P5 ?) Q% z
. \$ t1 `  m# x6 ^- M图106 I0 G: W- N) ]0 a- Z# }7 m

" G+ e9 ~* Z4 ~) T" m: `& I  打开手机软件 Wolverine BLE。
/ U2 Q( n# `2 P) p, T4 d; M& [; g+ I- @

& @: [* G1 ]( Q  L! c5 Z% t1 _1 c  (1)点击 Connect。
- z% j* e/ Z: ?4 r- l, e2 x& w1 [
8 ?5 |" n- t! A, C# o/ H 4 j) T3 s4 A* \7 H3 ^* b
图11/ R4 v5 {! c3 |3 g' G' p, ^% G3 M
8 }  b( q  C! {4 `2 o
  (2)选择我们的蓝牙设备 DIALOG-PRFL。' h: k% Y" X' }+ X/ O  i* A% d

# h7 }- h/ X& c  O& I6 f/ Y % c6 w& ~& C& u2 _
图12
+ Z  u. h" Q/ ]' V
8 p0 g( ~* R2 Y& h$ N  我们发送 step,会获取步数。
- a+ q* V' d# T7 s% O9 _' C5 R9 Z3 B$ ]/ g
6 w5 I' ~. [" b8 w8 W# g3 O
图 13/ ^* M; h# }! K% ^$ ~; g
  发送 cal,会获取卡路里。
2 q# D+ m: Q. l4 a- G4 F- d. R9 F9 B# q" t0 O# y
$ E' k' u& L* s* c* F( ]5 X
图14; U, B- S6 D2 u6 i3 v
  发送 heart,会获取心率。
0 {+ u( K1 D! R: @2 I  e
5 C% l9 t; k4 g9 D
& C; G7 c' h$ G4 M6 |图15- q" G8 X3 @- J& t
" l6 u9 U+ ]/ ]7 K- H

: E* t( c' W0 Q, U- w- V0 l3 J% x: M" l2 Q5 [
文件下载请点击: 9_(100%开源)蓝牙心率防水运动手环_整机功能代码讲解.pdf (1.86 MB, 下载次数: 0)
9 E& ^6 [9 r+ V! \& I; n
! V. s0 G% y( m( s; e( ]" ], ]' M/ l% V& [9 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-10-8 17:35 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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