Arduino Button不是连续串行" 1"

时间:2016-08-23 04:07:30

标签: arduino arduino-uno

功能

串行监视器正在打印" 0"每隔100ms,表示buttonState为LOW。

然而,当用户按下红色圆顶按钮Red Dome Button时,假设发出buttonState为HIGH的信号,并且在串行监视器上,它应该是打印" 1"每隔100ms,直到用户再次按下红色圆顶按钮,表示buttonState为LOW并且串行监视器正在打印" 0"。

问题:

串行监视器正在输出" 0"最初每100毫秒,当我按下红色圆顶按钮时,buttonState返回HIGH并且在串行监视器上输出" 1"。然而,序列" 1"不会持有,它会恢复到" 0"立即

序列号" 1"只有当我连续按下按钮时才会显示在串行监视器中。

含义:

正确行为

初始状态 - >串行监视器将输出所有串行0,直到用户按下按钮,然后串行监视器将输出所有序列1,直到用户再次按下按钮,然后输出将变为串行0

当前行为

初始状态 - >串口监视器将输出所有串口0,直到用户按下按钮,然后串口监视器将输出串口1但是立即,串口将返回0

因此,如何在按下按钮后使串行状态保持在串行1,只有当我再次按下按钮时串口才会显示0?我需要一些帮助。谢谢

代码:

const int buttonPin = 2;     // the number of the pushbutton pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  Serial.begin(9600); // Open serial port to communicate 
 }

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    Serial.println("1");
  }
  else {
    Serial.println("0");
  }
 delay(100);
}

1 个答案:

答案 0 :(得分:1)

您的按钮在释放后似乎没有按下(不像2状态按钮)。因此,您需要创建自己的状态变量,以便在按下按钮时切换。

假设您想要从按钮检测到HIGH时更改状态。这意味着您必须检测从LOW到HIGH的变化,而不仅仅是它处于HIGH模式。所以要做到这一点,你需要存储按钮的最后状态。此外,当检测到从LOW变为HIGH时,您需要保持一个切换的输出状态。

在您的代码中应该是这样的:

const int buttonPin = 2;     // the number of the pushbutton pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status
int buttonLastState = 0;
int outputState = 0;


void setup() {
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  Serial.begin(9600); // Open serial port to communicate 
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  // Check if there is a change from LOW to HIGH
  if (buttonLastState == LOW && buttonState == HIGH)
  {
     outputState = !outputState; // Change outputState
  }
  buttonLastState = buttonState; //Set the button's last state

  // Print the output
  if (outputState)
  {
     Serial.println("1");
  }
  else
  {
     Serial.println("0");
  }
  delay(100);
}