VB2008 : Explorer

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
Sitemap
Index
Links
Impressum
Mail
 

ROBO TX Training Lab : Basismodell + Joystick

Das Basismodell des Kastens ROBO TX Training Lab gesteuert über einen einfachen Joystick und winmm.dll. In der Luxus-Version ausgerüstet mit Blaulicht (Schalten über den mittleren Joystick-Knopf) und Fahrlicht (Schalten über einen Photowiderstand).

Der verwendete Joystick liefert die Werte 0 - 65535 (Mittelstellung 32767) für die X, Y und Z-Achse ("Gashebel" links unten). Der verwendete Mittelknopf hat bitWert 2.

Das zugehörende VB 2008 Programm ist ein einfaches Console-Programm. Dabei werden dem Joystick 9 Positionen zugeordnet : Vor, Zurück, Links, Rechts, LinksRück, RechtsRück, LinksDrehen, RechtsDrehen, Halt, die über eine Matrix Fahrauftrag mit Daten für die Motoren versorgt werden. Die Geschwindigkeit wird über den "Gashebel" geregelt.

Sub Action()
  Dim xFa, yFa, zFa As Integer
  
  Do
 
    If joyGetPosEx(0, ji) <> JOYERR_NOERROR Then
         Console.Write("Kein JoyStick da")
         Return
      End If
      xFa = ji.dwXpos / 29000
      yFa = ji.dwYpos / 29000
      zFa = 32 - (ji.dwZpos / 2048)
      tx.SetMotor(mRechteRaupe, fa(xFa, yFa).rDir, fa(xFa, yFa).rSpeed * zFa + 256)
      tx.SetMotor(mLinkeRaupe, fa(xFa, yFa).lDir, fa(xFa, yFa).lSpeed * zFa + 256)
      tx.Pause(123)
   Loop Until tx.Finish()
End Sub

Das eigentliche Steuer-Programm ist erstaunlich kurz : In einer while-Schleife wird alle 123 Millisekunden die Position des Joysticks abgefragt und dann in programmtaugliche Werte umgerechnet. xFa und yFa können die Werte 0 (vor, links), 1 (mitte) und 2 (rück, rechts) annehmen, zFa Werte zwischen 0 und 32 zur Korrektur der er Geschwindigkeitswerte in Fahrauftrag fa. Anschließend werden die Motoren mit Werten aus dem Fahrauftrag versorgt. Das wars dann auch schon.

fa(0, 0) = New FahrAuftrag(dVor, SpeedFull, dVor, SpeedHalf)
fa(0, 1) =
New FahrAuftrag(dVor, SpeedHalf, dRuck, SpeedHalf)
fa(0, 2) =
New FahrAuftrag(dRuck, SpeedHalf, dRuck, SpeedFull)
fa(1, 0) =
New FahrAuftrag(dVor, SpeedFull, dVor, SpeedFull)
fa(1, 1) =
New FahrAuftrag(Dir.Off, SpeedOff, Dir.Off, SpeedOff)
fa(1, 2) =
New FahrAuftrag(dRuck, SpeedFull, dRuck, SpeedHalf)
fa(2, 0) =
New FahrAuftrag(dVor, SpeedHalf, dVor, SpeedFull)
fa(2, 1) =
New FahrAuftrag(dRuck, SpeedHalf, dVor, SpeedHalf)
fa(2, 2) =
New FahrAuftrag(dRuck, SpeedHalf, dRuck, SpeedFull)

fa(1,1) steht für die Mittelstellung des Joysticks und schaltet die Motoren ab.

Luxus-Version mit Blaulicht und Fahrscheinwerfern

If (ji.dwButtons And &H2) > 0 Then
  Do
    tx.Pause(55)
    joyGetPosEx(0, ji)
  Loop While (ji.dwButtons And &H4) > 0
  If Blinken Then Blinken = False Else Blinken = True
End If

Dieser Code-Ausschnitt wird in die whlie-Schleife von Action eingefügt. Abgefragt wird der Mittelknopf des Joysticks. Da die while-Schleife sehr schnell (alle 123 Millisekunden) abgefragt wird, wird nach Erkennen des Mittelknopfes noch gewartet, bis er wieder freigegeben wird, sonst gibt es Irritatationen.

Sub executeBlinken()
  Do Until tx.Finish()
    If Blinken Then
      tx.SetLamp(oBlauL, Dir.On)
      Thread.Sleep(444)
      tx.SetLamp(oBlauL, Dir.Off)
      Thread.Sleep(333)
    Else
      tx.SetLamp(oBlauL, Dir.Off)
       Thread.Sleep(333)
  
  End If
  Loop
End Sub

Der Blaulichtblinker selber wird in einem eigenen Thread untergebracht. Der Thread selber wird in Sub Main gestartet.

blinkThread = New Thread(AddressOf executeBlinken)
blinkThread.IsBackground = True
blinkThread.Start()

Das Schalten des Fahrlichts ist dagegen eine einfache Übung. 

hell = tx.GetAnalog(uPhotoW)
If hell > LampenAn Then
  tx.SetLamp(oLampen, Dir.On)
ElseIf
hell < LampenAus
Then
  tx.SetLamp(oLampen, Dir.Off)
End
If

Ebenfalls in der while-Schleife plaziert, wird der aktuelle Wert des Photowiderstandes ermittelt, die Lampen werden dann nach Vorgabe der Grenzwerte geschaltet (die Werte sind unteschiedlich um ein Flackern im Grenzbereich zu vermeiden).

Download

Die zugehörenden Projektverzeichnisse sind in TxExplorerJoy.zip enthalten

Stand : 07.02.2010