| ROBO TX Training Lab : Basismodell + Joystick
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 FahrscheinwerfernIf (ji.dwButtons And &H2) > 0 ThenDo 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) Das Schalten des Fahrlichts ist dagegen eine einfache Übung. hell = tx.GetAnalog(uPhotoW) 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). DownloadDie zugehörenden Projektverzeichnisse sind in TxExplorerJoy.zip enthalten Stand : 07.02.2010 |