基于LinkIt one的Arduino编程学习-按键操作
2017-07-22 02:03
218 查看
根据Arduino官方的例子实现的:
这种实现没有考虑到消除按键的硬件抖动即消抖,会出现这种情况:
(后补图)
根据消抖的英文关键词Debounce,搜索到已经有库实现了软件消抖,名字叫Bounce2。链接地址:
const int PIN_KEY_CARD = 2; const int PIN_KEY_RETURN = 3; // LinkIt one SDK没有实现该方法,这里需要手动实现 int digitalPinToInterrupt(int pin) { int num = -1; switch(pin) { case PIN_KEY_CARD: num = 0; break; case PIN_KEY_RETURN: num = 1; break; } return num; } void setup() { Serial.begin(9600); pinMode(PIN_KEY_CARD, INPUT_PULLUP); pinMode(PIN_KEY_RETURN, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(PIN_KEY_CARD), onCardKeyEvent, FALLING);//当int.0电平改变时,触发中断函数blink attachInterrupt(digitalPinToInterrupt(PIN_KEY_RETURN), onReturnKeyEvent, FALLING);//当int.0电平改变时,触发中断函数blink } void loop() { // put your main code here, to run repeatedly: Serial.println("..."); delay(1000 * 1); } void onCardKeyEvent() { Serial.println("onCardKeyEvent"); } void onReturnKeyEvent() { Serial.println("onReturnKeyEvent"); }
这种实现没有考虑到消除按键的硬件抖动即消抖,会出现这种情况:
(后补图)
根据消抖的英文关键词Debounce,搜索到已经有库实现了软件消抖,名字叫Bounce2。链接地址:
// Detect the falling edge // Include the Bounce2 library found here : // https://github.com/thomasfredericks/Bounce-Arduino-Wiring #include <Bounce2.h> // Instantiate a Bounce object : Bounce debouncer1 = Bounce(); // Instantiate a Bounce object : Bounce debouncer2 = Bounce(); const int PIN_KEY_CARD = 2; const int PIN_KEY_RETURN = 3; void setup() { Serial.begin(9600); pinMode(PIN_KEY_CARD, INPUT_PULLUP); pinMode(PIN_KEY_RETURN, INPUT_PULLUP); // After setting up the button, setup the Bounce instance : debouncer1.attach(PIN_KEY_CARD); debouncer1.interval(50); // interval in ms // After setting up the button, setup the Bounce instance : debouncer2.attach(PIN_KEY_RETURN); debouncer2.interval(50); // interval in ms } void loop() { // Serial.println("loop"); // Update the Bounce instance : debouncer1.update(); debouncer2.update(); // Call code if Bounce fell (transition from HIGH to LOW) : if ( debouncer1.fell() ) { Serial.println("debouncer1"); } // Call code if Bounce fell (transition from HIGH to LOW) : if ( debouncer2.fell() ) { Serial.println("debouncer2"); } } void onCardKeyEvent() { Serial.println("onCardKeyEvent"); delay(50); // 50ms works for most switches - adjustable } void onReturnKeyEvent() { Serial.println("onReturnKeyEvent"); delay(50); // 50ms works for most switches - adjustable }
相关文章推荐
- K60学习笔记四:按键的多种操作
- [FileIO]C语言中流与文件操作编程学习
- 【算法学习】AVL平衡二叉搜索树原理及各项操作编程实现(C++)
- Java多线程编程--(6)学习Java5.0 并发编程包--原子操作的一些类型
- linux shell编程学习--字符串的使用和操作
- JAVA并发编程学习笔记之CAS操作
- Android学习指南之三十八:Android手势操作编程[转]
- QTP深入学习----对象库编程的操作流程
- linux编程学习--常见文件目录操作
- UNIX环境编程---------原始套接字学习笔记-----原始套接字的bind操作
- 用VisualStudio2010学习WCF服务编程总结(1)操作重载
- 10.C#编程学习——按键捕获并退出
- 学习《OpenCV 2 计算机视觉编程手册》第二章遍历图像和领域操作实例——对图像进行锐化
- arduino学习系列——按键控制LED灯
- 轻松学习JavaScript二十二:DOM编程学习之节点操作
- 轻松学习JavaScript二十三:DOM编程学习之操作表格
- Arduino学习笔记—Arduino编程基础
- 【Python学习笔记】IO编程:操作文件和目录
- 【算法学习】AVL平衡二叉搜索树原理及各项操作编程实现(C++)
- Arduino 各种模块篇 [留个小任务,现在去学习python 网络编程]