作者yuleen123 (.......................)
看板Electronics
标题Re: [请益] arduino Leonardo 当开关使用
时间Fri Apr 24 18:12:24 2020
※ 引述《mOuOm (mOuOm)》之铭言:
: 我的开关设计很特别,当开关被按下不放时会模拟键盘送出某个特定按键讯号到电脑,类似usb keyboard的方式,这个目前都没问题
: 我是用digitalread来读取2号数位针脚有没有接地的方式达成
: 但是想请教这边的大神,有没有方法可以在按下控制器按键时仅触发一次,但是在控制器弹起时不会送讯号到电脑,直到下次在被按压时才会再次触发,想来想去还是没有想到合适的方法,目前先用delay时间来控制
: 更新一下
: 後来用了其他写法来达成我的需求,目前运作没毛病,但偶尔在放开开关时会出现按压的情况
: 不确定是不是线路杂讯造成
: 我开关设置距离较远,目前用网路线加上微动开关连接pin2跟GND来当作开关
因为开关讯号会有弹跳的情况, 像下图这样
https://i.imgur.com/7KNPedn.png
如果在硬体上没有对讯号做滤波的话, 就要在软体中加上 debounce 处理
#define DEBOUNCE_TIME 3
int pin_state[DEBOUNCE_TIME];
void setup()
{
int init_state = digitalRead(2);
for(int i = 0; i < DEBOUNCE_TIME; i++)
pin_state[i] = init_state;
}
void main()
{
int new_state = digitalRead(2);
int debounce_result = 0;
for(int i = 0; i < DEBOUNCE_TIME-1; i++) {
pin_state[i] = pin_state[i+1];
debounce_result += pin_state[i];
}
pin_state[DEBOUNCE_TIME-1] = new_state;
debounce_result += new_state;
if(debounce_result == 0) {
// 连续 DEBOUNCE_TIME 次读到 0(LOW) 才做处理
// 送出 keyboard 讯号
}
// 每 10ms 读取一次讯号
delay_ms(10);
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.38.58.253 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Electronics/M.1587723146.A.7FD.html