本帖最后由 迷你强 于 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;
- }
复制代码
|