功能
串行监视器正在打印" 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);
}
答案 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);
}