tom 发表于 2012-11-18 17:38:07

[翻译]]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;
}

zx_1923 发表于 2012-11-18 19:53:28

顶一下:D:D:D:D
页: [1]
查看完整版本: [翻译]]Arduino自带范例Digital之Debounce