Przekaźniki/Relay w SuplaDevice Arduino IDE

vajera
Posts: 448
Joined: Wed Oct 31, 2018 7:58 am

Post

mam pytanie-do sterowania nawodnieniem używam archaicznego już softu własnej produkcji zaszytego w Sonoff 4CH Pro - z uwagi na dziwną konstrukcję pomp - otwarcie i zamknięcie zaworu odbywa się za pomocą krótkich impulsów-jak w przekaźniku bistabilnym.
Gdybym chciał wykorzystać nową bibliotekę to potrzebowałbym czego w rodzaju BistableRelay z wirtualnym pinem stanu zapisywanym w EEPROM - pytanie brzmi czy muszę to sam zaimplementować czy przeoczam jakieś gotowe rozwiązanie?
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

vajera wrote: Thu Mar 18, 2021 8:48 pm mam pytanie-do sterowania nawodnieniem używam archaicznego już softu własnej produkcji zaszytego w Sonoff 4CH Pro - z uwagi na dziwną konstrukcję pomp - otwarcie i zamknięcie zaworu odbywa się za pomocą krótkich impulsów-jak w przekaźniku bistabilnym.
Gdybym chciał wykorzystać nową bibliotekę to potrzebowałbym czego w rodzaju BistableRelay z wirtualnym pinem stanu zapisywanym w EEPROM - pytanie brzmi czy muszę to sam zaimplementować czy przeoczam jakieś gotowe rozwiązanie?
BistableRelay jako taki nie zna stanu przekaźnika, bo założenie jest takie, że mogą być inne źródła sterowania takim przekaźnikiem. Dlatego ta klasa wymaga podania GPIO, z którego jest odczytywany stan.
Rozumiem, że w Twoim przypadku zawory są sterowane wyłącznie z impulsów przekaźnika i chciałbyś założyć, że zawsze znasz aktualny stan na podstawie ilości jego przełączeń, tak?
Widzimy się na Supla Offline Party vol. 2 :!:
vajera
Posts: 448
Joined: Wed Oct 31, 2018 7:58 am

Post

dokładnie tak-teraz soft też zapisuje to w pamięci stałej i to jest taki wirtualny pin stanu-pompa niestety nic takiego nie ma.
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

vajera wrote: Thu Mar 18, 2021 9:49 pm dokładnie tak-teraz soft też zapisuje to w pamięci stałej i to jest taki wirtualny pin stanu-pompa niestety nic takiego nie ma.
Programujesz samemu?

Wydaje mi się, że wystarczyłoby podziedziczyć po klasie BistableRelay, dodać sobie "bool currentState".
Następnie nadpisać metodę "isOn()" aby zwrcała currentState.
Nadpisać metodę "internalToggle()" aby wywoływała najpierw internalToggle z klasy bazowej, a potem robiła: currentState = !currentState;
I na koniec nadpisać metodę "onInit" mniej więcej tak:

Code: Select all

void WaterRelay::onInit() {
  if (stateOnInit == STATE_ON_INIT_ON ||
      stateOnInit == STATE_ON_INIT_RESTORED_ON) {
    currentState = true;
  } else {
    currentState = false;
  }
  Supla::Io::pinMode(channel.getChannelNumber(), pin, OUTPUT);
}
Widzimy się na Supla Offline Party vol. 2 :!:
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

Trzeba też włączyć zapisywanie i przywracanie stanu przekaźnika.
Widzimy się na Supla Offline Party vol. 2 :!:
vajera
Posts: 448
Joined: Wed Oct 31, 2018 7:58 am

Post

dzięki, postaram się to ogarnąć :-)
jaku2k
Posts: 861
Joined: Sun May 24, 2020 8:40 pm

Post

Witam,
zaczynam przygodę z Arduino IDE (nie znam C/C++). Moim głównym celem jest dodanie obsługi przekaźników i przycisków dla Arduino MEGA. Proszę wybaczyć, jeżeli poniższe pytania są trywialne, bądź dotyczą języka, a nie SuplaDevice'a.
klew wrote: Thu Oct 01, 2020 2:02 pm

Code: Select all

#include <supla/control/relay.h>

// setup
auto r1 = new Supla::Control::Relay(pin1); // przekaźnik na pin1 sterowany stanem wysokim
auto r2 = new Supla::Control::Relay(pin2, false); // przekaźnik na pin2 sterowany stanem niskim
Czy dobrze rozumiem, że od tego momentu r1 jest równoznaczne z Supla::Control::Relay(pin1)?
Czy niewpisanie false w nawiasie po Supla::Control::Relay(pin2 oznacza to samo, co wpisanie true?
Pozdrawiam
Jakub
User avatar
lukfud
Posts: 2117
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa

Post

jaku2k wrote: Mon Jul 12, 2021 7:52 pm Czy dobrze rozumiem, że od tego momentu r1 jest równoznaczne z Supla::Control::Relay(pin1)?
Czy niewpisanie false w nawiasie po Supla::Control::Relay(pin2 oznacza to samo, co wpisanie true?
Tak i tak.
https://www.facebook.com/groups/supladiy/
jaku2k
Posts: 861
Joined: Sun May 24, 2020 8:40 pm

Post

Dziękuję za odpowiedź.
A czy mogę przypisać kilka przycisków do jednego przekaźnika? Pytam, bo jeszcze nie mam Arduino.
Pozdrawiam
Jakub
User avatar
klew
Posts: 8763
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

jaku2k wrote: Tue Jul 13, 2021 11:39 am Dziękuję za odpowiedź.
A czy mogę przypisać kilka przycisków do jednego przekaźnika? Pytam, bo jeszcze nie mam Arduino.
Możesz robić dowolne kombinacje. Ogranicza Cię logika oraz niewielka pamięć RAM Arduino ;)

Napisz co dokładnie chciałbyś zrobić.
Widzimy się na Supla Offline Party vol. 2 :!:

Return to “Arduino IDE”