我有一个简单的Arduino项目,2个按钮,面对一个奇怪的情况,在按钮的开始状态为0,但点击按钮后释放状态变为1很长一段时间然后回到0,请问什么是错的?
代码:
int const BTN1_PIN=2;
int const BTN2_PIN=4;
void setup(){
pinMode(BTN1_PIN, INPUT);
pinMode(BTN2_PIN, INPUT);
Serial.begin(9600);
}
void loop(){
int status1=digitalRead(BTN1_PIN);
Serial.print("BTN1 Status :");
Serial.println(status1);
int status2=digitalRead(BTN2_PIN);
Serial.print("BTN2 Status :");
Serial.println(status2);
delay(250);
}
在开始时,价值观是:
BTN1状态:0
BTN2状态:0
。
点。
但是点击button1并释放button1的状态需要很长时间才能回到0,输出如下:
BTN1状态:1
BTN2状态:0
BTN1状态:1
BTN2状态:0
BTN1状态:1
BTN2状态:0
BTN1状态:1
BTN2状态:0
BTN1状态:1
BTN2状态:0
BTN1状态:1
BTN2状态:0
BTN1状态:1
BTN2状态:0
BTN1状态:1
BTN2状态:0
BTN1状态:0
BTN2状态:0
BTN1状态:0
BTN2状态:0
BTN1状态:0
BTN2状态:0
BTN1状态:0
BTN2状态:0
BTN1状态:0
BTN2状态:0
答案 0 :(得分:0)
您的设计存在的问题是,当没有按下按钮时,您的I / O引脚未连接任何东西。这导致他们的价值观有点漂浮"浮动"它们意味着它们会在1和0之间跳转。通常,您可以通过高阻值电阻(即10K欧姆)将I / O引脚直接连接到+ 5v,然后通过按钮将I / O引脚连接到地。这样,当你在没有按下按钮的情况下读取引脚时,你会得到一个坚固的+ 5v(由于电阻而几乎没有任何电流),但当你按下按钮时,你会短路接地(通过电阻)并得到一个固体0v。这给你一个非常干净的" on"和"关"按下的按钮状态为0v。
Arduinos很酷,因为它们在电路板本身内置了+ 5v的电阻。您只需使用pinMode(pinBUTTON, INPUT_PULLUP);
启用它们即可。我已经包含了电路布局应该在上面的设计。
使用arduinos时要记住的一件重要事情是,您始终必须设置pinModes。这是一个容易忘记的步骤,而arduino将会有一种"没有它的工作,但它是你项目中奇怪结果的常见来源。
const int pinBUTTONONE = 2;
const int pinBUTTONTWO = 4;
void setup(){
pinMode(pinBUTTONONE, INPUT_PULLUP);
pinMode(pinBUTTONTWO, INPUT_PULLUP);
}
void setup(){
if(digitalRead(pinBUTTONONE) == LOW){
// Execute button one pressed code.
}
if(digitalRead(pinBUTTONTWO) == LOW){
// Execute button two pressed code.
}
}