Akcje warunkowe w Arduino IDE

krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Może warunkowanie powinno w jakiś sposób reagować na wartości kanałów:

Kod: Zaznacz cały

TEMPERATURE_NOT_AVAILABLE
HUMIDITY_NOT_AVAILABLE
DISTANCE_NOT_AVAILABLE
teraz otrzymanie błędu wyniku zwłaszcza dla temperatury może być dość niepożądane.
https://gui-generic-builder.supla.io/
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

czy warunkowanie zadziała dla DimmerLeds, RGBLeds oraz RGBWLeds?
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: ndz mar 14, 2021 4:03 pm czy warunkowanie zadziała dla DimmerLeds, RGBLeds oraz RGBWLeds?
Warunek zależny od jasności? Nie ma tego zaimplementowanego. Co byś chciał zrobić i w jakim celu?
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

klew pisze: ndz mar 14, 2021 5:33 pm
krycha88 pisze: ndz mar 14, 2021 4:03 pm czy warunkowanie zadziała dla DimmerLeds, RGBLeds oraz RGBWLeds?
Warunek zależny od jasności? Nie ma tego zaimplementowanego. Co byś chciał zrobić i w jakim celu?
chciałbym wyłączyć taśmy LED jeżeli urządzenie nagrzeje się do niepożądanej temperatury.
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Ok, czyli na rgbw chcesz wykonać akcję. Będzie to działać z termometrem, tylko musisz użyć odpowiednich dla rgbw akcji (przejrzyj sobie w rgbw_base.cpp)
Widzimy się na Supla Offline Party vol. 2 :!:
andrew01
Posty: 162
Rejestracja: pt maja 24, 2019 6:49 am

Czy dobrze rozumiem, że te akcje wykonywane są lokalnie na urządzeniu? Jeśli tak to może (o ile by się dało) dodać możliwość wywołania własnej funkcji w momencie zadziałania warunku? Wtedy można byłoby np. wysłać mail'a jako rodzaj powiadomienia o np. przekroczonej temperaturze.
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

andrew01 pisze: śr mar 24, 2021 5:46 pm Czy dobrze rozumiem, że te akcje wykonywane są lokalnie na urządzeniu? Jeśli tak to może (o ile by się dało) dodać możliwość wywołania własnej funkcji w momencie zadziałania warunku? Wtedy można byłoby np. wysłać mail'a jako rodzaj powiadomienia o np. przekroczonej temperaturze.
Jest już taka możliwość.
https://www.facebook.com/groups/supladiy/
andrew01
Posty: 162
Rejestracja: pt maja 24, 2019 6:49 am

A podpowiesz jak to uzyskać? Nie wiem czy mówimy o tym samym ale chodziło o coś takiego:

myAction()
{
//jakieś działanie
}

termometr.addAction(myAction(), OnLess(21.8));

Czyli aby wykonała się funkcja myAction w momencie gdy np. temperatura spadnie poniżej 21.8.

Wiem, że podobną funkcjonalność można zrobić scenami itp. ale to by było dużo prostsze i bardziej elastyczne.
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

andrew01 pisze: czw mar 25, 2021 8:00 am A podpowiesz jak to uzyskać? Nie wiem czy mówimy o tym samym ale chodziło o coś takiego:

myAction()
{
//jakieś działanie
}

termometr.addAction(myAction(), OnLess(21.8));

Czyli aby wykonała się funkcja myAction w momencie gdy np. temperatura spadnie poniżej 21.8.

Wiem, że podobną funkcjonalność można zrobić scenami itp. ale to by było dużo prostsze i bardziej elastyczne.
Coś takiego:

Kod: Zaznacz cały

#include <supla/action_handler.h>

#define MOJA_AKCJA_1 1;
#define MOJA_AKCJA_2 2;

class MojaAkcja : public Supla::ActionHandler {
  public:
    void handleAction(int event, int action) {
      if (action == MOJA_AKCJA_1) {
        // zadania dla akcji 1
      } else if (action == MOJA_AKCJA_2) {
       // zadania dla akcji 2
      }  
    }
};

// setup:
MojaAkcja egzekutor;
button->addAction(MOJA_AKCJA_1, egzekutor, ON_PRESS);
Trzeba tylko pamiętać, że niektóre klasy (np. button) wykonują handleAction w ramach obsługi przerwań/timerów, więc w handleAction można dawać ograniczony zestaw poleceń (na penwo nie należy wykonywać połączeń do innych serwerów). Aby to zrobić, to w obsłudze akcji możemy przestawiać jakąś flagę i sprawdzać ją w iterate i tam wykonywać akcję.
Widzimy się na Supla Offline Party vol. 2 :!:
andrew01
Posty: 162
Rejestracja: pt maja 24, 2019 6:49 am

Pełna profeska, dzięki bardzo :)
ODPOWIEDZ

Wróć do „Arduino IDE”