Jak stanem zmiennej sterować przekaźnikiem?

User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

auto oznacza automatyczną dedukcję typu zmiennej. Aby to działało, to zmienia musi być od razu inicjowana, np

Code: Select all

auto abc = new Test;
Wtedy abc będzie wskaźnikiem na typ Test.

U Ciebie zmienna była przeniesiona na zakres globalny (wcześniej miała zakres lokalny i żyła tylko w ramach metody setup).
Natomiast inicjalizacja została w setup.
Dlatego po przeniesieniu trzeba było jawnie podać typ zmiennej, bo nie dało się tego wydedukować automatycznie w momencie inicjalizacji.

Ps: nie ma tu nic obiektowego. Zakresy zmiennych to temat "wspólny" dla chyba wszystkich języków programowania i występuje chyba we wszystkich paradygmatach.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Temat zakresu, widoczności i trwałości zmiennych generalnie znam, jednak i tak nie rozumiem co do mnie piszesz. :oops:
Po co tworzymy tą zmienną relay1 w setupie, lokalnie, skoro po odpaleniu szkicu jej już nie widzi program. Jak ta zmienna ma się do mojej zmiennej przek1, od której stanu zależy strowanie przekaźnikiem?
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
klew
Posts: 13908
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Ta zmienna to wskaźnik na obiekt Relay. W setup tworzymy ten obiekt w pamięci i przechowujemy wskaźnik na niego. W ramach setup możesz wtedy za pomocą wskaźnika odwoływać się do tego obiektu i wykonywać na nim metody.
Gdy program wychodzi z metody setup, to zmienna wskaźnikowa przestaje istnieć. Natomiast obiekt Relay nadal istnieje, bo on był utworzony przez "new" i nigdzie go nie usunęliśmy.
Więc sam obiekt Relay działa nadal w programie i gdzieś w środku są przechowywane wskaźniki na ten obiekt.
Natomiast w loop nie możesz odwołać się do zmiennej, która była zmienną lokalną w metodzie setup.

To tak jakbyś miał kod

Code: Select all

void foo() {
  int a = 5;
}

int bar() {
  Int b = a;
  }
Ten kod się nie skompiluje, bo metoda bar nie zna zmiennej a, która jest lokalna dla metody foo.
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Ok, sprawę zakresu widoczności zmiennych rozumiem. Co do wskaźników, obiektówki to się uczę... :D
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

SOYER wrote: Sat Feb 18, 2023 4:58 pm Działa pięknie. Nawet cały czas wali po serialu stanem tego przekaźnika.
Możesz mi napisać co znaczyła ta linijka:
Supla::Control::Relay *relay1 = nullptr;

I dlaczego miałem usunąć "auto"? Co robi ten zapis "auto"?
Teraz jeśli ręcznie przełączam w aplikacji to natychmiast zmienia na taki jak wynika z mojej funkcji. Co jest oczywiście jak najbardziej logiczne.
Hej, a da się wyłączyć ten ciągły komunikat o stanie przekaźnika wysyłany na seriala z każdym obiegiem pętli?
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

SOYER wrote: Sun Feb 19, 2023 11:34 am
SOYER wrote: Sat Feb 18, 2023 4:58 pm Działa pięknie. Nawet cały czas wali po serialu stanem tego przekaźnika.
Możesz mi napisać co znaczyła ta linijka:
Supla::Control::Relay *relay1 = nullptr;
I dlaczego miałem usunąć "auto"? Co robi ten zapis "auto"?
Teraz jeśli ręcznie przełączam w aplikacji to natychmiast zmienia na taki jak wynika z mojej funkcji. Co jest oczywiście jak najbardziej logiczne.
Hej, a da się wyłączyć ten ciągły komunikat o stanie przekaźnika wysyłany na seriala z każdym obiegiem pętli?
Nie, jeśli nie zmodyfikujesz swojej funkcji, aby wykonywała się tylko raz, kiedy zmienia się stan.
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Dzięki, zrobione.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Powiedz mi jeszcze jak zmienić rozdzielczość odczytu DS18. Nie potrzebuję by mi to mierzyło z taką dokładnością, pełny stopień w zupełności wystarczy.
Bo mam taki problem, że po podłączeniu enkodera do mojego szkicu, urządzenie nie widzi zmian na enkoderze, kiedy akurat w serialu widzę, że wysyła mi dane o zmianach na czujnikach ds.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
User avatar
SOYER
Posts: 1623
Joined: Wed Aug 10, 2022 12:29 pm
Location: Kryry
Been thanked: 2 times

Post

Nie, to był fałszywy trop.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79

Return to “Pomoc”