Autor Wątek: Aplikacja DomowyKokpit  (Przeczytany 62055 razy)

0 użytkowników i 2 Gości przegląda ten wątek.

Offline Flanker

  • 13 WELT
  • *
Odp: Aplikacja DomowyKokpit
« Odpowiedź #300 dnia: Sierpnia 23, 2011, 23:15:30 »
Chodzi o nieco inną rzecz.

Praca przepustnicy A-10 jest trochę podobna do tej znanej nam z F-16 (cut off / military power / AB) a w przypadku A-10 wygląda tak: cut off / military power.

O ile w Falconie punkt przejściowy z cut off na military (OF), oraz z military na AB można ustawić z poziomu menu to w A-10 nie ma takiej możliwości. Przejście przepustnicy z C/O na military jest realizowane przez wciśnięcie odpowiednich klawiszy na klawiaturze, a przejście na C/O z military przez inne klawisze.

Przepustnicę skonstruowałem w taki sposób że mam mechaniczną blokadę dźwigni na pozycji 10% wychylenia dźwigni. No i teraz rzecz w tym żeby program rozpoznał przesunięcie dźwigni przez próg 10% w górę i wysłał jakiś klawisz X oraz rozpoznał przejście przez próg w dół i wysłał klawisz Y.

W samej zaś grze w menu, za pomocą ustawień osi ustawię w zakresie 0-10% deadzone, tak że gra będzie widzieć realne położenie dźwigni 10% jako 0%.

Mam nadzieję że przedstawiłem problem zrozumiale

Odp: Aplikacja DomowyKokpit
« Odpowiedź #301 dnia: Sierpnia 24, 2011, 06:54:22 »
Dzięki za wyjaśnienia.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #302 dnia: Sierpnia 24, 2011, 17:57:40 »
Flanker, poniżej prosty skrypt, który robi to o co Ci chodzi:

script "A-10 throttle"
{
   variable $tmp { type = int; value = -1; }

   variable $LeftJoy_axis_X { module = "GameControllersInput"; id = "LeftJoy:axis_X"; type = int; direct = in; }
   
   variable_changed $LeftJoy_axis_X
   {
      if ($LeftJoy_axis_X < 10)
      {
         if ($tmp <> 0)
         {
            KeyboardOutput:SendShortcut( "cośtam" );
            $tmp = 0;
         }
      }
      else
      {
         if ($tmp <> 1)
         {
            KeyboardOutput:SendShortcut( "cośtam innego" );
            $tmp = 1;
         }
      }     
   }
}

Oś oczywiście trzeba podstawić inną i skonfigurować ją najlepiej na zakres 0-100. Do tego najlepiej ustawić sprawdzanie stanu osi na tryb cykliczny np. co 100ms.

Offline Flanker

  • 13 WELT
  • *
Odp: Aplikacja DomowyKokpit
« Odpowiedź #303 dnia: Sierpnia 24, 2011, 21:40:23 »
Codeking, naprawdę szczere dziękuję. Teraz wyjeżdżam na kilka dni i już sobie obiecywałem, że gdy wrócę to trzeba będzie przebrnąć przez te 20 stron żeby opanować cały ten system, a tu taki prezent. Tak czy inaczej poświęce tej aplikacji uwagę po powrocie.

Jeszcze raz dziękuje ;)

Odp: Aplikacja DomowyKokpit
« Odpowiedź #304 dnia: Sierpnia 25, 2011, 18:43:51 »
Przyjrzałem się bliżej możliwością sterowania MJoya za pomocą HSC i spotkała mnie miła niespodzianka. Stosując SVMapper do sterowania MJoya mamy pewne ograniczenia związane z tym programem. Wymienię te najważniejsze. SVMapper widzi tylko 4 kontrolery, można nim programować 64 przyciski oraz 16 dwupozycyjnych przełączników. Ta ostatnia cech mocno ogranicza zastosowanie MJoya.
Próbując rozwiązać problem Flankera zrobiłem dzisiaj testy w konfiguracji MJoy sterowany przez HSC. Okazuje się, że HSC daje możliwość podłączenia zamiast 64 przycisków 64 przełączniki dwupozycyjne co jest rewelacją, ponieważ zawsze brakowało możliwości podłączenia większej ilości tych przełączników.
Przetestowałem 2 skrypty. W skrypcie MJoy-toggle-push jest przykład podłączenie przełączika 3 pozycyjnego, który działa jako przełącznik oraz "przycisk". Jest to przykład dla Flankera.
Jeśli coś pomieszałem to proszę codeking o korekcję.
script "FalconAF - MJoy-toggle"
{
variable $MP71_przycisk_003 { module = "GameControllersInput"; id = "MP71:przycisk_003"; type = bool; direct = in; }
variable $MP71_przycisk_004 { module = "GameControllersInput"; id = "MP71:przycisk_004"; type = bool; direct = in; }
variable_changed $MP71_przycisk_003
//Master Arm On
{
if ( $MP71_przycisk_003 )
{
KeyboardOutput :  SendShortcut ( " +m ");
}
else
{
KeyboardOutput : SendShortcut  ( " ^m ");
}
}
variable_changed $MP71_przycisk_004
//Master Arm Sim
{
if ( $MP71_przycisk_004)
{
KeyboardOutput :  SendShortcut ( " %m ");
}
else
{
KeyboardOutput :  SendShortcut ( " ^m ");
}
}
}
script "FalconAF - MJoy-toggle-push"
{
variable $MP71_przycisk_003 { module = "GameControllersInput"; id = "MP71:przycisk_003"; type = bool; direct = in; }
variable $MP71_przycisk_004 { module = "GameControllersInput"; id = "MP71:przycisk_004"; type = bool; direct = in; }

variable_changed $MP71_przycisk_003
//Master Arm On
{
if ( $MP71_przycisk_003 )
{
KeyboardOutput :  SendShortcut ( " +m ");
}
else
{
KeyboardOutput : SendShortcut ( " ^m ");
}
}
variable_changed $MP71_przycisk_004
//Freeze
{
if ( $MP71_przycisk_004)
{
KeyboardOutput :  SendShortcut ( " +p ");
}
else
{
KeyboardOutput : SendShortcut ( " +p ");
}
}
}

Odp: Aplikacja DomowyKokpit
« Odpowiedź #305 dnia: Sierpnia 25, 2011, 19:56:52 »
Mała korekta, ten kod:

variable_changed $MP71_przycisk_004
//Freeze
{
if ( $MP71_przycisk_004)
{
KeyboardOutput :  SendShortcut ( " +p ");
}
else
{
KeyboardOutput : SendShortcut ( " +p ");
}
}
}


jest nadmiarowy, tzn. warunek jest niepotrzebny bo w zależności od jego spełnienia lub nie - wykonana zostanie ta sama czynność. Krótszy kod:

variable_changed $MP71_przycisk_004
//Freeze
{
KeyboardOutput :  SendShortcut ( " +p ");
}
}

Powyższy kod zrobi dokładnie to samo, przy każdej zmianie stanu (on->off lub off->on) wysłana zostanie kombinacja SHIFT+P.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #306 dnia: Sierpnia 25, 2011, 22:11:35 »
Dzięki za korektę i gratulacje za HSC jest rewelacyjny.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #307 dnia: Sierpnia 26, 2011, 08:03:26 »
Pod wpływem sugesti codeking zrobiłem dalsze testy. Jeśli zrobię uproszczenie kodu np. na
variable_changed $MP71_przycisk_004
//Freeze
{
   if ( $MP71_przycisk_004)
   {
      KeyboardOutput : SendShortcut ( " +p ");
   }
}
to przełącznik zachowuje się w ten sposób, że włącza funkcję "Freez", ale po przełączeniu na pozycję środkową jej nie wyłącza. Dopiero powtórne przełączenie przełącznika ją wyłącza.
Dodanie funkcji Else do If daje prawidłowe działanie przełącznika.
1.W tym miejscu pytanie. Może to zjawisko jest związane z programem MJoya? Nasuwa się kolejne pytanie dlaczego SVMapper nie potrafi programowo zamienić na mapie przyciski na przełączniki a HSC potrafi to zrobić?
2.Kolejne pytanie jest powiązane z 1). Jeśli będziemy realizować programowanie klawiszy (funkcje symulatora) przy pomocy 2 programów SVMapper oraz HSC to pozycje mapy, które realizuje HSC powinny być puste w SVMapper? Taką sytuację będzie miał Flanker.
3.Próbowalem testować powyższy przykład przy pomocy 2 funkcji : SendKeysDown (...) oraz SendKeysUp (...), ale bez powodzenia. Czy jest to związane z tym, że np. funkcja SendKeysDown (...) działa w ten sposób, że zbiór klawiszy jest wysyłany cały czas do PC? Jeśli tak to nie wiadomo jak na to zareaguje symulator. Tutaj nasuwa się kolejne pytanie dla jakich funkcji symulatora stosować powyższe funkcje HSC?

Odp: Aplikacja DomowyKokpit
« Odpowiedź #308 dnia: Sierpnia 26, 2011, 18:32:48 »
1.W tym miejscu pytanie. Może to zjawisko jest związane z programem MJoya?

Nie, to jest wynik zastosowania warunku if który pozwala wysłać kombinację klawiszy tylko wtedy gdy przycisk jest wciśnięty.

Cytuj
2.Kolejne pytanie jest powiązane z 1). Jeśli będziemy realizować programowanie klawiszy (funkcje symulatora) przy pomocy 2 programów SVMapper oraz HSC to pozycje mapy, które realizuje HSC powinny być puste w SVMapper? Taką sytuację będzie miał Flanker.

Zdecydowanie tak, każdy przycisk powinien być skonfigurowany w SVMapper lub w HSC.

Cytuj
3.Próbowalem testować powyższy przykład przy pomocy 2 funkcji : SendKeysDown (...) oraz SendKeysUp (...), ale bez powodzenia. Czy jest to związane z tym, że np. funkcja SendKeysDown (...) działa w ten sposób, że zbiór klawiszy jest wysyłany cały czas do PC?

Funkcja SendKeysDown(...) naciska klawisze i nie zwalnia ich, czyli tak jakbyś nacisnął jakiś klawisz i cały czas trzymał. Funkcja SendKeysUp(...) zwalnia klawisze (puszcza).

Cytuj
Jeśli tak to nie wiadomo jak na to zareaguje symulator. Tutaj nasuwa się kolejne pytanie dla jakich funkcji symulatora stosować powyższe funkcje HSC?

Można je zastosować tam, gdzie trzymanie jakiegoś klawisze ma sens. W symulatorach lotniczych to nie ma za bardzo sensu, ale np. w grach wyścigowych nie kierujemy samochodem przy pomocy strzałek na klawiaturze to można symulować naciśnięcie i trzymanie np. strzałki do góry co najczęściej odpowiada przyśpieszeniu.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #309 dnia: Sierpnia 26, 2011, 19:12:27 »
Dzięki za wyjaśnienia. Jeszcze jedno pytanie dotyczące tego fragmentu:
variable_changed $MP71_przycisk_004
//Freeze
{
KeyboardOutput :  SendShortcut ( " +p ");
}
}
Czy celowo nie wprowadzileś warunku IF. Tak jak opisałem w ostatnim post ten uproszczony kod ale z if bez else wyłącza funkcję "freez" po powtórnym przełączeniu. Czy jest to prawidłowe działanie?
Uproszczony kod bez if daje błąd przy kompilacji.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #310 dnia: Sierpnia 26, 2011, 19:44:41 »
Tak, celowo usunąłem IF. W ten sposób przy każdej zmianie stanu przycisku (z off na on i z on na off) wysyłana jest kombinacja klawiszy.

Poprawiony kod:
variable_changed $MP71_przycisk_004
//Freeze
{
KeyboardOutput :  SendShortcut ( " +p ");
}

Odp: Aplikacja DomowyKokpit
« Odpowiedź #311 dnia: Sierpnia 27, 2011, 11:59:18 »
Po wykonaniu testów w układzie MJoy - HSC - SVMapper chciałbym zrobić krótkie posumowanie.
1.SVMapper został zaprojektowany pod kątem prostej obsługi, dlatego ma ograniczone możliwości, które ograniczają ilość przełączników do 16.
2.Tych ograniczeń nie ma HSC, ale jest wymagany skrypt opisujacy działanie MJoy w relacji z przyciskami oraz przełącznikami.
To są dwa główne wnioski.
Z tych wniosków wynika praktyczne wykorzystanie MJoya "oprogramowanego" przez HSC. Nie ma podziału mapy matrycy na przyciski oraz przełączniki. Możemy zaprogramować 64+16 przełączników.
Tutaj uwaga:
Nie analizowałem enkoderów, ponieważ w konfiguracji MJoya w HSC nie ma takiej opcji. Można do konfigurowania enkoderów zastosować SVMapper a do pozostałych funkcji HSC.
Przykłady zastosowania przycisków oraz przełączników w relacji MJoy - HSC.
Założenia
przycisk ma dwa stany niestabilne ON - wciśnięty (zwarcie styków), OFF - wyciśnięty (rozwarcie styków)
przełącznik ma dwa stany stabilne ON - wciśnięty (zwarcie styków), OFF - wyciśnięty (rozwarcie styków)
Przykład 1
Przycisk ma wysłać zbiór klawiszy tylko przy naciśnięciu ON
variable_changed $MP71_przycisk_002
//HUD color przycisk - wysyła zbiór tylko przy naciśnięciu przycisku
   {
   if ($MP71_przycisk_002)
         {
            KeyboardOutput : SendShortcut ( " +^%c ");
         }
   }

Pytanie co by było gdyby nie było funkcji IF. W tym przypadku zbiór klawiszy byłby wysłany zarówno przy wciśnięciu ON jak i wyciśnięciu OFF - przykład 2.

Przykład 2.
variable_changed $MP71_przycisk_002
//HUD color przycisk-wysyła zbiór przy naciśnięciu i przy puszczeniu przycisku
         {
            KeyboardOutput : SendShortcut ( " +^%c ");
         }
Przykład 3.
Przełącznik ma wysłać klawisz "p" przy przełączaniu na pozycje ON oraz OFF.
variable_changed $MP71_przycisk_004
//Freeze
         {
            KeyboardOutput :  SendShortcut ( " +p ");
         }

Przykład 4.
Przełącznik ma wysłać dwa różne zbiory klawiszy przy załączaniu oraz wyłączaniu.
variable_changed $MP71_przycisk_003
//Master Arm On, OFF przełącznik 2 pozycyjny
   {
      if ( $MP71_przycisk_003 )
         {
            KeyboardOutput :  SendShortcut ( " +m ");
         }
      else
         {
            KeyboardOutput : SendShortcut ( " ^m ");
         }
   }
Mam nadzieję, że ten krótki poradnik pomoże pisać skrypty dla MJoy w HSC.

Odp: Aplikacja DomowyKokpit
« Odpowiedź #312 dnia: Sierpnia 28, 2011, 01:06:12 »
Nie analizowałem enkoderów, ponieważ w konfiguracji MJoya w HSC nie ma takiej opcji. Można do konfigurowania enkoderów zastosować SVMapper a do pozostałych funkcji HSC.

Mój kokpicik już powoli jest pakowany, ale co do enkoderów. Enkoder wysyła taki sygnał jakby wciśnięto pushbutton. Z tym, że aby obsłużyć enkoder - używamy tutaj czterech przycisków:
1. obrót o jeden "ząbek" w lewo
2.obrót o jeden w prawo
3. szybki obrót (o kilka pozycji) w lewo
4. szybki obrót w prawo.

W SWmapperze trzeba sprawdzić, które przyciski używa mjoy, a potem oskryptować je w HSC - nie ma potrzeby (poza sprawdzeniem) używać svmappera. HSC doskonale sobie z tym radzi.

Offline Flanker

  • 13 WELT
  • *
Odp: Aplikacja DomowyKokpit
« Odpowiedź #313 dnia: Sierpnia 31, 2011, 18:14:20 »
Na blogu HSC w notatce na temat obsługi klawiatury (http://homesimcockpit.com/?s=sendkeys) opisany jest sposób kodowania klawiszy ALT, CTRL, oraz SHIFT. Czy jest możliwość aby moduł ten rozróżniał LCTRL/RCTRL i analogicznie z klawiszami SHIFT oraz ALT ?

Jeżeli tak, to jak to uzyskać ?

Odp: Aplikacja DomowyKokpit
« Odpowiedź #314 dnia: Sierpnia 31, 2011, 18:24:29 »
Na chwilę obecną nie ma rozróżnienia na prawy i lewy ALT/CTRL/SHIFT.