Arduino 按钮状态不会保持低电平

Arduino buttonstate not staying low

尝试按照下面的代码将一个简单的开关连接到 arduino,以用于模型火车组。当 buttonState 很高时,Serial.print(buttonState) 显示 111111111,但是我遇到的问题是当 buttonState 应该很低时 Serial.print(buttonState) 像这样在 0 和 1 之间“闪烁”.. 000111100000101000111001.

它为什么这样做以及如何阻止它?我以为是连接问题,但当我只是在 2 个端口之间使用一根电线时,将其插入以打开并拔出以关闭,我仍然遇到此问题。

int RED=6;
int YELLOW=5;
int GREEN=3;
int relaytrig = 10; //trigger on pin 10
int powertoswitch = 9; //powertoswitch
int buttonPin = 12; //switch the button comms with
int buttonState = 0; 

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
    //inputs
//switch input
pinMode(buttonPin,INPUT);

    //outputs
//powerforswitch
pinMode(powertoswitch,OUTPUT);
//track power
pinMode(relaytrig, OUTPUT);
//signal outputs
pinMode(RED,OUTPUT);
pinMode(YELLOW,OUTPUT);
pinMode(GREEN,OUTPUT);

}


void loop() {
  // put your main code here, to run repeatedly:
digitalWrite(powertoswitch,HIGH);
buttonState = digitalRead(buttonPin);
  
  if (buttonState == HIGH){
  digitalWrite(relaytrig,LOW);
  digitalWrite(GREEN,LOW);
  digitalWrite(RED,HIGH);
  digitalWrite(YELLOW,LOW);
  Serial.print(buttonState);
  }
 else if(buttonState == LOW){
  digitalWrite(relaytrig,HIGH); 
  digitalWrite(GREEN,HIGH);
  digitalWrite(RED,LOW);
  digitalWrite(YELLOW,LOW);
  Serial.print(buttonState);
}
}

拔下它会使输入引脚悬空,噪声等可以使悬空输入引脚取任何值。

根据您的连接,您需要在引脚上设置一个下拉或上拉电阻,以便在未连接任何东西时将其设置为 1 或 0。

根据代码,我假设开关线介于 5V(或某些 Arduinos 的 3.3V)和输入引脚之间。如果我是对的,您需要在该输入引脚与地之间放置一个 10K 电阻。当没有连接电线时,这将使其保持为 0。

顺便说一句,您正在使用 IO 引脚(9 又名 powertoswitch)为开关提供正极;没有必要也不应该。

将开关的一端连接到 5V(或某些 Arduino 的 3.3V),另一端连接到输入引脚。将输入引脚与电阻接地 (GND)。

有图here,但是他们用2脚作为输入脚,你用12脚

此外,您的按钮或电线可能需要去抖动,但那是另一回事。