Aplikacja HomeSimCockpit

1 września 2011

Aktualizacja HSC + simIN

Filed under: Bez kategorii — codeking @ 20:44

Dużo czasu minęło od ostatniej informacji. Dzisiejsza jest krótka – aktualizacja.

W aktualizacji automatycznej (na zakładce Ustawienia w programie HSC) dostępna jest wersja 1.1.1.2 aplikacji. Poprawione zostały drobne błędy. Większym zmianom poddany został moduł simOUT, który został rozszerzony o możliwość obsługi projektu simIN. W skrócie, simIN to obsługa wejść (przyciski, enkodery). Płytka podpinana jest do płytki simOUT XL. simIN obsługuje 40 wejść, w tym do 20 enkoderów. Każdy enkoder zajmuje dwa wejścia.

Więcej informacji o samej płytce (schemat, PCB, wsad) na stronie http://simproject.info/ i na forum http://www.il2forum.xt.pl. Zapraszam.

22 grudnia 2010

Sterowanie klapami w MS Flight Simulator

Filed under: informacje,tutoriale — codeking @ 23:21

EGHI zapytał mnie niedawno jak, i czy w ogóle jest to możliwe, zrobić sterownik klap wykorzystując oś joystick’a. Tym krótkim wpisem pokażę jak to zrobić wykorzystując oczywiście HSC.

Pierwsze co musimy wiedzieć to ile pozycji mogą przyjąć klapy w samolocie, którym chcemy sterować. Przykładowo klapy w samolocie Cessna 172 mają dostępne cztery pozycje: 0, 10, 20 i 30 stopni. Bierzemy liczbę 16383 i dzielimy ją przez ilość pozycji – 1. Czyli 16383 / (4 – 1) = 16383 / 3 = 5461. Ta liczba jest dla nas bardzo ważna więc zapisujemy ją sobie.

Do sterowania klapami wykorzystujemy offset 0BDC z FSUIPC. Zapisujemy do niego pozycję klap jako wielokrotność wartości, którą wcześniej policzyliśmy. Tą wartość mnożymy przez indeks pozycji klap licząc od 0. Dla klap w pozycji 0 stopni wpisujemy 0 (0 * 5461), dla 10 wpisujemy 5461 (1 * 5461), dla 20 wpisujemy 10922 (2 * 5461) i dla 30 wpisujemy 16383 (3 * 5461). Jeśli wcześniej wyliczona liczba jest niecałkowita to trzeba ją zaokrąglić. Wpisywane do offsetu 0BDC wartości mogą się nieznacznie różnić (sprawdzałem działania na wartościach różnych o 5 (mniejszych i większych) i nie było problemu).

Następna rzecz to konfiguracja osi joystick’a. Należy ustawić zakres wybranej osi na 0-100. Następnie podzielić ten zakres na 4 podzakresy (mamy 4 możliwe pozycje klap). Otrzymujemy zakresy: 0-25, 26-50, 51-75 i 76-100. Każdy z zakresów odpowiada innej pozycji klap.

I czas na skrypt, który jest chyba najprostszy z tego wszystkiego:

script "Joystick - flaps"
{
	// offset do sterowania klapami
	variable $_0BDC { module = "FSDataOutput"; id = "0BDC"; type = int; direct = out; }

	// oś joystick'a wykorzystana do sterowania klapami
	variable $LeftJoy_axis_EXT1 { module = "GameControllersInput"; id = "LeftJoy:axis_EXT1"; type = int; direct = in; }

	variable_changed $LeftJoy_axis_EXT1
	{
		// sprawdzenie czy pozycja osi jest w zakresie 0-25
		if ( $LeftJoy_axis_EXT1 < 26 )
		{
			// klapy 0
			$_0BDC = 0;
		}
		else
		{
			// sprawdzenie czy pozycja osi jest w zakresie 26-50
			if ( $LeftJoy_axis_EXT1 < 51 )
			{
				// klapy 10
				$_0BDC = 5461;
			}
			else
			{
				// sprawdzenie czy pozycja osi jest w zakresie 51-75
				if ( $LeftJoy_axis_EXT1 < 76 )
				{
					// klapy 20
					$_0BDC = 10922;
				}
				else
				{
					// klapy 30
					$_0BDC = 16383;
				}
			}
		}
	}
}

Wspomnę jeszcze o zakresie osi (powyżej ustawiany na 0-100). Ten zakres można przyjąć inny. Wybrałem zakres 0-100 aby jak najprościej pokazać ideę tego rozwiązania. Równie dobrze można przyjąć zakres 0-10000 lub nawet 0-10, kwestia poprawnego obliczenia zakresów.

W ten prosty sposób można zrealizować sterownik klap przy pomocy HSC wykorzystując oś joystick’a.

Aktualizacja simOUT

Filed under: informacje — codeking @ 20:08

Wczoraj udostępniłem aktualizację modułu simOUT. Wnosi ona możliwość wybrania 6 wyświetlaczy 7-SEG lub 48 diod LED dla dodawanych sterowników LED. Dodatkowo moduł udostępnia zmienną do regulacji jasności diod LED (i wyświetlaczy 7-SEG). Dla każdego sterownika LED generowana jest jedna zmienna do regulacji jasności.

Jasność ma 11 poziomów. 0 – oznacza całkowite wyłączenie wyświetlaczy, natomiast 10 – maksymalną jasność.

Przykład skryptu do przetestowania regulacji jasności:

script "simOUT - jasność"
{
	// szósty wyświetlacz 7-SEG
	variable $COM30_7led_021_006 { module = "simOUT"; id = "COM30_7led_021_006"; type = string; direct = out; }

	// zmienna z modułu TestModule do testowania wyświetlacza
	variable $in_string_00 { module = "TestModule"; id = "in:string_00"; type = string; direct = in; }

	variable_changed $in_string_00
	{
		// pokazanie na wyświetlaczu wpisanego tekstu
		$COM30_7led_021_006 = $in_string_00;
	}

	// zmienna do regulacji jasności wyświetlaczy podpiętych do sterownika z ID 21
	variable $COM30_7led_021_brightness { module = "simOUT"; id = "COM30_7led_021_brightness"; type = int; direct = out; }

	// zmienna z modułu TestModule do ustawiania jasności
	variable $in_int_00 { module = "TestModule"; id = "in:int_00"; type = int; direct = in; }

	variable_changed $in_int_00
	{
		// ustawienie podanej jasności
		$COM30_7led_021_brightness = $in_int_00;
	}
}

Docelowo najlepiej regulację zrobić na dwóch przyciskach lub enkoderze. I w zależności od zdarzenia zmniejszać lub zwiększać jasność.

18 grudnia 2010

Wirtualny Joystick

Filed under: informacje,opisy,pliki — codeking @ 12:33

Po długim czasie mała aktualizacja.

Kolega ToTom zgłosił się do mnie z pewnym problemem, a mianowicie, jak zrobić symulację priorytetów dwóch joystick’ów tak aby działały jak SideStick’i w samolotach Airbus 320. Problem jest o tyle ciekawy, że sygnał z dwóch joystick’ów musi być odpowiednio połączony i wynik wysłany do FS. Najprostszym rozwiązaniem okazało się zastosowanie wirtualnego joystick’a, którym można sterować z poziomu HSC. Tak więc wystarczy zainstalować PPJoy (http://www.simtel.net/free-download/System-Utilities-Miscellaneous-Utilities/PPJoy/75176.html) i zaktualizować HSC. Do aktualizacji doszedł nowy moduł – PPJoyControl. Jest on bardzo prosty w użyciu. Udostępnia trzy funkcje:

  • SetButtonState(numer joystick'a PPJoy, numer przycisku, stan przycisku) – funkcja pozwala na ustawienie stanu przycisku w wirtualnym joystick’u
  • SetAxisValue(numer joystick'a, numer osi, wartość (zakres 1 - 32767) – funkcja ustawia wartość osi (położenie) w wirtualnym joystick’u
  • UpdatePPJoy(numer joystick'a) – funkcja aktualizuje stan wskazanego joystick’a ustawionymi powyższymi funkcjami stanami

Oczywiście przed wykorzystaniem HSC do sterowania wirtualnym joystick’iem, należy takowy zainstalować. Wraz z ToTom stworzyliśmy dokument (https://docs.google.com/document/pub?id=1X_68a1FGLw0lwO0h4FbrpgCDH1lTDOvPrX7p1iECWUw) opisujący m.in. jak zainstalować wirtualny joystick. Dokument opisuje jak uruchomić symulację priorytetów SideStick’ów przy współpracy z oprogramowaniem JeeHell (http://www.mycockpit.org/forums/forumdisplay.php/263-JeeHell.

Do czego można jeszcze wykorzystać moduł PPJoyControl ? Jeśli mamy np. płytkę SkalarkiIO lub OpenCockpits i chcemy wykorzystać ich wejścia w symulatorach innych niż FS, to możemy stworzyć wirtualny joystick i sterować nim stanami z płytek SkalarkiIO lub OC. W symulatorze można przypisać osie i przyciski z wirtualnego joystick’a. W ten sposób „oszukamy” symulator i wykorzystamy pełnię możliwości posiadanego sprzętu.

Moduł jest tylko wprowadzeniem możliwości wykorzystania biblioteki PPJoyWrapper (autorstwa lightning z forum viperpits.org). Bez jego biblioteki sporo czasu musiałbym poświęcić nad modułem. Tak więc, Big Thanks for lightning !

W przypadku pytań, wątpliwości – zapraszam na forum il2forum.

18 września 2010

Moduły do OC i aktualizacja HSC

Filed under: informacje,opisy — codeking @ 11:57

Dzisiaj udostępniam kolejne moduły. Tym razem są to dwa moduły do komunikacji aplikacji HSC z serwerem IOCP. IOCP to aplikacja wykonująca skrypty SIOC (OpenCockpits). Do komunikacji zostały utworzone dwa moduły:

  • OCInput – moduł pozwala na odczytywanie wartości zmiennych z uruchomionego skryptu SIOC
  • OCOutput – moduł pozwala na ustawianie wartości zmiennych w uruchomionym skrypcie SIOC

Moduły można wykorzystać do sterowania urządzeniami OpenCockpits z poziomu HSC. Jedyną niedogodnością jest potrzeba uruchomienia prostego skryptu SIOC.

Moduł OCInput można wykorzystać do reagowania na zdarzenia naciśnięcia przycisków na płytce OpenCockpits Master. Np. tworzymy skrypt SIOC:

Var 0002, Link IOCARD_SW, Input 10

Powyższy skrypt ma tylko za zadanie odczytywać stan wejścia numer 10 z płytki Master OC. Aby „wprowadzić” zmienną 0002 do HSC, piszemy skrypt:

script "OCInputTest"
{
	variable $oc_sw_10 { module = "OCInput"; id = "2"; type = int; direct = in; }

	variable_changed $oc_sw_10
	{
		Log( "$oc_sw_10 = " + ToString( $oc_sw_10 ) );
	}
}

Jak widać, wystarczy zadeklarować zmienną z modułu OCInput i odpowiednie zdarzenie. Zmienna musi być typu int, a identyfikatorem zmiennej musi być numer zmiennej w skrypcie SIOC, przy czym numer ten nie może zaczynać się od zera (w skrypcie SIOC jest 0002, w skrypcie HSC jest 2).

Przed uruchomieniem skryptu należy jeszcze skonfigurować moduł OCInput. W konfiguracji należy podać adres IP komputera na którym uruchomiony jest IOCP (wykonujący skrypt SIOC) oraz port na którym IOCP oczekuje połączeń. Te informacje można odczytać bezpośrednio z programu IOCP.

Adres i port serwera IOCP

Tak samo konfiguruje się moduł OCOutput. Przy pomocy tego modułu, możemy ustawiać wartości zmienne w skrypcie SIOC. Prosty przykład wykorzystania to sterowanie wyjściami (np. diodami LED) na płytce OC Master. Przykładowy skrypt SIOC:

Var 0779, Link IOCARD_OUT, Output 25

I skrypt HSC:

script "OCOutputTest"
{
	variable $oc { module = "OCOutput"; id = "779"; type = int; direct = out; }

	variable $bool_00 { module = "TestModule"; id = "in:bool_00"; type = bool; direct = in; }

	variable_changed $bool_00
	{
		if ( $bool_00 )
		{
			$oc = 1 ;
		}
		else
		{
			$oc = 0 ;
		}
	}

	variable $bool_01 { module = "TestModule"; id = "in:bool_01"; type = bool; direct = in; }

	variable_changed $bool_01
	{
		if ( $bool_01 )
		{
			OCOutput:SetVariable( "779" , 1 ) ;
		}
		else
		{
			OCOutput:SetVariable( "779" , 0 ) ;
		}
	}
}

Powyższy skrypt ustawia zmienną o numerze 779 ze skryptu SIOC na wartość 1 lub 0 (w zależności od wartości zmiennych z modułu testowego). W skrypcie pokazano dwa podejścia. Jedno, z wykorzystaniem deklaracji zmiennej $oc i drugie – z wykorzystaniem funkcji SetVariable(…) z modułu OCOutput. W zależności od upodobań, można wykorzystywać pierwsze lub drugie podejście lub oba jednocześnie.

I na koniec, informacja o aktualizacji HSC. Moduły OCInput i OCOutput można pobrać tylko jako aktualizacje HSC. Aktualizacje są możliwe od wersji HSC 1.1.1.0 (do pobrania na stronie pliki). Nagrałem krótki filmik przedstawiający proces aktualizacji HSC: film. Do wykonania aktualizacji wymagane jest połączenie z internetem.

Zapraszam na forum http://il2forum.prv.pl/ do dyskusji na temat programu HSC.

Older Posts »

Powered by WordPress