已解决 - 切换PIN,也触发Arduino中的其他引脚

我想知道。

我将Pin 6,7,8和9作为INPUT_PULLUP。我已经切换到彼此的针脚。为什么当我在PIN 6处按开关时。有时 PIN 7也会输入。其他情况下,当我按下开关7时,其他引脚也会触发。为什么?

这种情况是随机的。当我按下10次时,一切都很好,但在此之后其他引脚也会触发。另一种情况只需按4-5次,然后其他引脚也会触发。

我使用开关开关而不是临时开关。

如何解决这个问题?这是arduino常见的问题吗?

更新</强>

程序。 (简单程序)

int led1 = 1;
int led2 = 2;
int led3 = 3;
int led4 = 5;

int switch1 = 6;
int switch2 = 7;
int switch3 = 8;
int switch4 = 9;

int led = 13;

//int counter = 0;

void setup()
{
 //put your setup code here, to run once
      pinMode(led1, OUTPUT);
      pinMode(led2, OUTPUT);
      pinMode(led3, OUTPUT);
      pinMode(led4, OUTPUT);
      pinMode(switch1, INPUT_PULLUP);
      pinMode(switch2, INPUT_PULLUP);
      pinMode(switch3, INPUT_PULLUP);
      pinMode(switch4, INPUT_PULLUP);
      pinMode(led, OUTPUT);
}  
void loop()
{

if (digitalRead(switch1) == 0){
  digitalWrite(led1, HIGH);
  }

 if (digitalRead(switch1) == 1){
  digitalWrite(led1, LOW);
  } 

if (digitalRead(switch2) == 0){
  digitalWrite(led2, HIGH);
  }

 if (digitalRead(switch2) == 1){
  digitalWrite(led2, LOW);
  } 


if (digitalRead(switch3) == 0){
  digitalWrite(led3, HIGH);
  }

 if (digitalRead(switch3) == 1){
  digitalWrite(led3, LOW);
  } 


if (digitalRead(switch4) == 0){
  digitalWrite(led4, HIGH);
  }

 if (digitalRead(switch4) == 1){
  digitalWrite(led4, LOW);
  } 

digitalWrite(led, HIGH);

delay(1000);

digitalWrite(led, LOW);

}

示意图</强>

我的电路很简单,就像输入一样。仅用于输出led,电阻和地。

I found similar case http://www.instructables.com/id/Arduino-Push-Switch-Debouncing-Interrupts/

在网站上,他说,“这个设置的问题是什么时候   按下按钮,中断被多次调用   甚至切换其他按钮。为什么会这样?它是由   一个开关弹跳反馈。“

有没有修改硬件的解决方案?

SOLVE </强>

问题是电线。

我的开关电线是跨接电缆,彼此靠近(触摸)电缆。我试着分开,并且工作。没有其他引脚会被触发。

0
您的问题是“引脚2和3为INPUT_PULLUP”,但代码引脚2和3用作LED2和LED3的输出。请编辑问题并删除不一致。同时从问题标题中删除“中断”,因为它似乎与中断无关。
额外 作者 Martin C. Martin,
@Nateowami,我用代码和原理图更新了我的问题。你有这方面的经验吗?因为我认为它应该是Arduino的错误。
额外 作者 Reunanen,
@NickGammon我用代码和原理图更新了我的问题。你有这方面的经验吗?因为我认为它应该是Arduino的错误。
额外 作者 Reunanen,
@Nateowami我用万用表检查switch2和switch3,但没有连接。我用灯开关(开/关)不是临时开关。简单的问题:它应该是完美的工作,对吗?我也有不同的行为,当我打开时,其他灯也亮,不到1秒。查看我的视频 youtube.com/watch?v=s6CxPuQya0g
额外 作者 Reunanen,
@Majenko你是什么意思?我不明白。抱歉。
额外 作者 Reunanen,
@NickGammon我已经改变了我的帖子。
额外 作者 Reunanen,
我的问题解决了。谢谢大家。
额外 作者 Reunanen,
我建议阅读这篇文章 hackaday.com/2015/12/10/… (以及第一部分)。 Elliot涵盖了所有关于开关,开关噪声以及如何解决软件中的问题(去抖动)。
额外 作者 German,
丢失 delay(1000)
额外 作者 Majenko,
我的意思是,无论你在做什么,延迟总是一个坏主意 - 尤其是当你正在阅读开关并期望它们以正常方式响应时。
额外 作者 Majenko,
是什么是一个常见问题?没有原理图,也没有代码,你的问题没有任何实际意义。请阅读如何提出一个好问题?
额外 作者 Nick Gammon,
为什么我在PIN 2处按下开关。有时PIN 3也会输入。 - 在引脚2和引脚3上有 LED ,而不是开关。因此,你的问题没有任何意义。请编辑代码和原理图,这样至少有一些内部一致性。
额外 作者 Nick Gammon,
你可以张贴电路原理图或简单图吗?
额外 作者 Brett Ryan,
您是否检查过电线以确保led2和led3的电线不接触?如果他们触摸那可能会使他们有时点亮错误的那个。另外,检查switch2和switch3的电线。你用的是什么样的开关?
额外 作者 Brett Ryan,

1 答案

您可能会在按钮线之间切换噪音,这是低水平和短暂的,但没有去抖动,它可能足以引起您所看到的效果。

我建议1)编写一个简短的函数,去抖动并读取任何按钮; 2)使用if/else语句而不是测试每个按钮两次。

快速测试是在按下这两个按钮中的一个按钮时将一对导线靠近或彼此远离,并查看距离是否会改变效果。如果确实如此,你就找到了原因。

0
额外