Как переключить функции желоба нажатием кнопки в Wiring? - PullRequest
1 голос
/ 07 августа 2020

Я программирую кнопку, которая циклически переключает различные функции и не может заставить ее работать. Он всегда переходит к первому случаю в переключателе, но никогда не переходит ко второму. Я думал, что буду использовать «prevButtState», но потом подумал об этом способе кодирования, но это не работает, и я забыл, как я хотел это использовать: D

мой код:

#include "arduino.h"

int LED=13;
int butt=4;
int buttState=0;
int prevButtState=0; 
int counter=0;

void setup() {
pinMode(LED, OUTPUT);
pinMode(butt, INPUT);
}

void loop() {
    buttStatus();
    if (buttState==1){
        counter++;
    }
    switch(counter){
        case 1:
        digitalWrite(LED,HIGH);
        buttState=0;
        while(buttState==0){
        buttStatus();
        if (buttState==1){
        counter=2;
        }
        }
        break;
        case 2:
        digitalWrite(LED,LOW);
        buttState=0;
        while(buttState==0){
        buttStatus();
        if (buttState==1){
            counter=1;
            }
        }
        break;
    }
}

void buttStatus(){
    buttState=digitalRead(butt); 
}

1 Ответ

0 голосов
/ 08 августа 2020

Разобрался, как это сделать, я вообще не понял, как работает состояние переключателя в C ...

это рабочий код:

int LED=13;
int butt=4;
int buttState=0;
int currentButtState=0;
int prevButtState=0;
int counter=0;

void setup() {
pinMode(LED, OUTPUT);
pinMode(butt, INPUT);

}

void loop() {
    buttStatus();
    if (buttState==1){
        delay(25);
      buttStatus();
      if(buttState==0){
      currentButtState=prevButtState+1;
      }
    }else delay(100);
  
    switch(currentButtState){
        case 1:
        
        digitalWrite(LED,HIGH);
        prevButtState = currentButtState;
  
        break;
        case 2:
        digitalWrite(LED,LOW);
        prevButtState = 0;
        
        break;
    }
}

void buttStatus(){
    buttState=digitalRead(butt); 
}
...