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

User avatar
lukfud
Posts: 2117
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

bigthomas wrote: Thu Nov 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

Code: Select all

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

Code: Select all

customActionsClass *cokolwiek = new customActionsClass;
button->addAction(AKCJA_1, cokolwiek, Supla::ON_PRESS);
https://www.facebook.com/groups/supladiy/
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

lukfud wrote: Fri Nov 27, 2020 8:33 am Możesz to też osiągnąć wykorzystując klasę Supla::Triggerable

Code: Select all

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
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

A jak wykonać zdarzenie od wciśnięcia przycisku po upływie określonego czasu?
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

krycha88 wrote: Sat Dec 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
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Sat Dec 19, 2020 8:06 pm
krycha88 wrote: Sat Dec 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/
User avatar
lukfud
Posts: 2117
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

krycha88 wrote: Sat Dec 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

Code: Select all

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
Posts: 5243
Joined: Fri Nov 16, 2018 7:25 am

Post

lukfud wrote: Sat Dec 19, 2020 8:25 pm
krycha88 wrote: Sat Dec 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

Code: Select all

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
Posts: 1482
Joined: Wed Jun 27, 2018 5:48 pm
Location: El Saucejo - Sevilla

Post

Code: Select all

#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
 }

}
User avatar
lukfud
Posts: 2117
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

krycha88 wrote: Sat Dec 19, 2020 8:31 pm
lukfud wrote: Sat Dec 19, 2020 8:25 pm
krycha88 wrote: Sat Dec 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

Code: Select all

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/
User avatar
nowy1
Posts: 339
Joined: Fri Jul 01, 2016 11:51 am
Location: Warszawa

Post

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

Return to “Arduino IDE”