|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电容触摸
$ R, R3 t& H/ J9 h' o3 R$ L
6 z5 S# C5 P' @* j6 t# e7 ~4 c. w, Y i! m! x7 p. Y
4 |/ D! {) r& \9 ?- a) u# e 1相关简介
1 o3 I& u7 N9 U, m) Z
1 V: _- C% a! P9 ?7 K4 }) e 本次章节,我们将使用到 DA14580 的外部中断,通过触摸手环主板上面的小弹簧,触发中断。
{+ i0 y' l" G6 [ [! G DA14580 内部有嵌套中断向量控制器( NVIC,Nested Vectored Interrupt Controller),支持 24 个中断,能够中断配置与处理异常代码。当发生一个中断请
" y& O# V- {1 G. X' C2 g7 E 求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有 4 个不同的可编程的优先级,NVIC 自动处理嵌套中断。对于安全关键系统,又不可屏蔽中断(NMI,Non maskable interrupt)输入。
+ {: v4 d& V2 w! w$ o: T' m DA14580 内部还有一个键盘控制器,可以用于延时 GPIO 信号进入的时间。可以检测所有的 I/O 口的电平变化。当监测信号时,可以产生中断(KEYBR_IRQ)。同时,另外有 5 个中断(GPIOn_IRQ)可以被 GPIO 口触发。
( C1 S" b2 K$ x+ P 2硬件设计
# B7 A! O- Y7 K1 l, m7 E6 b1 m2 {/ `. N1 z6 y) Q" `
下面的就是本次使用的触摸按键,采用的是 RH6015,中断引脚连接到我们DA14850 的 P27 脚。
# R( f1 K+ f/ S* O5 O; g- r
2 c* U! t( B8 Y" }
- O" R% a& k6 K1 g 图 1
9 J& V1 U& j! @9 b( r/ ]) I+ l RH6015 是一款内置稳压模块的单通道电容式触摸感应控制开关 IC,可以替代传统的机械式开关。当我们触摸到 RH1615 第三引脚前的触摸电容时,第一引脚会由高电平变成低电平。4 \, x8 Y$ h' {# B0 v/ t7 A5 ?
3软件设计
% S' m# M, c* {# _) k/ Z! G
6 n: x l; q8 ^, p0 v: r- R 本次软件,将完触摸一次按键,打印一次累计按键次数的现象。' x+ l4 M6 E0 F+ m! g: o
$ N2 _) |$ Q7 p/ q G4 @# \: K 整个实验代码,将使用到两个部分:串口和外部中断。关于串口的初始化配置,以及串口打印的相关函数,可以参考前面的章节,本章节只介绍外部中断的相关代码。9 k. F) ?; O; C" y2 x" o5 X
要使用外部中断,就需要一下几个流程:4 |$ B# p4 }+ v P& G
# t* c; T) J( p) P
(1)配置要使用的 IO 口。3 k+ u( C0 d# x5 v( \7 i
GPIO_ConfigurePin(BUTTON_PORT, BUTTON_PIN1, INPUT, PID_GPIO, false); 这里将 DA14580 的 P27 管脚设置为输入。8 Z9 ?2 [ \* B& r. O0 D
(2)注册中断回调函数。
4 \# w6 m5 S! B! q: x GPIO_RegisterCallback(GPIO0_IRQn, button1_int_handler);
' c; k4 X# w# u6 M1 O0 j 这个注册中断回调函数有两个参数, 第一个参数是外部中断编号, 可以填写GPIO0_IRQn、GPIO1_IRQn、GPIO2_IRQn、GPIO3_IRQn 和 GPIO4_IRQn。第二个是回调函数的指针。
: M# a% D9 d) V( U, E |& F4 Q$ E# C. r (3)使能外部中断。! {$ Z! r) Y0 J# z# O
GPIO_EnableIRQ( BUTTON_PORT, BUTTON_PIN1, GPIO0_IRQn, 1, 1, 10 );* a8 ?& ]# \, ~+ e0 ^. Z( }
3 b% k$ K9 X) ~4 b& Z3 e; H& {5 W h$ e
完成以上 3 步之后,每当手触摸到触摸弹簧,代码就会运行到回调函数
4 p2 T' t9 ~$ b6 M* [; j! B, Q; p0 h0 Z; ^0 R% w
button1_int_handler 之中。
0 P7 h, C; `" v( f void button1_int_handler(void)6 S# a2 s5 |3 ]
( N) z8 `$ s) x5 U) c
{
0 h1 c7 y2 _' B6 k- [ } static unsigned char button_count=0; button_count++;
$ O0 k" f1 I! N0 j& O printf_string("\r\n Number of key:"); printf_byte(button_count);6 v$ X0 M& K% D& P% y
}0 Z' Q1 |' L! T2 d; [5 ?: i3 b
, r( W2 I- j! \; f1 M( D
在中断函数 button1_int_handle ( ) 中, 首先定义了一个静态变量' x# r. _! T- A" v4 |
/ w# L1 ^3 M& J
button_count,用于记录按键次数,进入一次外部中断,就将变量button_count 加 1,然后答应出换行符以及字符串 Number of key:,最后就打印出 button_count 的值。9 `. e, A' V4 d$ H
4实验现象5 r2 v# ^2 ^# J3 |* D8 d: {. N2 ~" V
q; |* d6 D, t' @! v
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。0 p& O' o1 Z/ k1 w9 A, @
7 f6 Z* X V% g& j& a1 V" \) E& u (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
$ w2 x y" P! N4 ^5 c) Z" g1 o& V) T$ ~& ^
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
) h" p2 I4 z) N5 m& X (3)点击打开串口。
5 ~$ I8 A6 d1 g; ?- G- n
; Y* P* h# X( e, x4 V7 {
: G* |7 H! T. _4 f5 J: W/ E 图 23 X% @- n) n! j1 b1 m6 w
配置完串口之后,打开我们提供的代码。* f1 ]+ [8 C2 [* s: u& _9 V
; a1 F X: X4 N- c2 M# S; V (1)点击仿真按键。. B& \( d$ J: f
* t! \2 z/ q }
" r; Y" u1 r" m* m# V 图 3
( M3 @7 i3 r4 Y4 s% I/ H& { (2)点击运行代码。
1 k: d1 `4 ]) R3 q: `$ m; Q! i
! T7 ^6 x, ?) ^5 T& s
# D, k _4 d+ p' U
图 4
& D: s# Y7 O7 l" ^; j1 @4 z 完成之后,触摸一次触摸弹簧,串口调试助手就打印出一条信息,如下图所示。3 I( c8 m% Y9 {
, N/ S$ n8 O! b% ?3 \
' Y3 d0 o: u8 e7 r# w
图 5; x w0 r1 i- o; _
- N9 k1 t$ ]$ ?. _( o# r
# l- o0 C5 Y2 I8 _) ?1 T' c* e
6 w6 _7 H/ B! i0 d9 q; y5 P
文件下载请点击:
5_(100%开源)蓝牙心率防水运动手环_电容触摸.pdf
(645.65 KB, 下载次数: 0)
( ]/ q ~! y, c2 ]& e! R" b
% L/ d3 g; V3 m, @+ N |
|