General
Banner
Home | Artikelen | English

 

Basis vaardigheden voor cockpitbouwers.

Interface programma tussen Flight Simulator en cockpit hardware maken.

Deel 2: Schakelaars koppelen aan FS.

Voorwoord |Hardware | Programma | Eind suggestie

 

Voorwoord.

In dit artikel zal ik trachten op een verstaanbare manier uit te leggen hoe je een schakelaar koppelt aan een FS functie.
We zullen hierbij gebruik maken van een nieuwere soort USB interface van Velleman de K8061. Een beetje vergelijkbaar met de oudere K8000 maar deze heeft iets minder I/O in- en outputs. Maar heeft dan weer het voordeel van een moderne USB aansluiting te hebben in plaats van een parrallel aansluiting. Dit laatste is op de nieuwste PC's toch niet meer te vinden. We zullen hierbij dan ook gebruik maken van de bijhorende DLL. Zo kan je ook eens zien hoe we te werk gaan met het koppelen van een DLL file aan een Visual Basic programma.

Top

Hardware.

Wat hebben we allemaal nodig voor ons experiment. Uiteraard een K8061 interface card van Velleman. Je kan deze zowel bestukt als onbestukt vinden in de beter electronica zaak. Wat hebben we nog nodig. Twee drukschakelaars en een on/off/on schakelaar. Voor de voeding van de kaart hebben we ook nog een 12 v voeding nodig.

K8061

Top

Programma opbouw.

We starten met een nieuw VB programma dat we K8061_FS zullen noemen. Het bestaat uit een form en drie modules.
Het formulier bestaat uit drie frames, vier command buttons, twee checkboxes, vier labels en een timer. De modules zijn een FSUIPC.bas module die je normaal bij de FSUIPC for developers kan terug vinden. Deze standaard module nodig voor het uitlezen en schrijven van data naar FS. FSUIPC is betalende software van Pete Dowson. Op de webpagina Links vind je een link om deze te kunnen aanschaffen. Een tweede module MdlK8061 en derde module MdlWrite zijn zelfgemaakte modules. Het programma voorbeeld kan je vinden bij downloads. Je kan dit openen in VB6 en zo een beter inzicht krijgen in het programma.
Bovendien staat er heel wat extra informatie tussen de programma regels die het één en ander verduidelijken.

Hoe gaan we nu te werk om een schakelaar te laten communiceren met FS. Vooreerst gaan we een connectie tot stand brengen tussen ons programma en FS via de welbekende FSUIPC module. Via de Command knop CmdFSUIPC leggen we een verbinding tussen FS en het VB programma.
Vervolgens willen we een verbinding maken tussen het programma en de interface kaart K0861. Door de Command button CmdK8061uit te voeren zullen we aan alle programma voorwaarden voldoen om deze verbinding tot stand te brengen en te kijken of alle parameters ook werken. Indien er problemen zouden zijn, worden deze ook kenbaar gemaakt via de verschillende labels en checkboxen. Of eventuele bijkomende message boxen.

Als alle verbindingen gemaakt zijn en probleemloos lopen, starten we het programma via de command button CmdStart.
Hierdoor worden er eerst een aantal dingen uitgelezen om er zeker van te zijn dat alles nog goed verbonden is en vervolgens starten we een timer. Deze timer zal op zijn beurt in een continue lus de inputs van de K8061 controleren en er vervolgens dingen mee aansturen. Als er aan bepaalde voorwaarden voldaan wordt zal een bepaald actie worden ondernomen.
Deze timer zal enkel worden stopgezet op het moment dat het formulier gesloten wordt door de command button Cmdend. Deze laatste sluit dan ook de verbinding met de K8061 af en fsuipc. Dankzij deze timer blijft het programma continue in de achtergrond draaien zonder dat je het merkt. Van zodra je een knop indrukt zal het programma onmiddelijk de nodige stappen in de achtergrond uitvoeren en parameters in FS wijzigen of key commands sturen. Die je onmiddelijk in FS kan waarnemen.

Welke stappen worden er in de timer genomen.

Public Sub TmrWrt_Timer()

IOInput
Write_aLL

End Sub

Eerst gaan we kijken in de module MdlK8061 wat de stand van de schakelaars is door het uitvoeren van sub IOInput. Door deze sub worden alle IO channels voorzien van de nodige data over de stand van de schakelaars. In de K8061 staan alle inputs hoog ("1") als de schakelaar niet geschakeld is. Hij wordt laag ("0") indien ingeschakeld. Wel net het tegenovergestelde als je normaal zou verwachten. Maar dit vormt geen probleem, het is gewoon een kwestie van afspraak.

Vervolgens gaan we naar de sub Write_aLL

Private Sub Write_aLL()
Dim booresult As Boolean
Dim dwResult As Long

'collect all data to write from write module
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Call Lbreak 'set left brakes
Call Rbreak 'set right brakes

'write direct keyboard keys
'~~~~~~~~~~~~~~~~~~~~~~~~~~

Call Flap_Up
Call Flap_Down

'FSUIPC Function write
'*********************

booresult = FSUIPC_Process(dwResult) 'pass all values to FS from switches.
DoEvents
End Sub

Hier gaan we naar de module MdlWrite om alle data te verzamelen die we zullen doorsturen naar FS, of rechtstreeks uitvoeren met key inputs. Deze data zijn afhankelijk van de stand de IO channels. Het is hier dat we bepalen welke wijzigingen er moeten doorgevoerd worden. Alleen gaan we ze pas door sturen naar FS op het einde van de Sub Write_aLL wanneer we alle data ter beschikking hebben. Dit alles om tijd te winnen. Enkel de Key inputs zullen rechtreeks worden uitgevoerd indien van toepassing. Maar dit gaat zo snel dat we het nog niet eens merken.

Op deze manier monitoren we voortdurend de schakelaars en reageren we gepast op alle wijzigingen.
Zo slagen we er in om de schakelaars te koppelen aan FS.

Top

Eind overweging.

Zoals reeds eerder gezegd, geven we de voorkeur om inputs te doen via de joystick buttons. Maar het kan ook zo zijn voordelen hebben om toch bepaalde dingen via deze weg te doen. Bijvoorbeeld een opstart procedure van een motor. Je kan hiermee verschillende inputs combineren alvorens je de motor laat starten. Deze opstart procedure kan je dan volledig schrijven in VB. Dit zou je onmogelijk kunnen indien je de buttons rechtstreeks zou aansturen, of je moet er een bedrade logica in brengen.

Top

< Vorige | Home | Artikelen | Volgende >

 
© Verley Jan 2007-2017