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脚
此外,您的按钮或电线可能需要去抖动,但那是另一回事。
尝试按照下面的代码将一个简单的开关连接到 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脚
此外,您的按钮或电线可能需要去抖动,但那是另一回事。