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 18 kwi 2025, o 08:06


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
    Autor Wiadomość
    PostNapisane: 29 lip 2021, o 20:52 
    Offline
    Nowy

    Dołączył(a): 29 lip 2021
    Posty: 4
    Pomógł: 0

    Witam.
    Testuję tę bibliotekę i nie potrafię uzyskać repetycji klawiszy.
    Konfiguracja biblioteki:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

    BEEP sygnalizuje mi nowe naciśnięcia klawisza. I to działa poprawnie. Ale jak przytrzymam dowolny klawisz to nie jest on repetowany bo powinien mi powtarzać tego BEEP-a.
    Co jest nie tak ?
    P.S. Procesor ATMega128A



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 lip 2021, o 21:48 
    Offline
    Moderator
    Avatar użytkownika

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

    teraz nie pamiętam szczegółów i nie mam jak sprawdzić - ale czy nie próbowałeś wyłączyć zdarzenia

    ENABLE_ON_KEY_LONG_PRESS_EVENT

    czyli ustawić go na zero? Bo jak ono jest włączone to chyba (ale może się mylę) nie będzie repetycji bo to się troszkę kłóci

    sprawdź i daj znać

    _________________
    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: 30 lip 2021, o 20:00 
    Offline
    Nowy

    Dołączył(a): 29 lip 2021
    Posty: 4
    Pomógł: 0

    obojętnie czy:
    #define ENABLE_ON_KEY_LONG_PRESS_EVENT 1
    czy:
    #define ENABLE_ON_KEY_LONG_PRESS_EVENT 0

    efekt jest taki sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 lip 2021, o 20:41 
    Offline
    Moderator
    Avatar użytkownika

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

    wiesz co? Właśnie sprawdziłem bibliotekę i działa idealnie

    Weź sobie to przetestuj panie kochany najpierw na pliku main.c który dostałeś razem z biblioteką. Działa "od kopa" po pobraniu, i to na tych ustawieniach które pokazałeś z pliku *.h

    ja niestety nie mam aż na tyle czasu żeby teraz analizować twój main.c ... więc najpierw jak mówię zacznij od kodu w main.c z pliku biblioteki i jak tam coś nie będzie działało to wtedy napisz co ok?

    _________________
    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: 30 lip 2021, o 21:27 
    Offline
    Nowy

    Dołączył(a): 29 lip 2021
    Posty: 4
    Pomógł: 0

    repetycja działa jak zmodyfikowałem funkcję "uint8_t GetKey (void)" do postaci:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Funkcje biblioteczne key_up i key_down same nie repetują klawisza.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 lip 2021, o 23:40 
    Offline
    Moderator
    Avatar użytkownika

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

    Gienek_S napisał(a):
    Funkcje biblioteczne key_up i key_down same nie repetują klawisza.

    Ale proszę cię (i bez urazy) ale nie opowiadaj bajek bo zastanawiam się czy to ty mi tłumaczysz jak działa moja biblioteka ? czy raczej zapytałeś jak działa ? ;)

    Ne wiem w ogóle co ty wymyślasz z tym GetKey ... to jest niestety absurd, dlatego, że jak się ustawi repetycję w bibliotece to funkcja key_long_press() czyli callback jest wywoływany automatycznie zgodnie z interwałem czasu określonym w #define AUTO_REPEAT_RIME, i to do niej wstaw sobie BEEP'a swojego

    _________________
    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: 31 lip 2021, o 08:02 
    Offline
    Nowy

    Dołączył(a): 29 lip 2021
    Posty: 4
    Pomógł: 0

    Przepraszam bardzo że cię irytują moje wypowiedzi. Ja tylko opisałem jak u mnie to działa, nie miałem zamiaru Ci nic tłumaczyć jak działa Twoja biblioteka.

    Jeszcze raz spróbuję przekazać moje spostrzeżenia.
    Zakładam że w pliku "mk_keyboard.h" mamy:
    #define ENABLE_ON_KEY_DOWN_EVENT 1
    #define ENABLE_ON_KEY_UP_EVENT 1
    #define ENABLE_ON_KEY_LONG_PRESS_EVENT 1
    #define LONG_PRESS_TIME 50 // min = 20, default = 50, MAX = 254!
    #define LONG_PRESS_AS_AUTO_REPEAT 1 // 0 - DISABLE AUTO REPEAT, 1 - ENABLE AUTO REPEAT
    #define AUTO_REPEAT_RIME 15 // min = 1, default = 15, MAX = (LONG_PRESS_TIME-1) !!!

    W programie głównym wywołuję tylko funkcję MK_KBD_EVENT(); Czyli wszystko co biblioteka zwraca znajduje się odpowiednio w:
    1.) void key_down( uint8_t key_nr )
    2.) void key_up( uint8_t key_nr )
    3.) void key_long_press( uint8_t key_nr )

    tylko to co zauważyłem to funkcje 1. i 2. zwraca tylko raz klawisz. Natomiast funkcja 3.) zwraca klawisz po czasie LONG_PRESS_TIME po czym zwraca klawisz repetowany.
    I dlatego żeby uzyskać w jednej funkcji zwrot naciśniętego klawisza zrobiłem taką sumę logiczną tych dwóch zdarzeń w uint8_t GetKey (void)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 31 lip 2021, o 12:01 
    Offline
    Moderator
    Avatar użytkownika

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

    Gienek_S napisał(a):
    Przepraszam bardzo że cię irytują moje wypowiedzi.

    Nie nie irytują tylko się zdziwiłem - ale pewnie źle zrozumiałem - więc przepraszam


    Gienek_S napisał(a):
    tylko to co zauważyłem to funkcje 1. i 2. zwraca tylko raz klawisz. Natomiast funkcja 3.) zwraca klawisz po czasie LONG_PRESS_TIME po czym zwraca klawisz repetowany.
    I dlatego żeby uzyskać w jednej funkcji zwrot naciśniętego klawisza zrobiłem taką sumę logiczną tych dwóch zdarzeń w uint8_t GetKey (void)


    ok teraz rozumiem po co robisz sobie ten get_key - ale zastanawiam się dlaczego ?

    No bo teraz już doszliśmy razem do tego że jednak repetycja działa ;) i tak jak autor to obmyślił czyli tylko dla funkcji nr 3 jak napisałeś.

    Spróbuj opisać w czym masz problem ? bo np jeśli w funkcji nr 1 masz coś tam zrobić ale dokładnie to samo chciałbyś żeby się wykonywało podczas repetycji - to przecież nie potrzebne ci ŻADNE getkeye - tylko np, załóżmy że chcę zmieniać stan diody LED za każdym razem tak ?

    No to napisz sobie zewnętrzną funkcję 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 teraz wywołuj że tę funkcję z:

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


    a także z:

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


    to jest właściwa droga i właściwe podejście - te funkcje 1-3 są niejako zdarzeniami i wystarczy je oprogramować w dowolny sposób. Czyli nie wstawiaj do nich jakiegoś kodu, szczególnie jeśli ma być powtarzalny tylko włóż ten kod do właściwej nowej funkcji i wywołuj ją z metod na których ci zależy. To troszkę tak jak w programowaniu prawie że obiektowym ;)

    _________________
    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO