как сделать сухой контакт с серийным чтением один раз в каждом штате в Arduino - PullRequest
0 голосов
/ 23 ноября 2018

Я сделал этот код, и когда кнопка отпущена, открытое сообщение зацикливается, но когда я нажимаю кнопку «закрыть», сообщение не зацикливается

как я могу показать сообщение «открыто» один раз, не зацикливаясь... Я имею в виду, что когда кнопка отпущена, то сообщение об открытии отображается один раз?

Таким образом, когда кнопка отпущена, в последовательном порядке будет написано «открыто», а затем при нажатии кнопки «закрыто» в последовательном режиме.

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 голосов
/ 24 ноября 2018

Я получил то, что я хочу от кода, как это:

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

  }


 }
0 голосов
/ 24 ноября 2018

используйте флаг вместо 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();
}
...