Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 27 wrz 2021, o 04:14


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



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: 26667
Lokalizacja: Szczecin
Pomógł: 1016

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: 26667
Lokalizacja: Szczecin
Pomógł: 1016

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: 26667
Lokalizacja: Szczecin
Pomógł: 1016

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: 26667
Lokalizacja: Szczecin
Pomógł: 1016

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