• 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
Przycisk 3 funkcyjny
#1
Kod:
uint8_t odczyt_SW = digitalRead(SW_);     //Odczyt stanu przycisku do zmiennej  GPIO 0
 if (odczyt_SW != ostatni_stan_SW) {
   SW_Time = millis();
 }
 ostatni_stan_SW = odczyt_SW;              // zapisywanie  odcztanej wartosci stanu przyciku

 if ((millis() - SW_Time) > 100 ) {        // warunek czasu krotkiego nacisniecia drganie stykow
   if (odczyt_SW != stan_short_SW) {
     stan_short_SW = odczyt_SW;
     if (stan_short_SW == LOW) {           // Jesli przycisk jest wcisniety (stan niski)
        // akcja krótkiego przyciskania
       }

     }
   }

   if ((millis() - SW_Time) > 1000) {
     if (odczyt_SW != stan_long_SW) {
       stan_long_SW = odczyt_SW;
       if (stan_long_SW == LOW) {
         // akcja długiego przyciskania

       }
     }
   }
 }
}

Macie może pomysł jak to przerobić, bo w tej chwili jes tak krótkie naciśniecie=akcja, długie naciśniencie= akcja a przydało by się jeszcze dwuklik= akcja ??

Nic mi do głowy nie przychodzi, dodatkowe wejście nie wchodzi w rachubę.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#2
Timer, sprawdzac czy drugie wcisniecie miesci sie w czasie ustalonym..proste

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#3
Wstrzymaj się z wykonaniem akcji o kolejny okres po puszczeniu przycisku, jeśli się nie ponowi to realizujesz klik, jak się ponowi to double. Albo gotowiec: https://github.com/marcobrianza/ClickButton.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#4
Kod:
 uint8_t odczyt_SW = digitalRead(SW_);     // Odczyt stanu przycisku do zmiennej  GPIO 0
 if (odczyt_SW != ostatni_stan_SW) {       // jezeli wykryto inny stan wlacz odliczanie
   SW_Time = millis();
 }
 ostatni_stan_SW = odczyt_SW;              // zapisywanie  odcztanej wartosci stanu przyciku

 if ((millis() - SW_Time) > 50 ) {         // warunek czasu minimalnego krotkiego nacisniecia drganie stykow
   if (odczyt_SW != stan_short_SW) {
     stan_short_SW = odczyt_SW;
     if (stan_short_SW == LOW) {           // jesli przycisk jest wcisniety (stan niski)
       klik_SW_Time=millis();              // odliczanie czasu na drugie przycisniecie (podliczenie licznika)
       data_klik_SW++;                     // licznik przycisnienc
       klik_SW=true;                       // przelacznik zadzialania licznika
     }
   }
 }

 if ((millis() - klik_SW_Time) > 500 && odczyt_SW == HIGH){ // czas na podliczenie licznika przycisniec po puszczeniu przycisku
   if (klik_SW == true){                   // sprawdzanie  czy byl uruchomiony licznik przycisniec SW
     if (data_klik_SW == 1){               // jezeli raz przycisnieto

       //////// akcja jednego przycisniecia
       }
     }
     if (data_klik_SW == 2){               // jezeli przycisnieto dwa razy

       //////// akcja dwuklika
       
     }
       klik_SW = false;                    // wylaczenie podliczenie licznika
       data_klik_SW = 0;                   // zresetowanie licznika przycisku
        ///  akcja ogolna
   }

   
 if ((millis() - SW_Time) > 2000) {       // warunek czasu na przycisniecie długie
   if (odczyt_SW != stan_long_SW) {
     stan_long_SW = odczyt_SW;
     if (stan_long_SW == LOW) {           // jezeli przycisk wcisniety ponad 2s
       klik_SW = false;                   // wylaczenie podliczenie licznika
       data_klik_SW = 0;                  // zresetowanie licznika przycisku

       /// akcja długiego trzymania przycisku

     }
   }
 }
Takie coś skleiłem  Shy
Minimalne klikniecie to 50ms  przerwa miedzy kliknięciami to max 500ms  z tym ze drugie nie może przekraczać 2s  bo uwzględni to jako 3 funkcje przycisku 
Po menu mi się łatwiej teraz poruszać bo mam do przodu do tyłu i zatwierdzenie
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości