C# 2008 : 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 C# 2008 Programm ist ein einfaches Windows-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.

private void cmdAction_Click(object sender, EventArgs e) {
   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 Fahrscheinwerfern

if ((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);
lblHell.Text =
"Helligkeitswert : " + hell.ToString();
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).

Download

Die zugehörenden Projektverzeichnisse sind in TxExplorerJoy.zip enthalten

Stand : 07.02.2010