ROBOTC has a very powerful utility for testing digital sensors on the NXT. Digital sensors are those that support the industry standard I2C protocol for communications between the NXT and the sensor. The utility allows you to easily test an I2C sensor on the NXT.

Sensor Port Configuration
Use these drop down menu items to set the sensor type and sensor mode for each of the four sensor ports. When this utility is first opened, it will interrogate the NXT to get the current settings of these values. The “Fast I/O” check-mark is read-only. It is calculated from the type of sensor. If you want to test a LEGO ultrasonic tester with this utility, do not set the type to “SONAR”. This will activate the built-in firmware device driver which will periodically poll the value of the ultra-sonic sensor. The device driver does not expect any other application to send I2C messages to the sensor! Instead set the type to “I2C Custom Slow”. There are two main parameters that determines how ROBOTC handles the sensor; Type and Mode.


  • Sonar: Sets the sensor as a standard Mindstorms NXT Sonar sensor. This mode utilizes the Sonar's built-in firmware.
  • I2C Custom Faster/Fastest: Sets the sensor as a custom, 5 volt I2C sensor. The speed parameters choose between normal, Faster, and Fastest polling speeds. The speed levels determine if the NXT's built in I2C delays (to ensure data isn't being sent too quickly) are either intact (normal), shortened (Faster), or removed (Fastest).  “Fast" sensors will use the ROBOTC firmware capability to transmit I2C messages at up to five times the speed found in the standard LEGO supplied firmware. Fast mode generally works with all third party sensors, but normal mode is required for the LEGO ultrasonic sensor. The difference is that most 3rd party sensors include a microprocessor that has I2C messaging support in hardware and can keep up with the faster ROBOTC messaging rate. Slower sensors have a “bit-banged’ implementation and cannot keep up.
  • I2C Custom 9 Volt Faster/Fastest: Same as the I2C Custom parameter, but designates the sensor as needing a +9 volt power supply (instead of the normal +5 volts) 
Mode allows you to select how ROBOTC displays the data it receives from the Sensor. The selections range from raw data to pulse count to rotation count; the Mode should be selected to match the sensor's output properly.

All Sensors
Use these buttons to quickly configure all four sensor ports as a specific custom I2C sensor. This is useful if you have multiple, identical sensors that you want to use in tandem.

Firmware Version
Configure these parameters for either standard LEGO firmware or ROBOTC firmware. Standard firmware does not support fast mode signaling and will always try to send a I2C message three times before reporting failures. Trying three times can easily mask intermittent transient errors. The number of total tries can be user configured in the ROBOTC firmware. The default value is a total of three tries. Setting the number of retries to zero is useful to ensure transient errors are not masked.

Selects which of the four ports on the NXT the message will be sent to. 

Output Message
The hexadecimal bytes of the message to be sent to the sensor

Reply Len (Length)
The length of the reply expected from the sensor in bytes

The reply returned from the sensor in hedadecimal (and converted to ASCII)

A checkbox to determine if the selected message should be included or excluded from the test cycle.

Once/Continuous Buttons
These buttons select whether a single test cycle or continuous testing should be performed. 

Verify Write

If checked, the NXT will send an ACK message to check if the I2C message was successfully sent to the NXT. The "Failed" text box will return a count of the number of failed messages.

A text box containing the number of messages sent in total.

Bus Errors
Number of bus errors encountered during error transmission. Bus error is detected by the I2C firmware and usually indicates an attempt to send an I2C message to a sensor that does not support I2C messaging.

No Reply
Number of messages sent to the I2C message that did not recieve a reply from the sensor.

Diff Msg (Different Message)
Number of different messages recieved from the I2C sensor... this counter will not increment when the same message is recieved from the I2C sensor in succession.

Copyright © 2012 Robotics Academy/Robomatter -