Przekaźniki/Relay w SuplaDevice Arduino IDE

vajera
Posty: 387
Rejestracja: śr paź 31, 2018 7:58 am

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?
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

vajera pisze: czw 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
Posty: 387
Rejestracja: śr paź 31, 2018 7:58 am

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.
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

vajera pisze: czw 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:

Kod: Zaznacz cały

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 :!:
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Trzeba też włączyć zapisywanie i przywracanie stanu przekaźnika.
Widzimy się na Supla Offline Party vol. 2 :!:
vajera
Posty: 387
Rejestracja: śr paź 31, 2018 7:58 am

dzięki, postaram się to ogarnąć :-)
jaku2k
Posty: 830
Rejestracja: ndz maja 24, 2020 8:40 pm
Kontakt:

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 pisze: czw paź 01, 2020 2:02 pm

Kod: Zaznacz cały

#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

PS. Czekam na Supla Offline Party 2024
Awatar użytkownika
lukfud
Posty: 2091
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

jaku2k pisze: pn lip 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
Posty: 830
Rejestracja: ndz maja 24, 2020 8:40 pm
Kontakt:

Dziękuję za odpowiedź.
A czy mogę przypisać kilka przycisków do jednego przekaźnika? Pytam, bo jeszcze nie mam Arduino.
Pozdrawiam
Jakub

PS. Czekam na Supla Offline Party 2024
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

jaku2k pisze: wt lip 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 :!:
ODPOWIEDZ

Wróć do „Arduino IDE”