A USB status indicator is constructed from some surplus telephone displays (Lite-On ST2225A), an arduino clone, and a photo display box. This is a work in progress.
Last Updated: October 11th, 2008
The arduino code was designed to handle n display units. In this case 4 displays are used. The code allows each display to be addressed individually but also supports arbitrary scrolling between displays. The commands are sent to the arduino using my radio protocol. This allows the unit to be used with a USB connection or a simple radio connection without changing the software.
CSB Protocol:| Byte | Contents |
|---|---|
| 0xAA | Start Marker |
| 0 - 255 | Device Address |
| 0 - 255 | Message Size - 1 (1 to 256) |
| 1 to 256 bytes | Message Data |
| 0 - 255 | XOR of all previous bytes |
The commands currently implemented by the StatusBox (sent in 'Message Data' above) are shown below. There are two sets of commands, standard commands (UpperCase) which use the built in alpha and number fonts, and raw commands which don't use the fonts. The alpha font is currently 128 ascii characters. The number font is 16 Hex digits plus another 16 characters for a total of 36 characters.
| Description | 1 | 2 | 3 | 4 | 5... | ||
|---|---|---|---|---|---|---|---|
| Brightness Low | '1' | ||||||
| Brightness Medium | '2' | ||||||
| Brightness High | '3' | ||||||
| Zero (All Displays) | 'Z' | ||||||
| Start Demo | '*' | ||||||
| Stop Demo | '+' | ||||||
| Erase Display | 'E' | disp | |||||
| Alpha Colon | 'C' | disp | on | ||||
| Number Colon | 'K' | disp | on | ||||
| Icon | 'I' | display | icon | on | |||
| Alpha Set | 'A' | display | start | # | char (#) | ||
| Number Set | 'N' | display | start | # | number (#) | ||
| Alpha Scroll | 'S' | display | 'L' or 'R' | char | |||
| Number Scroll | 'R' | display | 'L' or 'R' | number | |||
| Multi Alpha Scroll | 'M' | display | 'L' or 'R' | char | # | display list (#) | |
| Multi Number Scroll | 'P' | display | 'L' or 'R' | number | # | display list (#) | |
| Multi Number Scroll | 'P' | display | 'L' or 'R' | number | # | display list (#) | |
| Alpha Colon Raw | 'c' | disp | data | ||||
| Number Colon Raw | 'k' | disp | data | ||||
| Icon Raw | 'i' | display | data | ||||
| Alpha Set Raw | 'a' | display | start | # | data*2 (#) | ||
| Number Set Raw | 'n' | display | start | # | data (#) | ||
| Alpha Scroll Raw | 's' | display | 'L' or 'R' | msb | lsb | ||
| Number Scroll Raw | 'r' | display | 'L' or 'R' | data | |||
| Multi Alpha Scroll Raw | 'm' | display | 'L' or 'R' | msb | lsb | # | display list (#) |
| Multi Number Scroll Raw | 'p' | display | 'L' or 'R' | data | # | display list (#) |
The lights in the displays are organized in 5 banks which must be continously updated to keep the displays lit. The displays share common latch and clock lines but each is given its own data line. No additional multiplexing or external parts are needed!
Arduino Pinout:| Pin | Use |
|---|---|
| 4 to 10 | Display 0 - 6 Data Lines |
| 11 | Data Clock (Shared) |
| 12 | Data Latch (Shared) |
Ardunio Code: available here.
I wrote a quick utility to test the arduino code by sending commands from a Windows form application. The application appears below.
As part of the first StatusBox application I wrote an StatusBox IO library that wraps the serial (USB) communications. The library provides a simple functional API.
Dotnet Code:
The wiring schematic for the StatusBox is shown below. Each display has its own data line (D4 through D7) but the clock, reset, power and ground lines are shared and wired in daisy-chain fashion. Only the arduino clone and the 4 displays are used, there are no other components. Power is supplied by the arduino USB connection.

I stumbled across these surplus telephone displays and how to use them on the Serial Wombat website. I also used the RobotRoom website. Many thanks to my fellow experimenters for sharing!
This material is Copyright © 2008 Craig Buchanan. All
rights reserved. This page may be freely linked to.
Please send comments or questions to mailto:
buchananc@acm.org.