|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 电容触摸
, l1 |' Z X& w& U* R5 Q2 L, D/ G7 Q) W+ l# g
- \. Z# v' L4 ` f: n' a, R2 @: Z+ p9 C9 t2 h
1相关简介
' P) y+ y/ a, B1 m9 W/ A* k8 j+ F* T9 F- X0 \' G; H
本次章节,我们将使用到 DA14580 的外部中断,通过触摸手环主板上面的小弹簧,触发中断。
; Z3 u; K/ h. d* V+ Q( n L% e' X DA14580 内部有嵌套中断向量控制器( NVIC,Nested Vectored Interrupt Controller),支持 24 个中断,能够中断配置与处理异常代码。当发生一个中断请
4 u& I* i% c$ o4 N, @: U 求时,自动执行对应的中断函数,不需要软件确定异常向量。中断可以有 4 个不同的可编程的优先级,NVIC 自动处理嵌套中断。对于安全关键系统,又不可屏蔽中断(NMI,Non maskable interrupt)输入。
3 t, s! i" ^. n. C7 B7 w8 ]' ?% X/ Y4 f DA14580 内部还有一个键盘控制器,可以用于延时 GPIO 信号进入的时间。可以检测所有的 I/O 口的电平变化。当监测信号时,可以产生中断(KEYBR_IRQ)。同时,另外有 5 个中断(GPIOn_IRQ)可以被 GPIO 口触发。
1 d# b0 V9 H9 D0 O) y 2硬件设计$ ~# q X0 Q6 @& o
! l& w9 d4 ]8 k 下面的就是本次使用的触摸按键,采用的是 RH6015,中断引脚连接到我们DA14850 的 P27 脚。$ J: x" Z O* F9 ^# s4 c. @
5 f" W4 [6 S; M x" T' p5 {
: ?1 Z2 l) s9 k' T- c 图 1
3 y* |7 ~" Z, |" \# v2 Y RH6015 是一款内置稳压模块的单通道电容式触摸感应控制开关 IC,可以替代传统的机械式开关。当我们触摸到 RH1615 第三引脚前的触摸电容时,第一引脚会由高电平变成低电平。 R2 m- ^- [, {. }+ X, g7 c q
3软件设计% y6 }+ v8 G, |! x5 @
7 \1 l* Z5 ~6 I 本次软件,将完触摸一次按键,打印一次累计按键次数的现象。
* c$ v( R" e& A3 {' a7 j7 l6 B$ I8 r ?, x/ H7 {( h& X
整个实验代码,将使用到两个部分:串口和外部中断。关于串口的初始化配置,以及串口打印的相关函数,可以参考前面的章节,本章节只介绍外部中断的相关代码。
4 R7 p* M" l; ?5 x 要使用外部中断,就需要一下几个流程:1 I" U! G# v% _9 P
# y3 }& Q$ Y3 s% d (1)配置要使用的 IO 口。
# l5 Z, c4 F- x2 ^" z+ H/ O GPIO_ConfigurePin(BUTTON_PORT, BUTTON_PIN1, INPUT, PID_GPIO, false); 这里将 DA14580 的 P27 管脚设置为输入。
" k$ p: O3 F* ]1 F$ } (2)注册中断回调函数。7 m9 r! I! k# D% X
GPIO_RegisterCallback(GPIO0_IRQn, button1_int_handler);3 ?1 j! S8 ?* z3 R0 [
这个注册中断回调函数有两个参数, 第一个参数是外部中断编号, 可以填写GPIO0_IRQn、GPIO1_IRQn、GPIO2_IRQn、GPIO3_IRQn 和 GPIO4_IRQn。第二个是回调函数的指针。+ p# a* y# T# V m8 d: ?
(3)使能外部中断。
' `' S& \% r/ Z# ~+ H* s% Y GPIO_EnableIRQ( BUTTON_PORT, BUTTON_PIN1, GPIO0_IRQn, 1, 1, 10 );
7 n6 \/ e7 @' V, N: x7 v# O' Q, Z! L+ O" I
完成以上 3 步之后,每当手触摸到触摸弹簧,代码就会运行到回调函数# t# o) P# L" Y; n6 T$ [
* L4 J9 l) R0 k- ]
button1_int_handler 之中。$ a; e( @# { a4 G- d& x! k
void button1_int_handler(void)
0 ? m7 H" Z1 Y( e2 E k& p( X1 K* ^( v% L( r: L; h7 _
{, u& _& y$ G) ^: r" @: Z; S, M" O
static unsigned char button_count=0; button_count++;
) V" X1 T, B8 Z+ v1 I0 ?" g printf_string("\r\n Number of key:"); printf_byte(button_count);
( _6 [0 |4 B6 L# n, S# g# t }/ _' Y, P3 n9 J* n+ e
; k: Q! q8 v z
在中断函数 button1_int_handle ( ) 中, 首先定义了一个静态变量" ?% J1 t( x! x* L; J/ }/ M
1 ~% |/ h/ }( I' G* n
button_count,用于记录按键次数,进入一次外部中断,就将变量button_count 加 1,然后答应出换行符以及字符串 Number of key:,最后就打印出 button_count 的值。" ^) r% P) P" E9 n
4实验现象
0 V' H+ j5 y" f8 }; F! A6 o; K8 M& Y( v. b9 s1 Q! G
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。2 e" z- u. h8 K1 h% n3 j% E
$ [- S* ~; ^( Z (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
0 i& q8 m3 v3 \' [$ ]5 a) M7 ^9 X& V: t( z# D Q2 I9 _
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
* p3 V3 Q2 X( I7 } (3)点击打开串口。
2 M" y+ z) y8 }9 g! D0 L$ x/ p
- y# J% \" f6 r0 j
- e9 \' e$ @0 }' n: I. d 图 2; ~0 d+ k3 o7 w
配置完串口之后,打开我们提供的代码。
9 ~6 |, Y; ?+ J |6 ~
& l3 I$ ?: g, \) [0 t8 f (1)点击仿真按键。
; n& F% ^" h+ ?( d, f6 c' z
+ ~# n7 _' l+ r2 w" Q
. q/ A! P# T$ n+ u* ~0 i P5 z 图 3' T- L1 k( S! p1 J2 C
(2)点击运行代码。
% ^& [* x# e1 R0 s$ B! W2 E/ p) d- Y; \; K8 ~4 j# p
! x- l% {9 i3 _% i' D
图 4
: u8 P7 A- i# G) x 完成之后,触摸一次触摸弹簧,串口调试助手就打印出一条信息,如下图所示。
' ^* a* R: {& ?/ |4 F; I! x3 l! w. K2 A$ K% |
, v+ U! { z- w' |' l% [' S
图 5
9 c, Y1 O! {! [( c# \( B& o
" N% z/ h2 p# D+ y H, o$ [1 i/ n# J+ {' I6 l. t5 z% c2 L
$ u }( V- f' k( g* L0 O文件下载请点击:
5_(100%开源)蓝牙心率防水运动手环_电容触摸.pdf
(645.65 KB, 下载次数: 0)
& e. j1 }1 t9 a8 m7 Z: ~; A
, U& E# H1 N6 N% _ H+ t% u |
|