• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
BLYNK czas przytrzymania przycisku
#1
Może ktoś robił jakiś projekt z wykorzystaniem BLYNK? Mam taki problem. Uruchamiam przekaźnik przyciskiem. Chciałbym aby uruchamiał się jak przytrzyma się "wciśnięty" dłużej np. 2-3 sek. a nie gdy nawet chwilowo. Chodzi mi aby wyeliminować przypadkowe przyciśnięcie.
 
Odpowiedź
#2
Będzie trzeba użyć przerwania na zbocze, a w nim wpisać czas z funkcji millis() do zmiennej oraz ustawić flage.
Potem w pętli loop wstawić warunek, który będzie miał 3 składowe; czy przycisk wciąż jest wciśnięty, czy minęło już odpowiednio dużo czasu oraz czy flaga jest ustawiona.
Po wejściu do warunku, flage należy wyzerować żeby dalszy kod nie wykonywał się wielokrotnie podczas trzymania przycisku.
 
Odpowiedź
#3
(13-10-2020, 08:45)sebxx4 napisał(a): Będzie trzeba użyć przerwania na zbocze, a w nim wpisać czas z funkcji millis() do zmiennej oraz ustawić flage.
Potem w pętli loop wstawić warunek, który będzie miał 3 składowe; czy przycisk wciąż jest wciśnięty, czy minęło już odpowiednio dużo czasu oraz czy flaga jest ustawiona.
Po wejściu do warunku, flage należy wyzerować żeby dalszy kod nie wykonywał się wielokrotnie podczas trzymania przycisku.
Wielkie dzięki za odpowiedź. Jest tylko mały problem. Potraktowałeś mnie jak równego sobie a ja niestety jeszcze w pampersie Smile  Z Twojej podpowiedzi z moją wiedzą nie jestem w stanie sobie poradzić. Będę wdzięczny jak jeszcze mi poświęcisz trochę czasu i pomożesz. Pozdrawiam
 
Odpowiedź
#4
Kod:
#define INPUT_PIN 2 //Numer pinu Arduino (tylko piny obsługujące przerwania)
volatile unsigned long timer;
volatile bool flag = false;

setup(){
  pinMode(INPUT_PIN, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(INPUT_PIN), switch, FALLING); //Wyzwolenie przerwania poprzez zwarcie pinu INPUT_PIN do masy
}

void switch(){
  flag = true;
  timer = millis();
}

loop(){
  if(digitalRead(INPUT_PIN) == LOW && flag && millis() - timer > 2000){
    flag = false;
   
    //Tutaj wstaw kod do wykonania po przytrzymaniu (2s) przycisku

  }
}
 
Odpowiedź
#5
Dziękuje bardzo za podpowiedź i gotowca. Popróbuje i dam znać jak mi poszło. Pozdrawiam
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości