如何在Arduino的每种状态下一次与串行读取进行干接触

时间:2018-11-23 16:18:02

标签: arduino-uno

我执行了这段代码,当释放按钮时,打开消息处于循环中,但是当我按下按钮时,“关闭”消息保持不循环

如何一次不循环显示“打开”消息...我的意思是当释放按钮时,“打开”消息显示一次?

因此,当释放按钮时,将串行写入“打开”,然后在按下按钮时将串行写入“关闭”。

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;

   }

2 个答案:

答案 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);

  }


 }