新手请教个小问题(已解决)软件消抖-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5683|回复: 9

新手请教个小问题(已解决)软件消抖

[复制链接]
发表于 2012-11-12 21:40 | 显示全部楼层 |阅读模式
本帖最后由 EthanWain 于 2012-11-14 20:27 编辑

本人新手,今天刚拿到arduino,想做一个按一下微控开关,led亮,再按一下led灭的实验,代码如下写入后,有时按几下按钮led才会有反应,请问是怎么回事。
void setup ()
{
  pinMode(4,INPUT);                 
  pinMode(13,OUTPUT);
}
void loop()
{
  int i = digitalRead(4);
  int n = digitalRead(13);
  if (i==HIGH&&n==LOW)
  {
    digitalWrite(13,HIGH);
  }
  else if  (i==HIGH&&n==HIGH)
  {
    digitalWrite(13,LOW);
  }
}


补充,用了串口监视器才发现我按下按钮的时候貌似执行了很多次开关命令。。。


原来是需要软件消抖,下面是重新修改后的代码

[mw_shl_code=c,true]void setup ()
{
  pinMode(2,INPUT);                 
  pinMode(13,OUTPUT);
  Serial.begin(9600);


}
void loop ()
{
    if (digitalRead(2)==HIGH&&digitalRead(13)==LOW)
  {
   digitalWrite(13,HIGH);
    Serial.print("Turn on the LED");
    while (digitalRead(2)==HIGH)
    {
    delay(1);
    }
  }
  else if  (digitalRead(2)==HIGH&&digitalRead(13)==HIGH)
  {
    digitalWrite(13,LOW);
    Serial.print("Turn off the LED");
    while (digitalRead(2)==HIGH)
    {
    delay(1);
    }
  }
}[/mw_shl_code]


发表于 2012-11-13 05:43 | 显示全部楼层
可能是按键抖动的原因。
发表于 2012-11-13 09:19 | 显示全部楼层
pinMode(13,OUTPUT);
引脚13设置成输出模式
digitalRead(13);
读不到数据吧
 楼主| 发表于 2012-11-13 09:22 | 显示全部楼层
littlemousehao 发表于 2012-11-13 09:19
pinMode(13,OUTPUT);
引脚13设置成输出模式
digitalRead(13);

数据倒是能读到,但是当我按下按钮的时候貌似执行很多次开关命令,松开按钮的时候就不一定是亮灯或者关灯了。。
发表于 2012-11-13 09:36 | 显示全部楼层
把  pinMode(4,INPUT); 改为  pinMode(4,INPUT_PULLUP);      

点评

回去试了一下,还是不行,貌似还是按下按钮的同时开关次数太多。。。  发表于 2012-11-13 14:27
发表于 2012-11-13 09:46 | 显示全部楼层
我还是有点小疑问,为什么引脚13设置成输出模式,还能读到数据?
 楼主| 发表于 2012-11-13 10:41 | 显示全部楼层
奈何col 发表于 2012-11-13 09:36
把  pinMode(4,INPUT); 改为  pinMode(4,INPUT_PULLUP);

原来如此。。。
 楼主| 发表于 2012-11-13 10:43 | 显示全部楼层
littlemousehao 发表于 2012-11-13 09:46
我还是有点小疑问,为什么引脚13设置成输出模式,还能读到数据?

digitalRead应该是读取当前针脚电平状态。
发表于 2012-11-13 15:22 | 显示全部楼层
EthanWain 发表于 2012-11-13 10:43
digitalRead应该是读取当前针脚电平状态。

加消抖电路~理论上不会那么明显,你最好换个开关试试,是不是开关的问题
 楼主| 发表于 2012-11-13 15:31 | 显示全部楼层
奈何col 发表于 2012-11-13 15:22
加消抖电路~理论上不会那么明显,你最好换个开关试试,是不是开关的问题 ...

哦。。明白了 好像的确是需要消抖。能否用程序控制pin4开关按下时的读取延迟?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-27 07:39 , Processed in 0.103368 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表