Skip to content

RD: Set individual LEDs (binary), EXP Bus Protocol Reference

Understanding EXP board addressing

This command is used with FAST Expansion and FAST breakout boards via a FAST Serial Protocol (FSP) connection to the EXP Bus. Please read the EXP Overview to understand the operation of these commands and addresses.

This command is used to set individual RGB LEDs to a specific color. You can chain together multiple LEDs and colors in a single command.

This is a binary command, meaning its designed to be used by your game software talking to the FAST EXP Bus, rather than for humans using an interactive terminal emulator. (A version of this command that uses all ASCII characters is available via RS:.)

Command Syntax

RD:<count>{<index><r><g><b>...}

<count>

One byte, the binary count of how many LEDs will be updated via this command. This is needed since this command is binary, so the EXP processor needs to know the count of how much binary data to look for before it goes back to looking for ASCII characters. Valid ranges are 0-127 (binary 0x00 - 0x7F) since that's the max LEDs that can be attached to a single breakout board.

Once the count is passed, then this command loops through 4-byte chunks which contain the <index> (LED number) and the red, green, and blue color data for each LED.

<index>

This is the LED number for the LED you want to update. Individual LEDs are accessed via 0-127 (binary 0x00 - 0x7F) since that's the max LEDs that can be attached to a single breakout board.

New in firmware 0.11:

You can also use the LED blocks which you configured via the ER: command. In this case, all the LEDs in that block will be updated to the same color as if they were a single LED.

If the RD: command is addressed to an expansion board (2-digit address), then LED indexes 80-8F correspond to LED blocks on the first breakout (80-83 are the built-in blocks for the four physical LED ports, 84-8F are the user configurable blocks), 90-9F correspond to LED blocks on the second breakout, A0-AF are the third, and so on.

If the RD: command is addressed directly to a breakout board (with a 3-digit address), then LED indexes 80-8F correspond to LED blocks on that breakout, and indexes 90+ are not valid.

<r><g><b>

Each color is a single byte, in the range of 0-255 (binary 0x00 - 0xFF).

Example

To update three LEDs:

  • LED 01 - red (ff00ff)
  • LED 24 - yellow (ffff00)
  • LED 7A - blue (0000ff)

The payload of this command would look like this before it was encoded to bytes:

0301FF00FF24FFFF007A0000FF

Breaking it down:

  • 03 we are updating 3 LEDs in this command
  • 01FF00FF set LED 01 to FF00FF
  • 24FFFF00 set LED 24 to FFFF00
  • 7A0000FF set LED 7A to 0000FF
  • No <CR> at the end!

But what would actually be sent over the wire is this:

RD:<raw bytes data that would look weird when printed>

Since this command is binary, there are no commas separating LEDs and no <CR> at the end of it. (The "count" value tells the EXP Processor how many more bytes are coming, so the <CR> is not needed.)

If you have a global fade rate set (via a previously-sent RF: command for the board the LEDs are attached to), then the LEDs will fade to that rate over the given time.

Note this command has a 50ms timeout which cancels it if the <CR> is not received within that time.

Return Response

None

N or > jump the next page, P or < for previous, search with S or ?