| ROBO TX Training Lab : Basismodell + Joystick
ji.dwSize = 52; ji.dwFlags = JoyReturnAll; lblHinweis.Text = "Beenden durch ESC-Taste"; int xFa, yFa, zFa; while (!tx.Finish()) { if (joyGetPosEx(0, ref ji) != JOYERR_NOERROR) { lblStatus.Text = "Kein Joystick da"; return; } xFa=(int)(ji.dwXpos / 29000); yFa=(int)(ji.dwYpos / 29000); zFa = 32 - ((int)(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); } lblHinweis.Text = "Das war's"; } 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, SpeedFull); 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 & (uint)0x2) > 0) {do { tx.Pause(55); joyGetPosEx(0, ref ji); } while ((ji.dwButtons & (uint)0x2) > 0); if (tmrBlau.Enabled) { tmrBlau.Enabled = false; tx.SetLamp(oBlauL, Dir.Off); } else tmrBlau.Enabled = true; } Dieser Code-Ausschnitt wird in die whlie-Schleife von cmdAction 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. private void tmrBlau_Tick(object sender, EventArgs e) {BlauAn = !BlauAn; if (BlauAn) tx.SetLamp(oBlauL, Dir.On); else tx.SetLamp(oBlauL, Dir.Off); } Der Blaulichtblinker selber wird in dem Tick-Ereignis eines TimerControls (Interval 300 Millisekunden) bedient. Dazu wird im Abfrage-Loop das TimerControl ggf. Enabled. hell = tx.GetAnalog(uPhotoW); if (hell > LampenAn) tx.SetLamp(oLampen, Dir.On); else if (hell < LampenAus) tx.SetLamp(oLampen, Dir.Off); Das Schalten des Fahrlichts ist dagegen eine einfache Übung. 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 |