Obsługa przycisków w SuplaDevice

User avatar
klew
Posts: 9749
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

lukfud wrote: Wed Feb 19, 2020 7:27 pm
klew wrote: Sat Feb 15, 2020 9:03 am Na chwilę obecną pojawiła się tam klasa Supla::Control::Button z obsługą dwóch zdarzeń "ON_PRESS" i "ON_RELEASE".
Wydaje mi się, że działanie jest odwrotne, bynajmniej u mnie działa odwrotnie.
Bodajże trzeci parametr konstruktora Button odwraca logikę.
PRESS jest sygnalizowany normalnie przy przejściu z low na high. A RELEASE w sytuacji odwrotnej. Gdy używany internal pullup, to przy otwartym przycisku mamy high, a wciśnięcie powoduje zwarcie do gnd i pojawia się low. Stąd przy używaniu internal pullup, trzeba odwrócić logikę
Kiedy będzie Supla Offline Party / SOP#2025 ?
daniel
Posts: 34
Joined: Thu Feb 15, 2018 7:29 am

Post

Przydało by się zdarzenie ON_CHANGE (zmiana stanu LOW -> HIGH i na odwrót) do obsługi np. przełączników bistabilnych.
User avatar
klew
Posts: 9749
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

daniel wrote: Wed Feb 19, 2020 7:53 pm Przydało by się zdarzenie ON_CHANGE (zmiana stanu LOW -> HIGH i na odwrót) do obsługi np. przełączników bistabilnych.
Ok, dodam. Aktualnie możesz zarejestrować dwa zdarzenia pod tą samą akcję i efekt będzie taki sam.
Kiedy będzie Supla Offline Party / SOP#2025 ?
User avatar
lukfud
Posts: 2271
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

klew wrote: Wed Feb 19, 2020 7:37 pm
lukfud wrote: Wed Feb 19, 2020 7:27 pm
klew wrote: Sat Feb 15, 2020 9:03 am Na chwilę obecną pojawiła się tam klasa Supla::Control::Button z obsługą dwóch zdarzeń "ON_PRESS" i "ON_RELEASE".
Wydaje mi się, że działanie jest odwrotne, bynajmniej u mnie działa odwrotnie.
Bodajże trzeci parametr konstruktora Button odwraca logikę.
PRESS jest sygnalizowany normalnie przy przejściu z low na high. A RELEASE w sytuacji odwrotnej. Gdy używany internal pullup, to przy otwartym przycisku mamy high, a wciśnięcie powoduje zwarcie do gnd i pojawia się low. Stąd przy używaniu internal pullup, trzeba odwrócić logikę
Moje spostrzeżenia. Jeśli mam ustawione tak:

Code: Select all

void setup() {
//pinMode(button_pin, INPUT_PULLUP);
button.willTrigger(*relay01, Supla::Control::Button::ON_PRESS, Supla::Control::Relay::TOGGLE);}
Program startuje z włączonym przekaźnikiem, a przycisk przełącza przy puszczeniu (rozwarciu z GND)

Code: Select all

void setuo() {
//pinMode(button_pin, INPUT_PULLUP);
button.willTrigger(*relay01, Supla::Control::Button::ON_RELEASE, Supla::Control::Relay::TOGGLE);}
Program startuje z wyłączonym przekaźnikiem i przycisk przełącza po wciśnięciu (zwarciu do GND)

Ta sama sytuacja z odkomentowanym pullupem.
https://www.facebook.com/groups/supladiy/
User avatar
klew
Posts: 9749
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

lukfud wrote: Wed Feb 19, 2020 8:16 pm Moje spostrzeżenia. Jeśli mam ustawione tak:

Code: Select all

void setup() {
//pinMode(button_pin, INPUT_PULLUP);
button.willTrigger(*relay01, Supla::Control::Button::ON_PRESS, Supla::Control::Relay::TOGGLE);}
Program startuje z włączonym przekaźnikiem, a przycisk przełącza przy puszczeniu (rozwarciu z GND)

Code: Select all

void setuo() {
//pinMode(button_pin, INPUT_PULLUP);
button.willTrigger(*relay01, Supla::Control::Button::ON_RELEASE, Supla::Control::Relay::TOGGLE);}
Program startuje z wyłączonym przekaźnikiem i przycisk przełącza po wciśnięciu (zwarciu do GND)

Ta sama sytuacja z odkomentowanym pullupem.
Dobrze kojarzę, że button masz ustawiony na GPIO0 a relay01 na GPIO15?

GPIO0 jest "pulled up", więc tam ustawianie input pullup nic nie zmienia. W związu z tym musiałbyś tworząc buttona ustawić mu trzeci parametr na "true", aby odwrócić logikę:

Code: Select all

Button(0, true, true)
Druga sprawa to używanie GPIO0 do przycisku nie jest najlepszym pomysłem, bo jeśli podczas resetu układu, przycisk będzie wciśnięty, to płytka wejdzie w tryb flashowania i program się nie odpali.

Problemu z przekaźnikiem nie udało mi się zaobserwować u mnie. Napisz coś więcej - mówisz o fizycznym stanie przekaźnika (sterujesz low czy high) ? Jaki jest stan przekaźnika widoczny w aplikacji?

pinMode nie ustawiaj samemu. Klasy button, relay same sobie to ustawią bazując na parametrach, które podasz podczas ich tworzenia.
Kiedy będzie Supla Offline Party / SOP#2025 ?
Zybi
Posts: 1511
Joined: Sun Jun 26, 2016 4:24 pm

Post

klew wrote: Wed Feb 19, 2020 11:11 pm ...
Druga sprawa to używanie GPIO0 do przycisku nie jest najlepszym pomysłem, bo jeśli podczas resetu układu, przycisk będzie wciśnięty, to płytka wejdzie w tryb flashowania i program się nie odpali.
...
Z tym to się zupełnie nie zgadzam.
Właśnie na GPIO0 w dostępnych na rynku modułach jest najczęściej "ulokowany" przycisk.
Należy jednak pamiętać, że może to być tylko przycisk monostabilny (tzw dzwonkowy), aby właśnie nie było niezamierzonych efektów, o których piszesz jw. Z drugiej strony właśnie dla tych efektów (ale kontrolowanych) na tym pinie stosujemy przycisk.
User avatar
klew
Posts: 9749
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Zybi wrote: Wed Feb 19, 2020 11:35 pm
klew wrote: Wed Feb 19, 2020 11:11 pm ...
Druga sprawa to używanie GPIO0 do przycisku nie jest najlepszym pomysłem, bo jeśli podczas resetu układu, przycisk będzie wciśnięty, to płytka wejdzie w tryb flashowania i program się nie odpali.
...
Z tym to się zupełnie nie zgadzam.
Właśnie na GPIO0 w dostępnych na rynku modułach jest najczęściej "ulokowany" przycisk.
Należy jednak pamiętać, że może to być tylko przycisk monostabilny (tzw dzwonkowy), aby właśnie nie było niezamierzonych efektów, o których piszesz jw. Z drugiej strony właśnie dla tych efektów (ale kontrolowanych) na tym pinie stosujemy przycisk.
Są gotowe moduły, które pod GPIO0 mają gotowe wyprowadzenia na zewnętrzny przycisk?

Bo to, że jest tam podpięty microswitch, to jest to zrozumiałe.
Kiedy będzie Supla Offline Party / SOP#2025 ?
User avatar
klew
Posts: 9749
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Akcja ON_CHANGE jest dodana na moim githubie.
Dodałem też software'owe filtrowanie szumów na gpio. Domyślnie ustawione na 20 ms, ale można sobie ustawić inną wartść przez:

Code: Select all

button.setSwNoiseFilterDelay(50);
Czas podawany w ms.
Kiedy będzie Supla Offline Party / SOP#2025 ?
Zybi
Posts: 1511
Joined: Sun Jun 26, 2016 4:24 pm

Post

klew wrote: Thu Feb 20, 2020 12:00 am ...
Są gotowe moduły, które pod GPIO0 mają gotowe wyprowadzenia na zewnętrzny przycisk?
...
Chociażby cała kolekcja włączników dotykowych (Sonoff Touch 1-3 gang)
User avatar
klew
Posts: 9749
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Zybi wrote: Thu Feb 20, 2020 12:14 am
klew wrote: Thu Feb 20, 2020 12:00 am ...
Są gotowe moduły, które pod GPIO0 mają gotowe wyprowadzenia na zewnętrzny przycisk?
...
Chociażby cała kolekcja włączników dotykowych (Sonoff Touch 1-3 gang)
Z tego co czytam o tych modułach, to wynika, że w starych wersjach przytrzymanie przycisku ustawionego na GPIO0 nie wprowdzało modułyu w tryb flashowania.
W nowszych wersjach trzeba trzymając przycisk, wciśnąć microswitch "reset", a jeszcze w innych wersjach można dwukrotnie wcisnąć reset.

Trzymanie przycisku przy starcie po "power on" nie powoduje wejścia w tryb flashowania, bo przycisk wtedy jeszcze nie działa.

Także nie jest to to samo, co podłączenie standardowego przycisku dzwonkowego.

Ale w zasadzie, "róbta co chceta" ;). Ważne, aby pamiętać o tym, że tak się podłączyło przycisk i mieć świadomość potencjalnego "zawieszenia" układu.
Kiedy będzie Supla Offline Party / SOP#2025 ?

Return to “Arduino IDE”