Sterowanie LEDem w zależności od stanu przekaźnika

krycha88
Posts: 5208
Joined: Fri Nov 16, 2018 7:25 am

Post

Może warto dodać takie wsparcie do biblioteki? ;)
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 8357
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Ok, dorzucam na listę zadań
Widzimy się na Supla Offline Party vol. 2 :!:
Patryk
Posts: 2704
Joined: Mon Jan 07, 2019 7:51 pm
Location: Rybnik

Post

Dzięki !!!
User avatar
Robert Błaszczak
Posts: 4011
Joined: Sat Dec 22, 2018 8:55 pm
Location: Zielona Góra

Post

Pomysł dobry. Fajnie byłoby, aby to też działało przy liczniku impulsów.
Pozdrawiam
Robert Błaszczak


Moja prywatna strona: www.blaszczak.pl
krycha88
Posts: 5208
Joined: Fri Nov 16, 2018 7:25 am

Post

Super, faktycznie nie ma co się ograniczać tylko do przekaźników :) można by też sygnalizować stan kontaktronów itd.
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 8357
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

A może frytki do tego? ;)
Widzimy się na Supla Offline Party vol. 2 :!:
User avatar
lukfud
Posts: 2101
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

klew wrote: Thu Jan 14, 2021 5:35 pm Ok, dorzucam na listę zadań
Hm, to nie będzie przypadkiem wyzwalanie własnych akcji stanem przekaźnika o czym wspominałem kilka miesięcy wcześniej? :)
https://www.facebook.com/groups/supladiy/
krycha88
Posts: 5208
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Thu Jan 14, 2021 7:33 pm A może frytki do tego? ;)
Im dłużej czekamy to mamy więcej pomysłów :D
https://gui-generic-builder.supla.io/
User avatar
lesny8
Posts: 2814
Joined: Mon Dec 11, 2017 9:43 pm

Post

klew wrote: Thu Jan 14, 2021 7:33 pm A może frytki do tego? ;)
:lol: :lol:
Czekam na kolejne Supla Offline Party 👍
User avatar
klew
Posts: 8357
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Panowie i Panie

Dziś pojawiło się kilka istotnych zmian, które umożliwiają wszysto, co jest do tej pory w tym wątku (poza frytkami - nad tym nadal pracuję).

Wszystkie kanały (poza licznikami prądu) dostały możliwość wyzwalania akcji zmianą swojego stanu. Działa to analogicznie jak do tej pory przyciski. Np.:

Code: Select all

  auto relay1 = new Supla::Control::Relay(...);
  auto relay2 = new Supla::Control::Relay(...);
  
  relay1->addAction(Supla::TURN_ON, relay2, Supla::ON_TURN_OFF);
  relay1->addAction(Supla::TURN_OFF, relay2, Supla::ON_TURN_ON);
Powyższy kod włącza relay2 w sytuacji gdy wyłączamy relay1, oraz wyłącza relay2, gdy włączamy relay1.

Analogicznie działają sensory binarne (normally open itp):

Code: Select all

  auto alarmRelay = new Supla::Control::Relay(...);
  auto waterSensor = new Supla::Sensor::Binary(....);
  
  waterSensor->addAction(Supla::TURN_ON, alarmRelay, Supla::ON_TURN_ON);
  waterSensor->addAction(Supla::TURN_OFF, alarmRelay, Supla::ON_TURN_OFF);
Wszystkie kanały, które komunikują z Supla stan binarny (włączony/wyłączony, 0/1, true/false), takie jak Binary, Relay, VirtualRelay, BistableRelay, VirtualBinary, obsługują zdarzenia ON_TURN_ON, ON_TURN_OFF, ON_CHANGE.

Wszystkie pozostałe kanały (za wyjątkiem licznika prądu), czyli RGBW, RollerShutter, HC_SR04, termometry, wilgotnościomierze, sensory wiatru, deszczu, ciśnienia, wagi, oraz liczniki impulsów, obsługują jedynie zdarzenie ON_CHANGE. Dodatkowe zdarzenia do obsługi bardziej skomplikowanych sytuacji (np. dla termostatów) zostaną wkrótce też dodane.

Uważajcie, aby nie zrobić w kodzie cyklicznych dependencji, bo nie jest to w żaden sposób sprawdzane. Dodanie dependencji, że relay1 ustawia relay2, który ustawia relay3, który ustawia relay1 spowoduje zapętlenie się i crash aplikacji.

Kolejne dwie nowości to Supla::Control::InternalPinOutput oraz Supla::Control::PinStatusLed.
InternalPinOutput to coś w rodzaju wewnętrznego przekaźnika (wewnętrznego w sensie, że nie informujemy o jego istnieniu serwera Supli), którego stan możemy zmieniać używając wewnętrznej logiki. Można tutaj podłączać fizyczny przekaźnik, LED, buzzer - cokolwiek co da się sterować cyfrowym wyjściem. InternalPinOutput jest sterowalny przez "addAction", jak również może być sterowany przez akcje z innych elementów programu. Dodałem przykład użycia InternalPinOutput w przykładach w bibliotece dla ImpulseCounter (mruganie diodą, przy każdym zliczeniu impulsu).
InternalPinOutput ma dostępną metodę "setDurationMs(czas_w_ms)", która spowoduje, że akcja TURN_ON (lub inne włączenie), spowoduje włączenie tylko na czas_w_ms podany w setDurationMs. Można tego użyć np. do generowania mrugnięć diodą po każdej zmianie stanu licznika impulsów.
Można również ustawić stan początkowy (po uruchomieniu programu) metodami setDefaultStateOn, setDefaultStateOff. Domyślnie stan jest ustawiony na OFF.
Konstruktor przyjmuje dwa argumenty: pin, oraz highIsOn - informujący o tym, jaki stan wyjścia (HIGH, czy LOW) oznacza ON (czyli włączony).

PinStatusLed jest natomiast bardzo prostym elementem, który kopiuje stan jednego pinu na inny. Można go użyć np. do diody informującej o stanie innego pinu (np. przekaźnika, rolet, sensora binarnego). Nie da się nim inaczej sterować i sam niczego więcej nie robi. Dodałem do przykładu RollerShutter dwie takie "diody", które będą kopiować stan wyjść sterownika rolet - czyli informują użytkownika o aktualnie załączonym kierunku ruchu rolety.
PinStatusLed akceptuje 3 parametry w konstruktorze: pin źródłowy (czyli ten do skopiowania), pin docelowy (ten, który ustawiamy), oraz odwrócenie logiki (domyślnie wartość wynosi false - czyli nie odwracamy logiki, więc jeśli pin źródłowy ma HIGH, to na pin docelowy zapiszemy też HIGH).
Zalecałbym tworzenie PinStatusLed jako ostatnich elementów używanych w programie, dlatego, że stan tego elementu zostanie ustawiony w metodzie "onInit" w SuplaDevice.begin, która wywołuje inicjalizację pozostałych elementów zgodnie z kolejnością ich stworzenia. Oznacza to, że jeśli kopiujemy stan pinu 5 na pin 6, to jeśli PinStatusLed dla pin 6 zostanie stworzony przed elementem sterującym pinem 5, to pin 6 zostanie zainicjalizowany pinem 5, który nie jest jeszcze zainicjalizowany. W efekcie mogą pojawić się krótkie mignięcia diody - do czasu aż program nie wejdzie w normalną pętlę i nie zaktualizuje stanu.
Widzimy się na Supla Offline Party vol. 2 :!:

Return to “Arduino IDE”