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 5 cze 2025, o 02:41


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 15 sie 2014, o 17:23 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 111
    Pomógł: 0

    Witam,
    W jednym projekcie, chcę wykonać pewną akcję gdy klawisz jest wciśnięty 5 sekund. Nie mogę wykorzystać opóźnienia delay w pętli while. Próbuję to zrobić za pomocą przepełnienia Timera, w przerwaniu. Coś takiego mi wyszło i nawet działa, ale chciałbym sie poradzić bardziej doświadczonych ode mnie.
    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.

    Przerwanie wykonuje się co 10ms, co 1000 ms, sprawdzamy czy wciśnięty jest klawisz i zwiększamy zmienną sec, jeśli jest większa od 5 , to wywołujemy funkcje.
    Czy to dobry sposób?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sie 2014, o 18:24 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 28 sty 2013
    Posty: 426
    Pomógł: 36

    Ja bym to zrobił tak że gdy przycisk jest wciśnięty to wtedy zaczyna zliczać licznik. W chwili gdy zliczy do wartości cnt==500 to wykonujesz te instrukcje, jednakże jeżeli gdy zostanie puszczony zmienna cnt będzie zerowana. W tym momencie u Ciebie, gdy będziesz trzymał przycisk przez np 2 sek to po ponownym naciśnięciu będziesz czekał nie 5 sek a 3 sek.

    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sie 2014, o 19:22 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27406
    Lokalizacja: Szczecin
    Pomógł: 1043

    mat3usz napisał(a):
    Czy to dobry sposób?


    Polecam zdecydowanie Bluebooka i poczytanie - podpatrzenie na przykład funkcji typu Superdebounce() ... warto

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sie 2014, o 21:07 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 111
    Pomógł: 0

    Dzięki wielkie, czegoś takiego szukałem, ale jeszcze do projektów na końcu książki nie dotarłem.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 15 sie 2014, o 22:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 kwi 2013
    Posty: 418
    Lokalizacja: Rzeszów
    Pomógł: 102

    Jest oczywiście wiele sposobów, ale można też zastosować tryb pomiaru szerokości impulsu timer'a.
    Wszystko zależy od uC, ale ten w pełni sprzętowy sposób zwalnia zaangażowanie CPU w cały proces pomiaru.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 sie 2014, o 16:27 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 111
    Pomógł: 0

    Mam jeszcze małą zagwozdkę.
    Chciałbym wykorzystać przerwania(z tego przerwania korzysta funkcja SuperDebounce, przerwanie następuje co 10ms) Timera do odliczania czasu.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

    W programie po wciśnięciu przycisku ustawiam Timer3 na 2000(czyli 20 sekund), i po tych 20 sekundach powinna się zapalić dioda za pomocą funkcji LED_ON(), (docelowo będzie inna funkcja). Problem w tym że dioda zapalanie się od razu po wciśnięciu przycisku, a nie po odczekaniu 20 sekund.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 sie 2014, o 23:16 
    Offline
    Użytkownik

    Dołączył(a): 29 lip 2014
    Posty: 195
    Pomógł: 44

    Witam,

    za mało kodu umieściłeś, wygląda, że tu wszystko jest ok. Zmienna Timer3 jest oczywiście volatile ?

    Pozdrawiam, QuadMan.



    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: 7 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 15 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