Obsługa przycisków w SuplaDevice

Awatar użytkownika
klew
Posty: 829
Rejestracja: czw cze 27, 2019 12:16 pm

sob lut 15, 2020 9:03 am

Wczoraj dodałem pierwszy zarys obsługi przycisków. Kod na razie jest na moim githubie: https://github.com/klew/arduino

Na chwilę obecną pojawiła się tam klasa Supla::Control::Button z obsługą dwóch zdarzeń "ON_PRESS" i "ON_RELEASE".
Przycisk może na razie pracować z klasą Supla::Control::Relay i wywoływać akcje TURN_ON, TURN_OFF i TOGGLE.

Kod: Zaznacz cały

#include <SuplaDevice.h>
#include <supla/control/relay.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/button.h>

Supla::ESPWifi wifi("ssid", "password");

const char* srv_addr        = "svr1.supla.org";
const char* srv_email       = "email@email.com";

Supla::Control::Relay relay(D9);
Supla::Control::Button button(D13, true);

void setup() {
  Serial.begin(115200);
  uint8_t mac[6];
  WiFi.macAddress(mac);
  char GUID[SUPLA_GUID_SIZE] = { ... };
  char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {...};

  button.willTrigger(relay, Supla::ON_PRESS, Supla::TOGGLE);
//  button.willTrigger(relay, Supla::ON_RELEASE, Supla::TURN_OFF);

  SuplaDevice.begin(GUID,srv_addr,srv_email,AUTHKEY);
}
void loop() {
  SuplaDevice.iterate();
}
To tylko zarys wsparcia przycisków i będzie to jeszcze rozbudowane.
Logika przycisku też działa na odwrót na chwilę obecną ;)

Do przycisku będzie można przypisać dodolne akcje i dowolną ilość triggerowanych obiektów.
Nawet termostat da się na tym zrobić ;P - ale o tym później.
Awatar użytkownika
QLQ
Posty: 1217
Rejestracja: ndz wrz 03, 2017 9:13 am
Lokalizacja: Koszalin

sob lut 15, 2020 8:34 pm

klew pisze:
sob lut 15, 2020 9:03 am
Wczoraj dodałem pierwszy zarys obsługi przycisków. Kod na razie jest na moim githubie: https://github.com/klew/arduino

Na chwilę obecną pojawiła się tam klasa Supla::Control::Button z obsługą dwóch zdarzeń "ON_PRESS" i "ON_RELEASE".
Przycisk może na razie pracować z klasą Supla::Control::Relay i wywoływać akcje TURN_ON, TURN_OFF i TOGGLE.

Kod: Zaznacz cały

#include <SuplaDevice.h>
#include <supla/control/relay.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/button.h>

Supla::ESPWifi wifi("ssid", "password");

const char* srv_addr        = "svr1.supla.org";
const char* srv_email       = "email@email.com";

Supla::Control::Relay relay(D9);
Supla::Control::Button button(D13, true);

void setup() {
  Serial.begin(115200);
  uint8_t mac[6];
  WiFi.macAddress(mac);
  char GUID[SUPLA_GUID_SIZE] = { ... };
  char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {...};

  button.willTrigger(relay, Supla::Control::Button::ON_PRESS, Supla::Control::Relay::TOGGLE);
//  button.willTrigger(relay, Supla::Control::Button::ON_RELEASE, Supla::Control::Relay::TURN_OFF);

  SuplaDevice.begin(GUID,srv_addr,srv_email,AUTHKEY);
}
void loop() {
  SuplaDevice.iterate();
}
To tylko zarys wsparcia przycisków i będzie to jeszcze rozbudowane.
Logika przycisku też działa na odwrót na chwilę obecną ;)

Do przycisku będzie można przypisać dodolne akcje i dowolną ilość triggerowanych obiektów.
Nawet termostat da się na tym zrobić ;P - ale o tym później.
Ooo w końcu będę mógł zaszaleć :mrgreen: :mrgreen:
daniel
Posty: 32
Rejestracja: czw lut 15, 2018 7:29 am

wt lut 18, 2020 2:34 pm

@klew jak dodałem przekaźnik w setup() tak jak podałeś tu viewtopic.php?f=61&t=5486&start=200#

Kod: Zaznacz cały

#include <SuplaDevice.h>
#include <supla/control/relay.h>
#include <supla/network/esp_wifi.h>
#include <supla/control/button.h>

Supla::ESPWifi wifi("ssid", "password");

const char* srv_addr        = "svr1.supla.org";
const char* srv_email       = "email@email.com";

Supla::Control::Relay *relay = nullptr;
Supla::Control::Button button(4, true);

void setup() {
  Serial.begin(115200);
  uint8_t mac[6];
  WiFi.macAddress(mac);
  char GUID[SUPLA_GUID_SIZE] = {};
  char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {};
  relay = new Supla::Control::Relay(2);
  button.willTrigger(relay, Supla::Control::Button::ON_PRESS, Supla::Control::Relay::TOGGLE);
//  button.willTrigger(relay, Supla::Control::Button::ON_RELEASE, Supla::Control::Relay::TURN_OFF);

  SuplaDevice.begin(GUID,srv_addr,srv_email,AUTHKEY);
}
void loop() {
  SuplaDevice.iterate();
}
to wyrzuca:

Kod: Zaznacz cały

/home/daniel/Arduino/szkice/test/test.ino:21:92: error: no matching function for call to 'Supla::Control::Button::willTrigger(Supla::Control::Relay*&, Supla::Control::Button::Event, Supla::Control::Relay::Action)'
:cry:
Awatar użytkownika
klew
Posty: 829
Rejestracja: czw cze 27, 2019 12:16 pm

wt lut 18, 2020 2:50 pm

daniel pisze:
wt lut 18, 2020 2:34 pm
to wyrzuca:

Kod: Zaznacz cały

/home/daniel/Arduino/szkice/test/test.ino:21:92: error: no matching function for call to 'Supla::Control::Button::willTrigger(Supla::Control::Relay*&, Supla::Control::Button::Event, Supla::Control::Relay::Action)'
:cry:
"willTrigger" przyjmuje referencję na obiekt, a u Ciebie "relay" jest wskaźnikiem. Zrób tak:

Kod: Zaznacz cały

 button.willTrigger(*relay, Supla::Control::Button::ON_PRESS, Supla::Control::Relay::TOGGLE);
 
daniel
Posty: 32
Rejestracja: czw lut 15, 2018 7:29 am

wt lut 18, 2020 2:58 pm

Dzięki działa :D , przy okazji zapytam czy analogicznie do przekaźnika można dodać przycisk w setupie, i jak w setupie aktywować wifi na ESP.
Awatar użytkownika
klew
Posty: 829
Rejestracja: czw cze 27, 2019 12:16 pm

wt lut 18, 2020 3:31 pm

daniel pisze:
wt lut 18, 2020 2:58 pm
Dzięki działa :D , przy okazji zapytam czy analogicznie do przekaźnika można dodać przycisk w setupie, i jak w setupie aktywować wifi na ESP.
Można, tylko trzeba odpowiednio używać wskaźników i zmiennych
daniel
Posty: 32
Rejestracja: czw lut 15, 2018 7:29 am

wt lut 18, 2020 3:46 pm

Ok, dzięki. Swoją drogą nowa wersja SuplaDevice to już kawał dobrej roboty. Powodzenia!
lukfud
Posty: 236
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

śr lut 19, 2020 8:35 am

klew pisze:
sob lut 15, 2020 9:03 am
Wczoraj dodałem pierwszy zarys obsługi przycisków. Kod na razie jest na moim githubie: https://github.com/klew/arduino
Na chwilę obecną pojawiła się tam klasa Supla::Control::Button z obsługą dwóch zdarzeń "ON_PRESS" i "ON_RELEASE".
Przycisk może na razie pracować z klasą Supla::Control::Relay i wywoływać akcje TURN_ON, TURN_OFF i TOGGLE.
To tylko zarys wsparcia przycisków i będzie to jeszcze rozbudowane.
Logika przycisku też działa na odwrót na chwilę obecną ;)
Do przycisku będzie można przypisać dodolne akcje i dowolną ilość triggerowanych obiektów.
Nawet termostat da się na tym zrobić ;P - ale o tym później.
Czy przy tej obsłudze, będzie przewidziane podwójne sprawdzanie stanu (filtr), które stosujemy przy np. Sonoff MINI?
.newbie
Awatar użytkownika
klew
Posty: 829
Rejestracja: czw cze 27, 2019 12:16 pm

śr lut 19, 2020 8:39 am

lukfud pisze:
śr lut 19, 2020 8:35 am
Czy przy tej obsłudze, będzie przewidziane podwójne sprawdzanie stanu (filtr), które stosujemy przy np. Sonoff MINI?
Tak, dodam to. Ogólnie przycisk będzie rozbudowany również o detekcję wieloklików, przytrzymania itp. Jak ktoś ma jakieś pomysły na to co można tam zrobić (np. wystukanie melodii), to niech pisze.
lukfud
Posty: 236
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

śr lut 19, 2020 7:27 pm

klew pisze:
sob lut 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.
.newbie
ODPOWIEDZ