Was ich noch beim Workshop zu sagen vergesse habe: ==================================================== * Achtet auf die Batteriespannung eurer RCX-Bausteine! Schon bei etwa 7,8 Volt wird der Infrarot-Sender schwächer. Bei dieser Spannung ist das Symbol für schwache Batterie noch nicht auf dem Display des RCX zu sehen, aber die Übertragung ist nicht mehr so sicher. Ein RCX mit vollen Einweg-Batterien hat eine Spannung von über 9,5 Volt, ein RCX mit vollen wiederaufladbaren Akkus hat eine Spannung von etwa 8,2 Volt. Wie ihr die Batteriespannung überwachen könnt: - Schreibt ein Programm, das ständig die Batteriespannung misst und auf der Anzeige des RCX ausgibt. Ich habe mal als Beispiel ein Programm batterie.nqc geschrieben. Dieses kleine Programm könnte im Programmspeicherplatz 5 abgelegt werden, dann könnt ihr es von Zeit zu Zeit mal laufen lassen und sehen, wie gut eure Batterien noch sind. - Andere Möglichkeit: Ihr lasst in eurem Master und Slave jeweils einen Task im Hintergrund laufen, der in großen Zeitabständen (z.B. jede Minute) die Batteriespannung misst und einen besonderen Ton spielt, wenn die Spannung zu niedrig wird. Dann könnt ihr sogar im laufenden Wettbewerb mitbekommen, dass es Zeit ist, die Batterien zu wechseln. Auch für diesen Task habe ich ein Beispielprogramm batterie_task.nqc geschrieben. - Einige Programme für den PC (z.B. auch BricxCC) können die Batteriespannung des RCX über die Infrarot-Schnittstelle abfragen. Allerdings habt ihr nicht immer und überall wo es darauf ankommt (mitten im RoboCup-Wettbewerb) einen Laptop in Reichweite ... * Der Aufbau der Messages beim Absenden ist im Workshop nicht ausführlich genug angesprochen worden. Die Message wird einfach auf beiden Seiten (Master und Slave) durch Addieren der Symbole für die einzelnen Bitgruppen erzeugt. Eine logische ODER-Verknüpfung kann genauso gut benutzt werden. Also: eine Message vom Master zum Slave, die den Motor B vorwärts auf volle Geschwindigkeit einschaltet, baut man sich so zusammen: msg = RCX_MOTOR_MSG | RCX_MOTOR_MB | RCX_MOTOR_FWD | OUT_FULL; sende_befehl (msg); Der Slave sendet zum Master die folgende Message, wenn SENSOR_1 und SENSOR_2 gleichzeitig aktiv (gedrückt) sind: msg = RCX_SENSOR_MSG | RCX_SENSOR_S1 | RCX_SENSOR_S2; SendMessage (msg); Eigentlich solltet ihr nie das Programm im Slave ändern müssen, aber ihr solltet schon verstehen, was darin abläuft. * Weil im Workshop mehrfach nach anderen Sensortypen am Slave (nicht nur TOUCH-Sensoren) gefragt wurde, habe ich angefangen, das jetzige Message-Konzept für andere Sensoren zu erweitern. Ich möchte euch jetzt noch nicht mit neuen Einzelheiten verwirren, aber ich habe schon einmal eine kleine Änderung in rcx_message.nqh gemacht, damit mehr "Platz" für weitere Messages bleibt: RCX_SENSOR_MSG ist jetzt 0x08 statt 0x50. Sonst ändert sich nichts. Das ist ganz nebenbei ein Beweis dafür, dass die Verwendung einer gemeinsamen Header-Datei Vorteile bringt: Ich brauchte nur an einer einzigen Stelle die Definition der Message RCX_SENSOR_MSG zu ändern, schon können sich Master und Slave mit der neuen Message verstehen. * Wer noch tiefer in die Arbeitsweise des Präprozessors einsteigen will, findet in den Programmen preprocessor_* ein paar Beispiele, wie ein NQC-Programm verarbeitet wird: preprocessor_1.nqc vor dem Präprozessor preprocessor_2.nqc nach dem Präprozessor preprocessor_3.txt nach Compiler und Linker (mit zusätzlichen Kommentaren von mir) * Falls ihr daran Interesse habt, könnt ihr auch einmal nachsehen, was NQC aus euren eigenen Programmen macht: Im BricxCC (Bricx Command Center) gibt es einen Menü-Punkt View -> Show Code/Error Listing, wo ihr das komplett übersetzte Programm im RCX-Bytecode sehen könnt. Dort steht dann auch, wieviel Speicherplatz euer Programm verbraucht. Ein RCX mit Firmware Version 2.0 hat ungefähr 6000 Bytes Platz für eure Programme. * Wie übersetzt man im BricxCC ein Programm, das aus mehreren NQC- und NQH-Dateien besteht? Einfach die Haupt-Datei für Master (rcx_message_master.nqc) oder Slave (rcx_message_slave.nqc) öffnen und auf den Knopf für Übersetzen oder Download klicken. Fertig! Alle Dateien, die mit #include eingebunden werden, holt sich NQC von selbst, so lange sie in demselben Verzeichnis stehen. * Zahlensysteme: Wie sehen eigentlich negative Binärzahlen aus? Damit möchte ich nicht die Allgemeinheit verwirren. Wer es wirklich wissen will, soll mir mal mailen (eightbit@web.de). Das gilt übrigens auch für alle anderen Fragen, die noch offen geblieben sind! * Ich habe noch eine große Sammlung interessanter Internet-Adressen zum Thema Mindstorms, NQC, BricxCC und so weiter. Öffnet mal die Datei RCX-Links.html in eurem Lieblings-Browser (das könnte z.B. Internet Explorer / Netscape / Opera / Safari / Konqueror sein), von da aus könnt ihr euch dann in die weite Welt weiterklicken (wenn ihr eine Verbindung ins Internet habt).