ATNEL tech-forum
https://forum.atnel.pl/

MK_MATRIX_KBD i repetycja klawisza
https://forum.atnel.pl/topic23864.html
Strona 1 z 1

Autor:  Gienek_S [ 29 lip 2021, o 20:52 ]
Tytuł:  MK_MATRIX_KBD i repetycja klawisza

Witam.
Testuję tę bibliotekę i nie potrafię uzyskać repetycji klawiszy.
Konfiguracja biblioteki:
Składnia: [ Pobierz ] [ Ukryj ]
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 ]
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

Autor:  mirekk36 [ 29 lip 2021, o 21:48 ]
Tytuł:  Re: MK_MATRIX_KBD i repetycja klawisza

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ć

Autor:  Gienek_S [ 30 lip 2021, o 20:00 ]
Tytuł:  Re: MK_MATRIX_KBD i repetycja klawisza

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

efekt jest taki sam.

Autor:  mirekk36 [ 30 lip 2021, o 20:41 ]
Tytuł:  Re: MK_MATRIX_KBD i repetycja klawisza

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?

Autor:  Gienek_S [ 30 lip 2021, o 21:27 ]
Tytuł:  Re: MK_MATRIX_KBD i repetycja klawisza

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.

Autor:  mirekk36 [ 30 lip 2021, o 23:40 ]
Tytuł:  Re: MK_MATRIX_KBD i repetycja klawisza

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

Autor:  Gienek_S [ 31 lip 2021, o 08:02 ]
Tytuł:  Re: MK_MATRIX_KBD i repetycja klawisza

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)

Autor:  mirekk36 [ 31 lip 2021, o 12:01 ]
Tytuł:  Re: MK_MATRIX_KBD i repetycja klawisza

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 ;)

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/