HSG

Aktuelle Seite: HSG/Fächer/Informatik/ MSR/Mindstorms

Installation des Bricx Command Center

Der Bricx Command Center stellt eine komplette Entwicklungsumgebung für RCX dar. Für den Betrieb des USB-Towers unter Windows ist die Installation eines Treibers notwendig. Es kann notwendig sein (keine Zeitanzeige im Brick sichtbar), die Firmware firm0328.zip in den Brick zu laden. Das kann mit Bricx geschehen. Bei den Versuchen mit dem seriellen Tower zeigte sich, dass der Download bei der Anzeige '20' jeweils abbricht. Hier kann man auf der Kommandozeile, z.B. mit
c:\programme\bricxCC\nqc -firmware firm0328.lgo
Abhilfe schaffen. Die Datei firm0328.lgo ist natürlich vorher in das Verzeichnis zu kopieren. Die Firmware ist geladen, wenn eine Zeitanzeige im Brick sichtbar ist.

Ein 'Hallo Welt'-Programm

Ein erstes Programm

Mit den Icons Icons wird das Programm übersetzt (compiliert) und auf den Brick geladen. Das Programm spielt nach dem Start eine kurze Tonfolge. Die Befehle wurden aus den 'Templates' (Vorlagen)'zusammengeklickt'.
Bei der Verwendung des seriellen Towers in Verbindung mit dem RCX1.0 war es nötig bei Firmware 'others' anzuklicken, um eine Verbindung zu bekommen.

NQC unter Linux

Die Entwicklungsumgebung BricxCC ist erst teilweise auf Linux übertragen worden. Wer aber auf der Konsole ein wenig Hand anlegt, hat auch hier die gleichen Möglichkeiten

Links

Aufzug 0

task main ()
{
  // hier werden die Sensoren initialisiert
  SetSensor(SENSOR_1, SENSOR_TOUCH);
  SetSensor(SENSOR_2, SENSOR_TOUCH);
  SetSensor(SENSOR_3, SENSOR_TOUCH);

  // Zustandsvariable und Motor werden initialisiert
  int zustand = 1;   // 1 aufwärts, 2 abwärts
  Fwd(OUT_A);        // Motor A auf vorwärts
  On(OUT_A);         // Motor A einschalten


  // in dieser Endlosschleife werden ständig die Sensorwerte überprüft (Polling)
  while (true)
  {
    if ((zustand==1) && SENSOR_2) // aufwärts (1) und oberer Schalter (SENSOR_2)
    {
      Off(OUT_A);     // Motor A ausschalten
      zustand = 2;    // Abwärtsfahrt vorbereiten
      Rev(OUT_A);     // Motor A auf rückwärts
    };
    if ((zustand==2) && SENSOR_1) // abwärts (2) und unterer Schalter (SENSOR_1)
    {
      Off(OUT_A);     // Motor A ausschalten
      zustand = 1;    // Aufwärtsfahrt vorbereiten
      Fwd(OUT_A);     // Motor A auf vorwärts
    };
    if (SENSOR_3)     // SENSOR_3 schaltet Motor ein
    {
      On(OUT_A);
    };
  }
}

bot1

task main ()
{
  // Hier werden die Sensoren initialisiert...
  SetSensor(SENSOR_1, SENSOR_TOUCH);
  SetSensor(SENSOR_2, SENSOR_LIGHT);// Der Sensor wird nicht benutzt...
  SetSensor(SENSOR_3, SENSOR_TOUCH);
  // Die Richtungen der Motoren müssen unterschiedlich initialisiert werden,
  // da sie in unterschiedlicher Orientierung eingebaut sind.
  SetDirection(OUT_A, OUT_FWD);
  SetDirection(OUT_C, OUT_REV);
  // In dieser Endlosschleife werden ständig die Sensorwerte überprüft (Polling)
  while (true)
  {
    // Wenn der linke Sensor gedrückt ist, wird die folgende Ereignisbehandlung
    // durchgeführt. Da diese im Programm zuerst steht, dreht sich der Roboter
    // nach rechts, wenn beide Sensoren gleichzeitig gedrückt sind.
    if (SENSOR_1) {
      // Zunächst stehen bleiben...
      Off(OUT_A);
      Off(OUT_C);
      // Dann ändern wir die Richtung beider Motoren, um rückwärts zu fahren...
      Toggle(OUT_A);
      Toggle(OUT_C);
      // Nun fahren wir für 50ms rückwärts...
      OnFor (OUT_A + OUT_C, 50);
      // Durch die Richtungsänderung des ersten Motors errreichen wir eine
      // Rechtsdrehung auf der Stelle.
      Toggle(OUT_A);
      // Nun drehen wir uns 50ms lang nach rechts.
      OnFor (OUT_A + OUT_C, 50);
      // Nun nur noch den anderen Motor auf vorwärts einstellen und wir können
      // normal weiter fahren.
      Toggle(OUT_C);
    }
    // Hier folgt die zweite Ereignisbehandlung für die Linksdrehung...
    if (SENSOR_3) {
      Off(OUT_A);
      Off(OUT_C);
      Toggle(OUT_A);
      Toggle(OUT_C);
      OnFor (OUT_A + OUT_C, 50);
      Toggle(OUT_C);
      OnFor (OUT_A + OUT_C, 50);
      Toggle(OUT_A);
    }
    // Im Normalfall vorwärts fahren.
    On(OUT_A);
    On(OUT_C);
  }
}