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



Teraz jest 14 lip 2026, o 14:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 22 sie 2018, o 13:15 
Offline
Nowy

Dołączył(a): 14 lut 2016
Posty: 7
Pomógł: 0

Witam wszystkich :)

Chciałbym zapytać brać programistyczną o poradę - burzę mózgów.
Otóż popełniam sterownik do klawiatury fizycznej do symulatora kolejnictwa MaSzyna. Sterownik generalnie działa ale może macie ciekawsze - bardziej finezyjne sposoby na sprawdzanie i reagowanie na zmianę stanów przycisków.

Działa to przykładowo tak:
(25 przycisków) w przerwaniu sczytuję do dwuwymiarowej tablicy stany przycisków poprzez multipleksowanie.
W pętli głównej używam dwóch for-ów i 2 switch case-ów (tzn. w jednym case jest 5 wystąpień drugiego case) do reagowania na zmiany w przyciskach, jak w poniższym przykładzie:

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



Warunek konieczny - wiele klawiszy może mieć różne stany w jednym czasie - kilka wciśnięte, kilka nie.

Czy macie jakieś fajne pomysły na to rozwiązanie? - pytanie retoryczne ;)



Ostatnio edytowano 22 sie 2018, o 13:51 przez adrian-info, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2018, o 13:25 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 232
Pomógł: 26

Tak na szybko.
Robisz coś w ten sposób
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Może po prostu zamiast case x
wywołać funkcje z parametrem czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

nie musiałbyś wtedy sprawdzać case tylko przekazać parametr do funkcji


Autor postu otrzymał pochwałę

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2018, o 13:30 
Offline
Nowy

Dołączył(a): 14 lut 2016
Posty: 7
Pomógł: 0

Nie wiem czy się dobrze rozumiemy, funkcje są z parametrem, a każdy klawisz robi co innego no i jakoś muszę jeszcze przelecieć przez dwuwymiarową tablicę :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2018, o 13:37 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 232
Pomógł: 26

OK
Ale nie do końca rozumiem po co Ci tablica?
Czy nie wystarczyło by po napotkaniu zwarcia np x1 y3
wpisać do zmiennej key wartość i dalej obrabiać już tylko jedna zmienną ?
Poniżej kawałek kodu
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Efektem działania funkcji jest kod naciśniętego klawisza
Można to zrobić zdecydowanie lepiej bez tych nieszczęsnych delay
Mirekk to pokazywał
Ale ja mam tak, bo tak to zostało napisane gdzieś w 2004 roku i jakoś tak mi się przykleiło

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2018, o 13:47 
Offline
Nowy

Dołączył(a): 14 lut 2016
Posty: 7
Pomógł: 0

Ahaaa, nie dodałem najważniejszego - wiele klawiszy może mieć różne stany. Klika zwarte, kilka rozwarte!!!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2018, o 14:05 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 232
Pomógł: 26

No to zmienia postać rzeczy.
No bo pojawia się cała masa zagadnień.
Zaglądasz w klawisze trafiają ci się dwa naciśnięte przyciski
No i teraz co?
Zaczynasz "obrabiać" kolejno 1 potem 2
Jak nie kontrolujesz czy przyciski zostały zwolnione to w następnym kółku znowu obrabiasz to samo.
Może tak ma być ale jak nie?
Wtedy musisz czekać na zwolnienie przycisków.
Nieco się to może rozrastać
Każdy przycisk ma wtedy stany "naciśnięty nieobsłużony" "naciśnięty obsłużony" "zwolniony"

Ciekawy temat.

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2018, o 16:40 
Offline
Nowy

Dołączył(a): 14 lut 2016
Posty: 7
Pomógł: 0

Więc działa to tak:
Reaguję na wciśnięcie przycisku jeden raz i na zwolnienie przycisku - inna reakcja.
Czyli każdy z przycisków ma 2 niezależne stany do obsłużenia.
Nie obsługuję kombinacji klawiszy :)
I każdy z klawiszy ma co innego do zrobienia :)

Jest to wysyłanie konkretnych kodów (znaków) klawiatury. Każdy przycisk ma inny zestaw klawiszy do wysłania w zależności czy jest wciśnięty czy zwolniony.

Chyba źle się wyraziłem to piszę jeszcze raz:
Nie chodzi o kod naciśniętego przycisku. Po naciśnięciu danego przycisku wysyłany jest kod klawisza klawiatury komputerowej do tego symulatora. Po zwolnieniu przycisku - wysyłany jest kolejny - inny kod klawisza klawiatury komputerowej.
Nie o samo wysyłanie mi jednak chodzi tylko o alternatywny sposób "przelecenia" przez tablicę dwuwymiarową i może coś innego niż switch case :)



Ostatnio edytowano 22 sie 2018, o 17:29 przez adrian-info, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2018, o 18:44 
Offline
Nowy

Dołączył(a): 14 lut 2016
Posty: 7
Pomógł: 0

Znam to rozwiązanie Mirka i niestety nie widzę zastosowania w moim przypadku - oczywiście z niektórych mechanizmów skorzystałem ;)

Dodam, że niektóre przyciski na fizycznej klawiaturze są bistabilne a niektóre monostabilne. Stąd potrzeba pamiętania w tablicy stanu aktualnego i poprzedniego przycisków. Przynajmniej tak to mi się wymyśliło :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sie 2018, o 19:16 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 232
Pomógł: 26

To może tablica jednowymiarowa 25 elementów (każdy określa stan jednego przycisku)
Każdy element tablicy może opisywać 256 stanów przycisku
Nakładając maski można uzyskać niezłe efekty
Na przykład |= 0b000000001 coś tam
|= 0b00000010 inne coś tam
zobacz jakie możliwości ?!


Autor postu otrzymał pochwałę

_________________
Jestem na GG 31324
Nowy soft, nowa nadzieja.



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

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO