Przycisk/Button z dodatkowymi zdarzeniami (wielokliki, przytrzymanie i inne)

Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

bigthomas pisze: czw lis 26, 2020 9:50 pm A czy jest możliwość aby po jednorazowym naciśnięciu przycisku przekaźnik uruchomił się X razy?
Czyli przycisk wysyłał by akcję włącz/wyłącz X razy do przekaźnika.
:)
Możesz to też osiągnąć wykorzystując klasę Supla::Triggerable

Kod: Zaznacz cały

enum customActions {AKCJA_1};
class customActionsClass : public Supla::Triggerable {
  public: customActionsClass(){};
  void runAction(int event, int action) {
    if (action == AKCJA_1) {
    	//kawałek programu
    }
  }
};
Następnie w setup()

Kod: Zaznacz cały

customActionsClass *cokolwiek = new customActionsClass;
button->addAction(AKCJA_1, cokolwiek, Supla::ON_PRESS);
https://www.facebook.com/groups/supladiy/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

lukfud pisze: pt lis 27, 2020 8:33 am Możesz to też osiągnąć wykorzystując klasę Supla::Triggerable

Kod: Zaznacz cały

enum customActions {AKCJA_1};
class customActionsClass : public Supla::Triggerable {
  public: customActionsClass(){};
  void runAction(int event, int action) {
    if (action == AKCJA_1) {
    	//kawałek programu
    }
  }
};
Tak, tylko pamiętajmy, że aktualnie klasy przycisków pracują na timerach, a więc na przerwaniach. Kod wykonywany w ramach przerwań powinien być krótki, bez dalay itp. Jeśli cokowliek więcej ma tam być robione, to reakcja na zdarzenie powinna ustawić jakąś flagę, która wykona ten dłuższy fragment kodu w głównej pętli programu.
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

A jak wykonać zdarzenie od wciśnięcia przycisku po upływie określonego czasu?
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

krycha88 pisze: sob gru 19, 2020 7:35 pm A jak wykonać zdarzenie od wciśnięcia przycisku po upływie określonego czasu?
Napisz jaśniej.
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

klew pisze: sob gru 19, 2020 8:06 pm
krycha88 pisze: sob gru 19, 2020 7:35 pm A jak wykonać zdarzenie od wciśnięcia przycisku po upływie określonego czasu?
Napisz jaśniej.
po naciśnięciu przycisku chciałbym aby akcja wykonała się dopiero po upływie określonego czasu.

czyli naciskam przycisk i za 10s wykona się runAction z wartością action
https://gui-generic-builder.supla.io/
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

krycha88 pisze: sob gru 19, 2020 8:16 pm po naciśnięciu przycisku chciałbym aby akcja wykonała się dopiero po upływie określonego czasu.

czyli naciskam przycisk i za 10s wykona się runAction z wartością action

Kod: Zaznacz cały

button_[btn_relay_number]->setHoldTime(hold_time);
button_[btn_relay_number]->addAction(CFG_ON_HOLD, *custBtn, Supla::ON_HOLD);
https://www.facebook.com/groups/supladiy/
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

lukfud pisze: sob gru 19, 2020 8:25 pm
krycha88 pisze: sob gru 19, 2020 8:16 pm po naciśnięciu przycisku chciałbym aby akcja wykonała się dopiero po upływie określonego czasu.

czyli naciskam przycisk i za 10s wykona się runAction z wartością action

Kod: Zaznacz cały

button_[btn_relay_number]->setHoldTime(hold_time);
button_[btn_relay_number]->addAction(CFG_ON_HOLD, *custBtn, Supla::ON_HOLD);
ale ja chce tylko nacisnąć przycisk nie chce go trzymać oraz nie chce sterować przekaźnikiem :)
https://gui-generic-builder.supla.io/
elmaya
Posty: 1482
Rejestracja: śr cze 27, 2018 5:48 pm
Lokalizacja: El Saucejo - Sevilla

Kod: Zaznacz cały

#include <Ticker.h> 

Ticker ticker;

void run_once(){
  // execute here what you want it to do after the time set in "ticker.attach"                       
  ticker.detach(); // we stop "ticker" so that it does not repeat                                
}

void loop() {
  
 if("set the condition you want"){
  ticker.attach(10.0, run_once);  // call to "run_once" after the time set in seconds
 }

}
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

krycha88 pisze: sob gru 19, 2020 8:31 pm
lukfud pisze: sob gru 19, 2020 8:25 pm
krycha88 pisze: sob gru 19, 2020 8:16 pm po naciśnięciu przycisku chciałbym aby akcja wykonała się dopiero po upływie określonego czasu.
czyli naciskam przycisk i za 10s wykona się runAction z wartością action

Kod: Zaznacz cały

button_[btn_relay_number]->setHoldTime(hold_time);
button_[btn_relay_number]->addAction(CFG_ON_HOLD, *custBtn, Supla::ON_HOLD);
ale ja chce tylko nacisnąć przycisk nie chce go trzymać oraz nie chce sterować przekaźnikiem :)
W powyższym nie ma sterowania przekaźnikiem tylko wykonanie akcji z klasy dziedziczonej po Triggerable. Nie napisałeś, że naciskasz i puszczasz :D
https://www.facebook.com/groups/supladiy/
Awatar użytkownika
nowy1
Posty: 339
Rejestracja: pt lip 01, 2016 11:51 am
Lokalizacja: Warszawa

Jest może gotowy moduł z akumulatorem do przycisku?
ODPOWIEDZ

Wróć do „Arduino IDE”