Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 10 lip 2025, o 01:06


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
    Autor Wiadomość
    PostNapisane: 7 maja 2025, o 21:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2017
    Posty: 586
    Pomógł: 0

    Witam.
    Chciałem podpowiedzi w temacie jak prawidłowo zaprojektować program dla Alarmu w przypadku naruszenia czujki .
    Czujka alarmowa jest bardzo czuła ponieważ jest na zewnątrz i jest naruszana przez owady , ptaki itp.
    Chciałem aby alarm uruchamiał nie po pierwszym naruszeniu tylko inaczej :
    - Po pierwszym naruszeniu czujki przez czas np 5 minut procesor czuwa i czeka czy nastąpi KOLEJNE naruszenie:
    - Jeśli nastąpi KOLEJNE naruszenie to wywołać chcę alarm.
    - Jeśli w czasie wspomnianych 5 minut nie nastąpi naruszenie układ wraca do stanu przed pierwszego naruszenia.

    Pytanie polega na tym jak fachowo napisać program , myśl mam taką : zdefiniować zmienną globalną np. uint8_t Stan Alarmu
    - uint8_t Stan Alarmu=0; // dla stanu stabilnego
    - uint8_t Stan Alarmu=1; // dla stanu po pierwszym wyzwoleniu czujki
    - uint8_t Stan Alarmu=3; // ALARM
    i w programie chcę wykożystać dla porównania i działania wartośc uint8_t Stan Alarmu .
    Czy takie podejście do programu będzię fachowe?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 maja 2025, o 20:53 
    Offline
    Użytkownik

    Dołączył(a): 09 lip 2019
    Posty: 121
    Pomógł: 12

    Hej,
    Nie mam pewności, czy dobrze wszystko zrozumiałem w pytaniu, ale jeśli chodzi o samą zmienną – można oczywiście do tego podejść tak jak napisałeś.Przy czym – jeśli dobrze rozumiem zmienna StanAlarmu ma być czymś w rodzaju implementacji „maszyny stanu”. Być może dobrze byłoby się zastanowić i użyć w tym przypadku enuma

    Np.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    I potem uzyc zmiennej w ten sposób
    AlarmStan stanAlarmu = ALARM_STABILNY;
    Jeśli z tego w ten sposób skorzystasz, to zamiast gdzieś w kodzie używać liczb 0, 1 i 3 będzie Ci prościej użyć wartości enuma – kod będzie czytelniejszy.

    Być może warto się zastanowić nad trochę innym podejściem z wykorzystaniem timerów programowych, które Mirek opisywał tutaj.
    http://mirekk36.blogspot.com/2012/10/ob ... a-cd3.html
    jest też poradnik tutaj https://www.youtube.com/watch?v=FA9gWa88snM

    Może narzędzie to nie jest najprostsze do zrozumienia, ale jak już się je ogarnie, to czasem ogromnie upraszczają konstrukcję programu.

    Jakiś czas temu zrobiłem swoją implementację na podstawie poradników mirka i dosłownie w kilkanaście minut zrobiłem coś co prawdopodobnie chciałbyś osiągnąć :)

    Możesz podejrzeć to co skrobnąłem – dołączam źródła (katalog src) i skompilowany program dla ATmega32 i ATmega644p (katalog bin) – odpaliłem to na zestawie ATB z m644 (nie mam pod ręką m32, ale powinno w teorii zadziałać)
    Załącznik:
    kmAlertTest.zip


    Wystarczy podłączyć diody do pinów portu PC0-PC4 i któryś z przycisków do portu PB0

    Dioda na PC4 miga sygnalizując pracę układu. Dioda na PC1 pokazuje czy jesteśmy aktualnie w trybie po pierwszym wyzwoleniu czujki, dioda PC0 sygnalizuje stan alarmu.

    Podstawą programiku była aplikacja testowa zawierająca obsługę przycisków i timerów programowych
    https://gitlab.com/c-mos/kmAvrTests/kmButtonsTest

    W stosunku do oryginału zmieniłem parę rzeczy:
    W pliku kmSoftwareTimer.h zmieniłe typ
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    W oryginale był zakres uint16_t – ale ten daje w tej implementacji maksymalny interwał oczekiwania jakieś 65 sekund, a chcemy mieć 5 minut
    W pliku config.h
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    W pliku Application.h
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Plusem jest to, że nic się nie blokuje w czasie działania programu. Do tego automatem załatwiane są pewne konteksty czasowe - typu przedłużenie okresu czuwania w przypadku kiedy przyjdzie kolejny sygnał czujki, czy przedłużenie alarmu w przypadku kiedy czujka zostanie wyzwolona ponownie i tak dalej.

    Mam nadzieję, że się przyda to do czegoś :-)

    Pozdrowienia.


    Autor postu otrzymał pochwałę

    Załączniki:

    Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 maja 2025, o 22:07 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2017
    Posty: 586
    Pomógł: 0

    Bardzo Ci dziękuje kolego moscow wszystko dzieki Tobie teraz zrozumiałem



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 10 maja 2025, o 14:45 
    Offline
    Użytkownik

    Dołączył(a): 09 gru 2016
    Posty: 47
    Pomógł: 4

    W mojej ocenie najłatwiej po prostu kupić zewnętrzną czujkę do alarmu która sama zadba o ignorowanie fałszywych alarmów takich jak ptak, kot, owady, itp. Zapewne masz czujkę do zastosowań wewnętrznych które są super czułe i wykryją nawet mysz, czujki zewnętrzne wykryją człowieka, ale nie generują fałszywych alarmów.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO