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 w 2025? 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 7 maja 2025, o 09:31


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
     Tytuł: Cuda dziwy?
    PostNapisane: 23 paź 2021, o 12:05 
    Offline
    Nowy

    Dołączył(a): 05 paź 2021
    Posty: 24
    Pomógł: 0

    Tak sobie raczkuję w świecie AVR i natknąłem się na wpis na blogu Mirka o debouncingu przycisków. Wrzuciłem jego kod do zabawy z wyrzucaniem efektów do terminala i być może czegoś nie widzę z niedospania, ale jakim cudem kiedykolwiek "BUTTON_PRESSED" jest "0" po naciśnięciu przycisku???

    Obrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Cuda dziwy?
    PostNapisane: 23 paź 2021, o 13:34 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1168
    Lokalizacja: Kraków
    Pomógł: 93

    Jeśli:
    1) podłączysz przycisk pomiędzy pin (u Ciebie) PC5 i GND
    2) ustawisz wewnętrzne podciągnięcie do Vcc na tym pinie
    3) wciśniesz przycisk
    to właśnie wtedy BUTTON_PRESSED będzie miało wartość 0 :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Cuda dziwy?
    PostNapisane: 23 paź 2021, o 17:07 
    Offline
    Nowy

    Dołączył(a): 05 paź 2021
    Posty: 24
    Pomógł: 0

    Hm, tylko wówczas pierwszy warunek [if] powinien być przecież niespełniony, czyli na terminal w ogóle nie powinno pójść [Serial.print]. A tu zazwyczaj, kiedy naciskam przycisk BUTTON_PRESSED jest 1, czyli tak jak powinno być, skoro jest negacją [!(PINC & BUTTON)]. Czyli domyślny stan linii to 1, zwieram przyciskiem = 0, PINC to same 1 co z zanegowaną maską przycisku daje 1&&1. A tu jednak wypisuje 0 i w ogóle wykonuje ten fragment kodu.
    To wszystko w terminalu to efekt po naciśnięciu przycisku.

    ps. jeśli ostatni linijka dodaje "zwłokę" postaci: else if (key_lock && !BUTTON_PRESSED) key_lock++; to wszystko jest w porządku. Tzn. jak dotychczas nie udało mi się wyłapać "zera".



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Cuda dziwy?
    PostNapisane: 23 paź 2021, o 19:18 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 mar 2015
    Posty: 323
    Lokalizacja: Rybnik
    Pomógł: 23

    Bo to jest reakcja na wciśnięcie przycisku. To i zawsze po wciśnięciu dostaniesz 1 czyli naciśnięto przycisk. Jak chcesz wyłapać zero, to po else if zrób klamry i te twoje serial.print i powinno pokazać zero.
    Tak jak piszę, to jest TYLKO reakcja na wciśnięcie przycisku a nie na jego zwolnienie.
    Mirek dokładnie wyjaśnia to na swoim blogu.

    Poczytaj tu:
    http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

    Z resztą, ty nie masz oczekiwać zera, ty masz wykonać jakieś zadanie pod wpływem jakieś reakcji. I teraz już zgłupiałem o jakie zero ci chodzi? Zero będziesz miał nie naciskając klawisza.

    _________________
    http://www.avrboss.pl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Cuda dziwy?
    PostNapisane: 24 paź 2021, o 05:03 
    Offline
    Nowy

    Dołączył(a): 05 paź 2021
    Posty: 24
    Pomógł: 0

    No to wyspałem się i widzę gdzie była pułapka - w potraktowaniu makra BUTTON_PRESSED jako stałej/przypisanej wartości na czas wykonywania jednej pętli. Przecież to jest odczyt aktualnego/chwilowego stanu portu. O ile w chwili wciśnięcia przycisku, spełnia warunek w pierwszym {if}, więc program jest "wpuszczany" do tego bloku warunkowego, to będąc już w nim, wskutek drgań styków, daje się podczas wykonywania "przyłapać" na rozwartych, co pokazuje ponowny odczyt rejestru z maską [BUTTON_PRESSED to przecież (PINC & (1<<PC5))] na potrzeby wypisania do terminala.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Cuda dziwy?
    PostNapisane: 24 paź 2021, o 09:18 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 26 sty 2016
    Posty: 1168
    Lokalizacja: Kraków
    Pomógł: 93

    Zauważ, że warunek (PINC & (1<<PC5)) to jest iloczyn bitowy, czyli sprawdzasz TYLKO wejście PC5, ignorując pozostałe



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
     Tytuł: Re: Cuda dziwy?
    PostNapisane: 24 paź 2021, o 15:46 
    Offline
    Nowy

    Dołączył(a): 05 paź 2021
    Posty: 24
    Pomógł: 0

    @Mahref, tak, tak, oczywiście - stąd maska. W sumie nie interesują mnie stany pozostałych bitów. Ale przynajmniej snu z powiek nie mam spędzonych tym, dlaczego (pozornie) nie spełniając warunku {if'a} to działało ;)



    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 0 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