HSG |
|
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.
Mit den 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.
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
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); }; } }
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); } }