Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Przerwania, z opóźnieniem

16 Wrz 2018 20:27 381 7
  • Poziom 10  
    Problem polega na zbudowaniu alarmu, posiadam prosty krótki program, który działa na zasadzie:

    Gdy alarm nie jest uzbrojony załączać będzie mi klika STREF oświetlenia z różnych czujników PIR, program testuje narazie na jednym czujniku i jednym wyjściu na Strefę Oświetleniową, gdy ogarnę owy problem rozbuduję go o kolejne czujniki i strefy. Alarm uzbrajam dotychczas w ramach testu przyciskiem, po uzbrojeniu alarm przechodzi po zadanym czasie w STAN UZBROJONY i czeka na wykrycie intruza, wszystko działa gdy Intruz zostaje wykryty alarm załącza się natychmiastowo, lecz ja potrzebuję opóźnić jeszcze jedną strefę o jakiś czas chodzi mi o możliwość późniejszczego wyłączenia alarmu za pomocą RFID i nie chcę, żeby automatycznie załączało mi alarm tylko dało mi chwilę na dołożenie breloka do czytnika. Czas na opuszczenie budynku działa.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Jak opóźnić zadziałanie syreny po wykryciu ruchu, gdy używam przerwań ?
  • Poziom 18  
    Witam, odpowiadając na ostatnie pytanie: tak samo jak gdybyś przerwań nie używał. Nie jestem programistą, ale próbowałbym Ci zacząć od nowa. Napisz jedną funkcję obsługująca zmiany na wejściach (tylko taką lepszą niż sprawdzenie stanu na porcie) i drugą dla "strefy", która będzie korzystała ze zdarzeń produkowanych przez pierwszą. Kolejne strefy analogicznie. Możesz zacząć bez przerwań, wyglądało to będzie tak samo.
  • Poziom 10  
    Wolałbym nie używać delay, ma to działać jako alarm i zadziałanie funkcji musi być pewne, muszę też wiedzieć kiedy alarm jest uzbrojony kiedy nie.
  • Poziom 18  
    Oczywiście że bez delay. Spróbuj tak jak napisałem. Pewnie nie jest to optymalne, ale myślę, że dobry początek. Zacznij od obsługi wejścia. Sprawdzasz stan przycisków (czujek) cyklicznie, nie w przerwaniu, i ustawiasz odpowiednie zdarzenie, np PRZYCISK_UP, PRZYCISK_DOWN.
  • Użytkownik usunął konto  
  • Poziom 10  
    zastosowałem Timer i nie działa, nie załącza mi alarmu wogóle.
    Zasada jest taka, jeżeli uzbrojony ma dać mi czas na wyjście i ma zacząć czuwać, następnie gdy wykryje ruch ma czekać 6 sekund, jeżeli nie rozbroje w tym czasie ma załączyć syrenę, jeżeli tak wyłącza alarm.

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 34  
    W setup() powinieneś zainicjować zmienne przycisk_czas oraz uzbrojenie_czas.
    Podpięcie przerwania do PRZYCISK powinno być również setup(), w funkcji zmiana() możesz sprawdzać stan alarmu (przycisk_czas < millis()) i wykonywać dalszą część kodu.
    W obecnym stanie, w pętli loop() nie wiadomo ile razy podpinasz przerwanie pod PRZYCISK i co z tego wynika, też nie wiadomo.
  • Użytkownik usunął konto