[翻译]]Arduino自带范例Digital之Debounce
本帖最后由 迷你强 于 2012-11-18 21:51 编辑电路原理图:
/*
翻译:tom
时间:2012年11月18日
IDE版本号:1.01
发表地址:www.geek-workshop.com
翻译说明: 根据arduino自带的范例进行翻译,可能根据实际的需要略作修改
*/
/*
Debounce 防反跳
每次输入端从低电平至高电平(例原因是按纽按下),
输出端跟着从低至高或是从高至低.
这存在一个最小延时在两次按下防反跳电路.(例如 忽略杂声音)
电路和:
*LED 连接13号端至地线
*按纽连接2号端
*10K 电阻连接2号端至地线
* 备注: 在多数Arduion板,那里已经有一个LED在板上连接着13号端,所以你不需要任何额外的led为这个例子.
created 21 November 2006
by David A. Mellis
modified 3 Jul 2009
by Limor Fried
http://www.arduino.cc/en/Tutorial/Debounce
*/
// 不变常量
// 设置端口:
const int buttonPin = 2; // 定义buttonPin端口为2号数字端
const int ledPin = 13; // 定义发光二极管端口为13号
// 变量将改变
int ledState = HIGH; //设LED端输出状态ledState为高
int buttonState; // 当前按纽读取值buttonState从输入端口
int lastButtonState = LOW; //上次输入端的状态值lastButtonState为低
//下列变量是常整型因为时间,是毫秒级
//将会迅速变成一个很大的数字超过短整型的储存范围
long lastDebounceTime = 0;//在上次时间输出端被按下
long debounceDelay = 50; //防反跳时间:增加中频输出
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
//按纽按下时将值赋给reading
int reading = digitalRead(buttonPin);
//检查如果刚按下了按纽
//(例如 输入从低至高电平),你已经等待
//足够长自从上次按下至忽略任何杂声
//如果开关状态改变,由于噪声或按下
if (reading != lastButtonState) {
//重设双精度计时器
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
//无论读取是什么,它比防反跳时间长,
//所以认为它是有效电流
buttonState = reading;
}
//设置LED使用中的状态
digitalWrite(ledPin, buttonState);
//储存reading,下次通过循环,它就是上次按纽状态
lastButtonState = reading;
}
顶一下:D:D:D:D
页:
[1]