ToonTalk RCX extension Back to home page
   
 

The RCX Extension

The goal of the RCX ToonTalk extension is to enable learners to create connected executable models of a phenomenon both in a virtual world (the computer screen) and in the physical one using the LEGO MindStorms kit.

The RCX extension is aimed at providing the basic functionality that TT projects involving RCX can use. Higher level TT software abstractions encapsulate specific project primitives. Such abstractions will be distributed in the form of TT notebooks containing robots that accomplish specific RCX-related tasks.

The communication between the PC and the RCX is implemented using IR devices. The LEGO kit comprises an IR tower that can be connected to an USB or serial port on the PC. The IR tower sends signals covering a narrow cone at a maximum distance of a few metres. IR communication is directional (i.e. the IR tower and RCX should “see” each other) and this might cause problems with mobile robots.

From a programming point of view, the RCX extension is a special bird that can fly "outside" of ToonTalk and communicate with the RCX. To execute a command on the RCX, e.g. turn on the motors, boxes that contain commands are given to the bird. If a response is needed, e.g. a sensor reading, then the box will include another bird that will bring back the response, thereby achieving communication from the RCX back to the computer.

The RCX is controlled by a firmware implementing an interpreter that executes low level byte code commands – either from downloaded programs or from direct commands received from a controlling computer. With the RCX extension the user can interactively:

  • play a sound;
  • control motors;
  • set the RCX display to a sensor, message or variable value;
  • send a message;
  • set sensor type (since the RCX has no plug-and-play support, one must always tell it what kind of sensors is attached to what port);
  • get a sensor value;
  • set and get a variable;
  • store the data log of an experiment on the RCX and upload it to ToonTalk;

Since the RCX computer has very limited memory and processing power, it’s impossible to enhance the LEGO RCX firmware with a TT runtime engine. Thus, program running on the RCX needsto be developed in another programming language. However an RCX program is composed of independent parallel tasks that can be controlled interactively from TT. Using this capability, learners can “program” the RCX composing “behaviors” that are developed by more skillful members of the Weblabs community.

How to install and upgrade the extension:

Download and copy this file TTRcx.dll to your ToonTalk directory, to install and/or upgrade the RCX extension.

The current version is: 1.0

To check the version of the currently installed RCX extension, execute the following command:


 

How to set up and check the IR communication with the RCX:

To enable the connection between TT and the RCX, one must tell the program the port actually used by the IR tower (COM or USB). If everything is working correctly, i.e. the tower is connected to the PC and the RCX is on and oriented tower to tower, one hears a sound from the RCX.

To set up the IR tower use the following command:


 


RCX Available Commands

1. Sound

Play sound

Play a built in sound. The second hole in the box contains the name of the sound. One of “key click”, “beep”, “sweep up”, “sweep down”, “error”, “fast sweep up”.

2. Motor

On

Turn the specified motor/s on. The second hole in the box contains the name of the motor: A, B or C. To control more than one motor, put the motor names in a box.

Off

Turn the specified motor/s off and leave it in brake status. The second hole in the box contains the name of the motor: A, B or C. To control more than one motor, put the motors names in a box.

Float

Turn the specified motor/s off and leave it in neutral status. The second hole in the box contains the name of the motor: A, B or C. To control more than one motor, put the motors names in a box.

Set forward

Set the direction of the specified motor/s forward. The second hole in the box contains the name of the motor: A, B or C. To control more than one motor, put the motor names in a box.

Set backward

Set the direction of the specified motor/s backward. The second hole in the box contains the name of the motor: A, B or C. To control more than one motor, put the motor names in a box.

Reverse direction

Reverse the direction of the specified motor/s. The second hole in the box contains the name of the motor: A, B or C. To control more than one motor, put the motor names in a box.

 

3. RCX display

Set display

Set the RCX display to monitor the specified sensor, global variable or message. The second hole in the box contains the message number, an integer in the range [1..255].

 

4. Message

Send message

Have the RCX send the specified message. The second hole in the box contains the name of the device to monitor. One of: “Sensor1”, “Sensor2”, “Sensor3”, “Var1”, “Var2”, …, “Var32”, “Message”.

 

5. Sensor

Set sensor type

Tell the RCX the sensor type of the specified sensor. The second hole in the box contains the name of the sensor. One of: “1”, “2”, “3”. The third hole in the box contains the name of the type. One of: "light", "touch", "temperature", "angle".

 

6. Variable

Get var

Return the value of the specified variable. The second hole in the box contains the index of the variable. One of: “1”, “2”… “32”. The third hole a bird.

Set var

Set the value of the specified variable. The second hole in the box contains the index of the variable. One of: “1”, “2”… “32”. The third hole an integer in the range [-32767 .. +32767].

 

7. Data log

Get Datalog Size

Return the actual number of currently logged elements. The second hole in the box contains a bird.

Set Datalog Size

Clears the current data log buffer and allocates room for a new one of the given size. The second hole in the box contains an integer in the range [1 .. 1024].

Get Datalog Element

Return the specified data log element. The second hole in the box contains an integer in the range [1 .. 1024]. The third hole a bird.

Get Datalog Element Verbose

Return a specified data log element. Each element is a pair where the first component is a string describing the source of the log value (e.g., “Sensor1”) and the second component is the integer value. The second hole in the box contains an integer in the range [1 .. 1024]. The third hole a bird.

Set Datalog Element

Store a 3 byte data point in the log. If there is no more space in the log, the data point is ignored. Only variables and sensor values can be logged. The second hole in the box contains the name of the element. One of: “Sensor1”, “Sensor2”, “Sensor3” or “Var1”, “Var2”… “Var32”.

Get Datalog

Return the whole content of the data log (i.e., all the recorded elements). The second hole in the box contains a bird.

Get Datalog Verbose

Return the whole content of the data log. Each element is a pair where the first component is a string describing the source of the log value (e.g., “Sensor1”) and the second component is the integer value. The second hole in the box contains a bird.

 

8. Program/Tasks

Download Program

Download a compiled RCX program into the specified program slot. The second hole in the box contains the file name. The third hole an integer in the range [1..5] indicating the program slot; if this parameter is omitted, the current program slot is used.

Run Program

Run the program in the specified slot. The second hole in the box contains an integer in the range [1..5] indicating the program slot; if this parameter is omitted, the current program slot is used.

Stop Program

Stop the running program. If no program is running, the command has no effect.

Start Task

Start the specified task. The second hole in the box contains an integer in the range [1..9] indicating the task.

Stop Task

Stop the specified task. The second hole in the box contains an integer in the range [1..9] indicating the task.

 

9. Setup & checking

Get TTRcx Version

Return a string that identifies the TTRcx.dll version currently installed. The second hole in the box contains a bird. If this parameter is omitted, Marty will report the version.

Set Tower Port

Define the IR device port and optionally test the communication link by having the RCX play a sound. The second hole in the box contains the name of the port. One of: “USB”, “com1”, “com2”, “com3”. The third hole in the box contains the name of the sound. One of: “key click”, “beep”, “sweep up”, “sweep down”, “error”, “fast sweep up”. This parameter is optional.

Ping

Tests for the presence of the RCX and returns a string message. The second hole in the box contains a bird.

Note that: most commands require a bird parameter to return a completion code to TT – such a code is always a character string, with value “OK” if the command completed successfully, or an error message otherwise. It is possible for these commands to omit the bird parameter: in this case, successful completion of the command is not notified, whereas error messages are passed to Marty. This multiple exception handling policy accounts for two different user perspectives: the direct, interactive usage mode in which the user can deal with failures on the spot; and the programmed mode in which the TT program has to monitor the correct execution of the RCX command and knows how to react to possible exceptions. The above command description takes the viewpoint of the direct/interactive usage perspective.