Obsługa dwóch kanałów w jednej klasie

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

ndz maja 23, 2021 6:15 pm

Czy jest w ogóle taka możliwość? Chciałbym w jednej klasie obsłużyć dwa kanały:

Kod: Zaznacz cały

  channel.setType(SUPLA_CHANNELTYPE_DISTANCESENSOR);
  channel.setDefault(SUPLA_CHANNELFNC_DISTANCESENSOR);
  channel.setNewValue(DISTANCE_NOT_AVAILABLE);

  channel.setType(SUPLA_CHANNELTYPE_HUMIDITYSENSOR);
  channel.setDefault(SUPLA_CHANNELFNC_HUMIDITY);
  channel.setNewValue(HUMIDITY_NOT_AVAILABLE);
Wsparcie projektu GUI-Generic ;)
Awatar użytkownika
klew
Posty: 2633
Rejestracja: czw cze 27, 2019 12:16 pm

ndz maja 23, 2021 8:55 pm

Tak, jest to możliwe, ale trochę karkołomne.

Zobacz sobie implementację w BME280.h oraz w therm_hygro_press_meter.h/cpp
W zasadzie ta druga wprowadza obsługę drugiego osobnego kanału w ramach jednej klasy. Najważniejsza jest metoda "getSecondaryChannel". Reszta powinna w miarę działać.
krycha88
Posty: 1962
Rejestracja: pt lis 16, 2018 7:25 am

pn maja 24, 2021 4:42 am

Przyzwyczaiłeś mnie do prostrzych rozwiązań ale damy radę ;)
Wsparcie projektu GUI-Generic ;)
krycha88
Posty: 1962
Rejestracja: pt lis 16, 2018 7:25 am

śr cze 16, 2021 6:39 pm

i teraz pytanie czy da się ustawić warunkowanie dla takiego drugiego kanału? :)
Wsparcie projektu GUI-Generic ;)
Awatar użytkownika
klew
Posty: 2633
Rejestracja: czw cze 27, 2019 12:16 pm

śr cze 16, 2021 10:26 pm

krycha88 pisze:
śr cze 16, 2021 6:39 pm
i teraz pytanie czy da się ustawić warunkowanie dla takiego drugiego kanału? :)
Niestety tego jeszcze nie ma.
Jak pisałem warunki, to jedyny tego typu przykład był dla BME, gdzie "seconday channel" to ciśnienie. Było raczej mało prawdopodobne, że komuś się to przyda ;).
krycha88
Posty: 1962
Rejestracja: pt lis 16, 2018 7:25 am

czw cze 17, 2021 6:47 am

jak byś się nudził to poproszę o taką funkcjonalność :) Ale trzeba przyznać, że potrzeba niszowa bo służy tylko do prezentowania wartości sensora w różnych jednostkach za pomocą dwóch różnych kanałów.
Wsparcie projektu GUI-Generic ;)
Awatar użytkownika
klew
Posty: 2633
Rejestracja: czw cze 27, 2019 12:16 pm

czw cze 17, 2021 6:50 am

krycha88 pisze:
czw cze 17, 2021 6:47 am
jak byś się nudził to poproszę o taką funkcjonalność :) Ale trzeba przyznać, że potrzeba niszowa bo służy tylko do prezentowania wartości sensora w różnych jednostkach za pomocą dwóch różnych kanałów.
Można by dodać osobny "element" z jednym kanałem, któremu podaje się zakres min i max, oraz kanał referencyjny i na jego podstawie tworzy kanał 0-100%. To powinno być dość proste, uniwersalne (będzie działać na dowolnym innym kanale) i będzie działać warunkowanie.Tylko może warto też poczekać na Supla 2.4 i kanał ogólny.
krycha88
Posty: 1962
Rejestracja: pt lis 16, 2018 7:25 am

czw cze 17, 2021 7:18 am

klew pisze:
czw cze 17, 2021 6:50 am
Można by dodać osobny "element" z jednym kanałem, któremu podaje się zakres min i max, oraz kanał referencyjny i na jego podstawie tworzy kanał 0-100%. To powinno być dość proste, uniwersalne (będzie działać na dowolnym innym kanale) i będzie działać warunkowanie.Tylko może warto też poczekać na Supla 2.4 i kanał ogólny.
to było by najlepsze rozwiązanie. Kanał wilgotności pasuje bardzo ładnie to wartości w procentach :) Nie wiadomo czy w tym roku pojawi się wersja 2.4, a przerobienie kanału wilgotności na kanał ogólnego przeznaczenia to pewnie chwila roboty.
Wsparcie projektu GUI-Generic ;)
krycha88
Posty: 1962
Rejestracja: pt lis 16, 2018 7:25 am

czw cze 17, 2021 1:05 pm

klew pisze:
czw cze 17, 2021 6:50 am
Można by dodać osobny "element" z jednym kanałem, któremu podaje się zakres min i max, oraz kanał referencyjny i na jego podstawie tworzy kanał 0-100%. To powinno być dość proste, uniwersalne (będzie działać na dowolnym innym kanale) i będzie działać warunkowanie.Tylko może warto też poczekać na Supla 2.4 i kanał ogólny.
Spróbowałem dodać taką obsługę jak zaproponowałeś, aby to zrobić wystarczy zrobić to tak:

Kod: Zaznacz cały

    auto hc_sr04 = new Supla::Sensor::HC_SR04(4, 5);
    new Supla::Sensor::Percentage(hc_sr04, 20, 120);
    
i teraz doda się automatycznie drugi kanał który będzie wyświetlać wartości z HC_SR04 przeliczając je na procenty. Jedynie co trzeba określić to min oraz max.

https://github.com/krycha88/GUI-Generic ... entage.cpp

@klew spojrzysz na to? :)
Wsparcie projektu GUI-Generic ;)
Awatar użytkownika
klew
Posty: 2633
Rejestracja: czw cze 27, 2019 12:16 pm

czw cze 17, 2021 9:03 pm

krycha88 pisze:
czw cze 17, 2021 1:05 pm
@klew spojrzysz na to? :)
Na koniec switch case jest coś nie tak. Po

Kod: Zaznacz cały

 default:
      return HUMIDITY_NOT_AVAILABLE;
 
powinieneś zamknąć switch case'a (klamra } ).
Do tego "double value" definiujesz dwa razy. Przy zwracaniu double, nie musisz też robić static_cast na double.

Parametry min i max robiłbym też na innych zmiennych niż int16_t. Mogą trafić się sytuacje, gdzie to będzie zbyt duże ograniczenie.
ODPOWIEDZ

Wróć do „Arduino IDE”