krycha88 wrote: Wed Feb 24, 2021 7:03 am
klew wrote: Wed Feb 24, 2021 6:54 am
krycha88 wrote: Wed Feb 24, 2021 6:45 am
Wydaje mi się, że już w samej bibliotece Supla::Event::ON_PRESS oraz Supla::Event::ON_RELEASE działają na odwrót. A może inaczej przy domyślnym ustawieniu działają inaczej niż większość urządzeń
Jeśli działają na odwrót, to znaczy że są źle ustawione
Dla wszystkich urządzeń jakie mam to Supla::Event::ON_PRESS będzie działać jako Supla::Event::ON_RELEASE dla takich ustawień:
Code: Select all
auto button = new Supla::Control::Button(pinButton, true);
button->addAction(Supla::Action::TOGGLE, relay, Supla::Event::ON_PRESS);
jak ustawię invertLogic na true to będzie działać zgodnie z założeniem:
Code: Select all
auto button = new Supla::Control::Button(pinButton, true, true);
button->addAction(Supla::Action::TOGGLE, relay, Supla::Event::ON_PRESS);
czyli wychodzi, że dla większości urządzeń trzeba ustawić invertLogic.
Domyślna "logika" przycisku jest taka, że w stanie "normalnym"/"rozwartym"/"nie wciśniętym" ma być na GPIO stan LOW. Wciśnięcie przycisku ma generować pojawienie się stanu "HIGH".
Teraz, zależnie od pullupa (albo wewnętrznego, albo zrobionego samemu) lub pulldowna, oraz od typu przycisku (może być zwierny lub rozwierny), to w stanie "normalnym"/"nie wciśniętym", może być na GPIO odczyt LOW lub HIGH. Tego się nie da automatycznie odgadnąć. Mając konkretny sprzęt, przycisk i ich konfigurację sprzętową, urzytkownik musi wiedzieć jaki ma stan "normalny". Wtedy trzeba skonfigurować odpowiednio logikę.
Najprostszy przykład to zwykły przycisk zwierny (czyli typu NO - normalnie otwarty) oraz ustawiony wewnętrzny INPUT_PULLUP. INPUT_PULLUP powoduje, że poziom logiczny na GPIO jest podciągnięty przy pomocy rezystora do HIGH, więc odczyt w stanie normalnym na GPIO to HIGH. W takim ustawieniu, przycisk powinien być podłączony do GPIO oraz GND i jego wciśnięcie powoduje zwarcie GPIO do GND, a więc przejście do stanu LOW. W tym przypadku trzeba ustawić odwróconą logikę - tak jak podałeś w przykładzie.
Użycie Button(pin, true) - z domyślnym trzecim parametrem "false" - mogłoby być poprawne w przypadku gdy mamy podłączony przycisk rozwierny (czyli NC - normlanie zamknięty), wtedy przycisk domyślnie zwiera doi GND, a jego wciśnięcie rozwiera i pojawia się stan HIGH.