我执行了这段代码,当释放按钮时,打开消息处于循环中,但是当我按下按钮时,“关闭”消息保持不循环
如何一次不循环显示“打开”消息...我的意思是当释放按钮时,“打开”消息显示一次?
因此,当释放按钮时,将串行写入“打开”,然后在按下按钮时将串行写入“关闭”。
int Switch = 2;
int buttonState; // current state of the button
int lastButtonState = 1; // previous state of the button
void setup()
{
Serial.begin(9600);
pinMode(Switch, INPUT);
Serial.begin(9600);
}
void loop()
{
buttonState = digitalRead(Switch);
if (digitalRead(Switch) == LOW && buttonState == lastButtonState) {
Serial.println("Open");
delay(100);
}
if (digitalRead(Switch) == HIGH && buttonState != lastButtonState){
Serial.println("Close");
}
lastButtonState = buttonState;
}
答案 0 :(得分:0)
使用标志代替lastButtonState! 例如:
int flag=0; //global
void loop(){
if(digitalRead(Switch) == LOW && flag==0){
flag=1;
}
else if(digitalRead(Switch)==HIGH && flag ==0){
flag=2;
}
if(flag==1){
//print whatever you want
flag=0;
}
else if(flag==2){
//print the second case
flag=0;
}}
同样,读取这样的按钮状态也不是一个好习惯。因为按钮将被按下异步到系统,所以您应该谴责它们。
if(digitalRead(SWITCH)==LOW){
delay(40);
if(digitalRead(SWITCH)==LOW)
changeButtonState();
}
答案 1 :(得分:0)
我从这样的代码中得到了想要的东西:
int Switch = 2; //Pin for sensor switch
int buttonState; // current state of the button
int lastButtonState = 0; // previous state of the button
void setup()
{
Serial.begin(9600);
pinMode(Switch, INPUT);
Serial.begin(9600);
}
void loop()
{
buttonState = digitalRead(Switch);
if (digitalRead(Switch) == HIGH && buttonState != lastButtonState) {
Serial.println("open");
delay(180);
}
lastButtonState = buttonState;
if (digitalRead(Switch) == LOW && buttonState == 1){
Serial.println("Close");
delay(200);
}
}