it seems the "scoreboard signal" is unique to some venders scoreboard, actually encoding the digits for that venders hardware
it would make more sense for the cmd to provide data in ASCII and the display software translates the ASCII into whatever encoding is necessary for the hardware. of course it's simple if the display hardware accepts ASCII
nonetheless, look this over
output:
0xBF 31 1
0xBF 31 1
0x86 32 2
0x86 32 2
0xDB 33 3
0xDB 33 3
0xCF 34 4
0xCF 34 4
0xE6 35 5
0xE6 35 5
0xED 36 6
0xED 36 6
0x87 38 8
0x87 38 8
0xFF 39 9
0xFF 39 9
char s [90];
// -----------------------------------------------------------------------------
const byte codeTbl [] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67, 0x00 };
const byte asciiTbl [] = {
'1', '2', '3', '4', '5', '6', '7', '8', '9', ' ' };
const int Ncodes = sizeof(codeTbl);
byte
translate (
const byte code )
{
for (int n = 0; n < Ncodes; n++)
if (codeTbl [n] == (code & 0x7f))
return asciiTbl [n];
return 0;
}
// -----------------------------------------------------------------------------
const byte testData [] = {
0x55, 0xaa, 0x01, 0x11, 0x05, 0xea, 0x22, 0xbf,
0xbf, 0x86, 0x86, 0xdb, 0xdb, 0xcf, 0xcf, 0xe6,
0xe6, 0xed, 0xed, 0x87, 0x87, 0xff, 0xff, 0x4e };
const int Ndata = sizeof(testData);
void
setup (void)
{
Serial.begin (9600);
for (int n = 0; n < Ndata; n++) {
char asc = translate (testData [n]);
if (0 != asc) {
sprintf (s, " 0x%02X %02x %c", testData [n], asc, asc);
Serial.println (s);
}
}
Serial.println ();
}
void
loop (void)
{
}