Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino开关按钮_Arduino - Fatal编程技术网

Arduino开关按钮

Arduino开关按钮,arduino,Arduino,我有一个简单的Arduino项目,2个按钮和面对一个奇怪的情况,在开始状态的按钮是0,但在点击按钮和释放状态变成1很长一段时间后,然后回到0,请什么是错误的 代码: 在开头,值是: BTN1状态:0 BTN2状态:0 . . 但点击按钮1并释放按钮1后,需要很长时间才能返回到0,输出如下: BTN1状态:1 BTN2状态:0 BTN1状态:1 BTN2状态:0 BTN1状态:1 BTN2状态:0 BTN1状态:1 BTN2状态:0 BTN1状态:1 BTN2状态:0 BTN1状态:1 BTN

我有一个简单的Arduino项目,2个按钮和面对一个奇怪的情况,在开始状态的按钮是0,但在点击按钮和释放状态变成1很长一段时间后,然后回到0,请什么是错误的

代码:

在开头,值是:
BTN1状态:0
BTN2状态:0
.
.

但点击按钮1并释放按钮1后,需要很长时间才能返回到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

您的设计存在的问题是,当没有按下按钮时,您的I/O引脚没有连接到任何东西。这导致它们的值有点“浮动”,这意味着它们在1和0之间跳跃。通常,您会通过高值电阻器(即10K欧姆)将I/O引脚直接连接到+5v,然后通过按钮将I/O引脚连接到接地。这样,当您在不按下按钮的情况下读取引脚时,您会得到+5v的固态电压(由于电阻器的原因,几乎没有任何电流),但当您按下按钮时,您会对地短路(通过电阻器)并获得固态0v。这将为您提供一个非常干净的“开”和“关”,其中您按下的按钮状态为0v

Arduinos很酷,因为它们在主板上内置了+5v的电阻。您只需使用
pinMode(pinBUTTON,INPUT\u 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.
  }
}

现在我不能拍照了,因为我离开了膝盖,但是代码中有错误吗?
readDigit()
看起来像什么?这是简单的
digitalRead()
?你的地面似乎与任何东西都没有联系。另外,您是否尝试过使用输入上拉(例如,
pinMode(BTN1\u PIN,INPUT\u PULLUP);
)?它是digitalRead,但我错写了ReadDigital。在上拉/下拉电阻上读——上面的链接很有用,谢谢(蒂姆·卡瓦诺),我已经解决了这个问题,我在输入引脚(2和GND)之间添加了其他电阻100oh以及输入引脚(4和GND)之间。
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.
  }
}