The BetaBrite is an indoor LED Sign designed for retail, light industrial, commercial and office use. It displays text and graphics in eight colors and three rainbow effects. The BetaBrite is one of the brightest and sharpest indoor displays available.
Use the BetaBrite to convey information about your business, products, services and specials to employees, customers, visitors, students, patients and guests. The BetaBrite can be used to display employee communications that build company loyalty, boost morale and encourage teamwork. Display the company stock price, emphasize safety issues, advertise company-wide events, promote cafeteria specials, announce birthdays and anniversaries, and publish production goals and attainment.
The BetaBrite is frequently used as a point of sale display in restaurants, specialty shops, car washes and retail businesses; in waiting rooms to inform patients; and in hotels. It is often incorporated into casino gaming devices, ticket and postage vending machines.
Messages can be entered using a remote control keyboard that is as easy to understand and use as an ordinary calculator. Our unique Automode and Autocolor programming features eliminate the need to learn complicated programming procedures. Within seconds, anyone can create attractive visual messages with attention-getting impact.
Messages are enhanced by 26 built-in display modes, multiple colors, multiple text sizes and fonts, preprogrammed animations, user-designed graphics, day, date, time of day and many other special features.
These characters and symbols allow you to compose messages in more than one language, in English and in Spanish, for example, so you can display the messages in an alternating language message sequence.
The BetaBrite Classic LED electronic message display is an economical way to get your message out faster and more efficiently than banners, paper signs, or other temporary - and often costly - indoor signage.
I have an Apple IIgs whose entire purpose in life is to sit on top of my entertainmentcenter and communicate with various things: Caller ID box, message board, andPatchBoy (my homebrew audio/video routing switcher).
The GS is running an Applesoft BASIC program witha few assembly routines pokedinto memory to do some of the serial port I/O (in straight Applesoft you can'tfind out whether there's a character waiting to be read from the serial port,without waiting for one if there turns out not to be one ready...so I neededsome assembly routines).
My Beta-Brite is model 1040-4402 EZII. Manuals for Beta-Britesigns are available from the manufacturer atwww.betabrite.com.You can download more manuals at www.ams-i.com/Pages/techdoc.htm.Here's the protocol manual.
Normally the GS tells the message board to just display the time of day. Whenthere have been phone calls, it shows the time followed by a number in anglebrackets, like "12:00 PM " to show that there were 5 phone calls.The time is Red, the count is Green. (Hitting Return on the GS keyboard acknowledgesthe calls & makes the number go away.)
When a call comes in, the info scrolls across the message board about 3 timesbefore returning to the time-of-day display. Something like"212 999-9999 SMITH FRED New York" (number in green, name in red, state in orange).It takes about 1.5 seconds longer than I would like for the info to startscrolling...if I spent a little time on my string processing I could speed this up(it goes a little faster if there is no Calling Name information in the datapacket from the phone company...that depends on your local phone company).
Pacific Bell charges me US$6.17/month, I think, for having the Caller ID datadelivered. When Pacific Bell first started delivering Caller ID data, they wereonly sending the shorter "calling number" packets, but after about a year theystarted sending only the more flexible packet format, which can (but does not always)include a name.
The "state" display is just a decoding of the area code...I found a web site listingall the North American area codes & put them into my Applesoft software. OccasionallyI check for recent additions to the master area code list & update my DATA statements.
The diagram shows the 6 inline pins, numbered left to right, with the plastic tab at the top. (Presumably the connector is facing towards you, but it doesn't say.) Use 3, 4, & 6 and ignore the others.
In the spirit of Lava Lamp build monitoring and Automated Continuous Integration and the Ambient Orb, I purchased a BetaBrite one-line electronic LED sign. This two foot LED display beats the heck out of those retro-kitsch novelty build status indicators. The BetaBrite supports full text build status information in eight colors and 12 different font styles-- including animations! It's way cool; I have yet to see someone walk by my desk who isn't mesmerized by its hypnotic animation and colors. And it's not all that expensive, either. Sam's Club has the BetaBrite sign for a reasonable $160, and that includes the serial communication cable, handheld remote, and software.
The BetaBrite is fully programmable via the infrared remote, but keying in long messages on the remote is a giant pain. It's a lot easier to connect the BetaBrite to your PC through a RS-232 Serial to RJ-12 cable, then use the bundled Windows software to program the sign:
The Windows software works fine, but what I really wanted was a native .NET API. So, armed with the protocol document and a functioning BetaBrite connection, I set out to write an easy to use .NET API for the BetaBrite.
The BetaBrite understands a subset of the Alpha Sign Communications Protocol. We're talking about RS-232 serial communications to a device with a whopping 32 kilobytes of internal memory-- not exactly a supercomputer. So, as you might expect, the protocol is a little primitive and sometimes confusing. I spent the last week poring over the documentation; here's what I found:
Anything in the Alpha Protocol Documentation referring to 2.0 or 3.0 features won't apply to the BetaBrite. Some of these are obvious, such as multiple line commands-- the BetaBrite only has one line-- and some are less obvious.
To simplify communications, all messages are sent in plain-text ASCII, with no unprintable high-bit ASCII characters. If high-bit ASCII is needed, it is encoded in a double-byte format as you'll see later.
Any ASCII character from 20h (space) to 7Eh (1/2 space) is valid as a file label, and you can allocate any combination of file labels up to the 32 kilobyte internal memory limit of the sign. Note that file label "0" is a so-called "priority label" and is treated a little differently, but other than that, they're all just named file labels for storing either Text, a String, or a Picture.
I guess I've been spoiled by the automatic memory management and garbage collector of .NET, because this one took me a while to wrap my head around. Any time you program the sign, you must allocate all the memory you'll need in advance. Any attempt to allocate more memory later will destroy all the existing memory allocations! Be sure to allocate all the memory you'll need before writing anything to the sign. This isn't a big deal in practice, but it cannot be abstracted away, so you must be aware of it.
This is the primary Public interface for the sign. It drives the Protocol and RS232 classes behind the scenes, so the user is protected from the complexities of both the Alpha Sign Communications Protocol and RS-232 serial communications. Here's a quick glance at it:
This Private class factory defines all the low-level commands necessary to talk to the sign, which can all be rendered to a byte stream via the ToBytes() method. Additionally, if you want to preview a "pretty printed" version of the command, you can call the overridden ToString() method for the command. All commands inherit from the BaseCommand class, which implements the standard Alpha packet format. The child commands must override the FormDataField method, which returns the string of text specific to that particular command class. The Sign.SetDateAndTime method illustrates how this works:
This Private class defines the communication method between the PC and the sign. It is almost completely Private, however, you still need to provide the Sign object with a comm port number. Internally, all Protocol commands are rendered into byte streams and automatically transported to the sign using Cory Smith's DBComm class. It's unmodified, other than some header comments I added attributing it to Cory. I compiled this in so the entire BetaBrite DLL can be used as a standalone interface API with no other dependencies.
Now, this example cheats a bit because the Display() method is ultra-simple. This method can only display a single message (although it can be a very long message, up to 32 KB) as a result. In order to progress beyond "Hello World", I'll show examples of the three things you can show on a BetaBrite sign.
If you run this code, you should see three different messages, with different colors, fonts, and transitions between the messages. Pay attention to the explicit memory allocation-- be sure you allocate enough memory for your text plus the one or two bytes of formatting codes per tag. As you may have noticed, text message strings support a set of lightweight HTML-style formatting codes, which you can find in the Text Formatting region of the Protocol class: look for Protocol.ControlChars, Protocol.Color, Protocol.Font, Protocol.ExtChar and Protocol.CharAttrib. I won't bother listing them all here, because the demonstration solution shows examples of each and every one. However, it is important to bear in mind that, unlike HTML, these tags do not support closing tags-- so if you change the color, it will stay changed for the rest of your messages! Be sure to change the color back when you're done.
I didn't specify a run sequence here because file A always runs by default. The main advantage of strings is that they can be dynamically updated without making the sign "flash", so think of them as variables. They support a subset of the formatting codes that text messages support, so unless you need a variable, stick with text messages.
7fc3f7cf58