|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电容触摸 $ u- r2 W3 R7 Y6 f
% c3 T' ]7 l1 D- r
$ C. C7 b- J \+ u' H% u5 ^- f6 Z; t1 l
1相关简介
6 l0 N/ }7 e7 F; x. k$ J0 S/ p b$ E% [5 S% r/ k% g% J# _
本次章节,我们将使用到 DA14580 的外部中断,通过触摸手环主板上面的小弹簧,触发中断。
2 L, B5 v- |6 A$ A- } B DA14580 内部有嵌套中断向量控制器( NVIC,Nested Vectored Interrupt Controller),支持 24 个中断,能够中断配置与处理异常代码。当发生一个中断请
( f$ M" p3 r/ H% p9 X 求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有 4 个不同的可编程的优先级,NVIC 自动处理嵌套中断。对于安全关键系统,又不可屏蔽中断(NMI,Non maskable interrupt)输入。0 {, F2 W6 b( u5 @9 C/ C* \- i
DA14580 内部还有一个键盘控制器,可以用于延时 GPIO 信号进入的时间。可以检测所有的 I/O 口的电平变化。当监测信号时,可以产生中断(KEYBR_IRQ)。同时,另外有 5 个中断(GPIOn_IRQ)可以被 GPIO 口触发。6 C* R/ r+ @1 x. z
2硬件设计. [& t, e. r& \4 j# L: |; ^
7 F3 e9 h& T; P3 @* b+ x* G 下面的就是本次使用的触摸按键,采用的是 RH6015,中断引脚连接到我们DA14850 的 P27 脚。
! ]9 X5 ^. x: F; p' f: _, n4 f, w |5 `4 Z4 ?" t O. ]' `
" `+ P' X( R) C T 图 1: ]0 f) T3 V4 s. [" Q0 k
RH6015 是一款内置稳压模块的单通道电容式触摸感应控制开关 IC,可以替代传统的机械式开关。当我们触摸到 RH1615 第三引脚前的触摸电容时,第一引脚会由高电平变成低电平。
# v2 U* T( p6 e6 T) C 3软件设计
) ?0 E) A; e" @; N8 ~( q
( D) ]2 E! [/ R3 a6 ^# Q* _ 本次软件,将完触摸一次按键,打印一次累计按键次数的现象。1 b1 ~: A Z2 [+ o, b0 }/ e3 u
4 {( h* x1 @) X2 E
整个实验代码,将使用到两个部分:串口和外部中断。关于串口的初始化配置,以及串口打印的相关函数,可以参考前面的章节,本章节只介绍外部中断的相关代码。
& `* k$ L/ h( I5 ^+ s* K0 P! H 要使用外部中断,就需要一下几个流程:* X& a' o+ m2 Q I* v
0 Y9 D) K) p$ G. @% j: Y
(1)配置要使用的 IO 口。
" m' c7 ~; I3 H) U9 z GPIO_ConfigurePin(BUTTON_PORT, BUTTON_PIN1, INPUT, PID_GPIO, false); 这里将 DA14580 的 P27 管脚设置为输入。/ P- L2 i* \4 \* u2 W4 ]
(2)注册中断回调函数。4 k1 S& O" z' X0 M9 n! I k N
GPIO_RegisterCallback(GPIO0_IRQn, button1_int_handler);/ f' p* y8 M. r' E! z* g0 i
这个注册中断回调函数有两个参数, 第一个参数是外部中断编号, 可以填写GPIO0_IRQn、GPIO1_IRQn、GPIO2_IRQn、GPIO3_IRQn 和 GPIO4_IRQn。第二个是回调函数的指针。
& z- l& }7 i+ c$ g (3)使能外部中断。
. m2 v8 j! o7 i5 g! q5 m GPIO_EnableIRQ( BUTTON_PORT, BUTTON_PIN1, GPIO0_IRQn, 1, 1, 10 );+ b4 Z0 K7 I! a3 G
# _% p( n1 \+ L* F$ Z6 P$ J
完成以上 3 步之后,每当手触摸到触摸弹簧,代码就会运行到回调函数
, N/ w+ k6 N. r: W/ L% A) y2 B6 B
button1_int_handler 之中。; K7 d" I! f, W3 O9 k$ K& W
void button1_int_handler(void)1 g" s+ g/ e2 S/ N" ~
1 Z _: H- i G7 ^% M {" _6 w6 w" ]8 t( g5 e' |
static unsigned char button_count=0; button_count++;
# G% v3 G$ }$ x; j% n+ Q printf_string("\r\n Number of key:"); printf_byte(button_count);
3 i: Y8 y+ ~5 E" o7 y }( |3 v- D) g+ G9 M
: u# v$ N# r6 p0 }* B
在中断函数 button1_int_handle ( ) 中, 首先定义了一个静态变量/ u6 B! ~; \& B+ Y1 y& S; Q5 H @
1 O1 {9 k( u+ a button_count,用于记录按键次数,进入一次外部中断,就将变量button_count 加 1,然后答应出换行符以及字符串 Number of key:,最后就打印出 button_count 的值。
- z) v: P7 K# \+ l. ~( a 4实验现象/ `+ v* _6 s. ^2 p! e
7 a: _5 P3 a: X; _ 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。; U. \2 a; m V: f/ Y3 z
! ^1 L, D/ F" z! r* J Q (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。4 I+ F' t: [) P- x+ ]4 y
) R$ {7 j7 V$ u
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。; ^6 g L! d3 A. A) v# e9 y! ]
(3)点击打开串口。
! n" t+ p% a" P! r. x9 r& k; O: J7 X) c1 b& J
; ~7 Q% }, Q. ^
图 2- S: S3 a) G( x$ k. X8 W( k
配置完串口之后,打开我们提供的代码。
6 U1 C3 e1 o0 d+ Q7 w( ]$ v
( K2 _& p ]. l5 e/ ]& _, I9 H! e3 G) I" U (1)点击仿真按键。
$ U* Y2 W; [5 K) f; g/ K; R" j# O/ C2 V8 ^1 D' w3 b8 E
# X4 B% J/ B! W' L; y3 B4 o 图 3- c& h: Q/ Y2 e, ?/ {0 z* ^
(2)点击运行代码。
& w' E) Y2 f$ _6 w& A
& I# ~) D' C; L* |+ {
- q b, X6 B; l# \( j/ C. @0 Z; C1 U 图 4) F: O9 V" f: ^; I7 K9 L: r- F
完成之后,触摸一次触摸弹簧,串口调试助手就打印出一条信息,如下图所示。0 N" q2 |5 R: i1 n+ k5 v/ L0 ~
5 o" [8 _' @6 u( F2 H$ [
8 Y0 i6 Q0 Q2 q0 q% I! M, @ 图 5
; ]+ u* p9 j5 G
$ k8 [' l. y* O$ q% U9 E+ S* Q
6 J% Z6 u: y- L! Z9 `* E1 f- X- }0 Q
" j! A, U7 [) T. s9 i1 Y7 M& C文件下载请点击:
5_(100%开源)蓝牙心率防水运动手环_电容触摸.pdf
(645.65 KB, 下载次数: 0)
& Z' e. T7 ]" @' A# T' Q! u/ v4 [. q* H# `: y3 T- ^
|
|