Skip to content

Instantly share code, notes, and snippets.

@sashaegorov
Forked from liftoff/mbi5026.ino
Last active August 29, 2015 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sashaegorov/28da7c1089739d48cc18 to your computer and use it in GitHub Desktop.
Save sashaegorov/28da7c1089739d48cc18 to your computer and use it in GitHub Desktop.
// I pasted this without even looking at it. It the code running in the video here: http://youtu.be/OZ_9Yg0PG3M
// The video is of an Arduino controlling a single 8x8 LED matrix via an MBI5026 chip + a single 74HC595 shift register.
// Link to the MBI5026: http://www.rayslogic.com/propeller/programming/AdafruitRGB/MBI5026.pdf
#define SDI 10
#define CLK 9
#define LE 8
#define LED 17
// 74HC595
#define SHSDI 3 // DS (pin 14 on shift register)
#define SHCLK 5 // SH CP (pin 11 on shift register)
#define SHLE 4 // ST CP (pin 12 on shift register)
int bits[] = {B00000001, B00000010, B00000100, B00001000, B00010000, B00100000, B01000000, B10000000};
int masks[] = {B11111110, B11111101, B11111011, B11110111, B11101111, B11011111, B10111111, B01111111};
byte bitmap[8][1]; // Change the 7 to however many matrices you want to use.
int numZones = sizeof(bitmap) / 8; // I will refer to each group of 8 columns (represented by one matrix) as a Zone.
int maxZoneIndex = numZones-1;
int numCols = numZones * 8;
//=== F O N T ===
// Font courtesy of aspro648
// http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1203747843/22
// First char is @, next is A, B, etc. Only lower case, no symbols.
// The @ will display as space character.
const byte alphabets[][5] = {
{0,0,0,0,0},
{31, 36, 68, 36, 31},
{127, 73, 73, 73, 54},
{62, 65, 65, 65, 34},
{127, 65, 65, 34, 28},
{127, 73, 73, 65, 65},
{127, 72, 72, 72, 64},
{62, 65, 65, 69, 38},
{127, 8, 8, 8, 127},
{0, 65, 127, 65, 0},
{2, 1, 1, 1, 126},
{127, 8, 20, 34, 65},
{127, 1, 1, 1, 1},
{127, 32, 16, 32, 127},
{127, 32, 16, 8, 127},
{62, 65, 65, 65, 62},
{127, 72, 72, 72, 48},
{62, 65, 69, 66, 61},
{127, 72, 76, 74, 49},
{50, 73, 73, 73, 38},
{64, 64, 127, 64, 64},
{126, 1, 1, 1, 126},
{124, 2, 1, 2, 124},
{126, 1, 6, 1, 126},
{99, 20, 8, 20, 99},
{96, 16, 15, 16, 96},
{67, 69, 73, 81, 97},
};
byte numbers[][5] =
{
{ 0,0,0,0,0 },
{ 0x7E, 0x89, 0x91, 0xA1, 0x7E },
{ 0x00, 0x41, 0xFF, 0x01, 0x00 },
{ 0x43, 0x85, 0x89, 0x91, 0x61 },
{ 0x42, 0x81, 0x91, 0x91, 0x6E },
{ 0x18, 0x28, 0x48, 0xFF, 0x08 },
{ 0xF2, 0x91, 0x91, 0x91, 0x8E },
{ 0x1E, 0x29, 0x49, 0x89, 0x86 },
{ 0x80, 0x8F, 0x90, 0xA0, 0xC0 },
{ 0x6E, 0x91, 0x91, 0x91, 0x6E },
{ 0x70, 0x89, 0x89, 0x8A, 0x7C }
};
const uint8_t charset[] PROGMEM = {
0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xFF
,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0
,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xFF
,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0xFF
,0x0C,0x18,0x30,0x7E,0x0C,0x18,0x30,0x00
,0xFF,0xC3,0xE7,0xDB,0xDB,0xE7,0xC3,0xFF
,0x00,0x01,0x03,0x06,0xCC,0x78,0x30,0x00
,0x3C,0x66,0xC3,0xC3,0xFF,0x24,0xE7,0x00
,0x00,0x00,0x30,0x60,0xFF,0x60,0x30,0x00
,0x00,0x00,0x0C,0x06,0xFF,0x06,0x0C,0x00
,0x18,0x18,0x18,0x18,0xDB,0x7E,0x3C,0x18
,0x18,0x3C,0x7E,0xDB,0x18,0x18,0x18,0x18
,0x18,0x5A,0x3C,0x99,0xDB,0x7E,0x3C,0x18
,0x00,0x03,0x33,0x63,0xFE,0x60,0x30,0x00
,0x3C,0x66,0xFF,0xDB,0xDB,0xFF,0x66,0x3C
,0x3C,0x66,0xC3,0xDB,0xDB,0xC3,0x66,0x3C
,0xFF,0xC3,0xC3,0xFF,0xC3,0xC3,0xC3,0xFF
,0x3C,0x7E,0xDB,0xDB,0xDF,0xC3,0x66,0x3C
,0x3C,0x66,0xC3,0xDF,0xDB,0xDB,0x7E,0x3C
,0x3C,0x66,0xC3,0xFB,0xDB,0xDB,0x7E,0x3C
,0x3C,0x7E,0xDB,0xDB,0xFB,0xC3,0x66,0x3C
,0x00,0x01,0x33,0x1E,0xCE,0x7B,0x31,0x00
,0x7E,0x66,0x66,0x66,0x66,0x66,0x66,0xE7
,0x03,0x03,0x03,0xFF,0x03,0x03,0x03,0x00
,0xFF,0x66,0x3C,0x18,0x18,0x3C,0x66,0xFF
,0x18,0x18,0x3C,0x3C,0x3C,0x3C,0x18,0x18
,0x3C,0x66,0x66,0x30,0x18,0x00,0x18,0x00
,0x3C,0x66,0xC3,0xFF,0xC3,0xC3,0x66,0x3C
,0xFF,0xDB,0xDB,0xDB,0xFB,0xC3,0xC3,0xFF
,0xFF,0xC3,0xC3,0xFB,0xDB,0xDB,0xDB,0xFF
,0xFF,0xC3,0xC3,0xDF,0xDB,0xDB,0xDB,0xFF
,0xFF,0xDB,0xDB,0xDB,0xDF,0xC3,0xC3,0xFF
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x18,0x18,0x18,0x18,0x18,0x00,0x18,0x00
,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00
,0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00
,0x18,0x3E,0x58,0x3C,0x1A,0x7C,0x18,0x00
,0x00,0xC6,0xCC,0x18,0x30,0x66,0xC6,0x00
,0x38,0x6C,0x38,0x76,0xDC,0xCC,0x76,0x00
,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00
,0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00
,0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00
,0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00
,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30
,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00
,0x06,0x0C,0x18,0x30,0x60,0xC0,0x80,0x00
,0x7C,0xC6,0xCE,0xD6,0xE6,0xC6,0x7C,0x00
,0x18,0x38,0x18,0x18,0x18,0x18,0x7E,0x00
,0x3C,0x66,0x06,0x3C,0x60,0x66,0x7E,0x00
,0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00
,0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x1E,0x00
,0x7E,0x62,0x60,0x7C,0x06,0x66,0x3C,0x00
,0x3C,0x66,0x60,0x7C,0x66,0x66,0x3C,0x00
,0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00
,0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00
,0x3C,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00
,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x00
,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x30
,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00
,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00
,0x60,0x30,0x18,0x0C,0x18,0x30,0x60,0x00
,0x3C,0x66,0x66,0x0C,0x18,0x00,0x18,0x00
,0x7C,0xC6,0xDE,0xDE,0xDE,0xC0,0x7C,0x00
,0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00
,0xFC,0x66,0x66,0x7C,0x66,0x66,0xFC,0x00
,0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00
,0xF8,0x6C,0x66,0x66,0x66,0x6C,0xF8,0x00
,0xFE,0x62,0x68,0x78,0x68,0x62,0xFE,0x00
,0xFE,0x62,0x68,0x78,0x68,0x60,0xF0,0x00
,0x3C,0x66,0xC0,0xC0,0xCE,0x66,0x3E,0x00
,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00
,0x7E,0x18,0x18,0x18,0x18,0x18,0x7E,0x00
,0x1E,0x0C,0x0C,0x0C,0xCC,0xCC,0x78,0x00
,0xE6,0x66,0x6C,0x78,0x6C,0x66,0xE6,0x00
,0xF0,0x60,0x60,0x60,0x62,0x66,0xFE,0x00
,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00
,0xC6,0xE6,0xF6,0xDE,0xCE,0xC6,0xC6,0x00
,0x38,0x6C,0xC6,0xC6,0xC6,0x6C,0x38,0x00
,0xFC,0x66,0x66,0x7C,0x60,0x60,0xF0,0x00
,0x38,0x6C,0xC6,0xC6,0xDA,0xCC,0x76,0x00
,0xFC,0x66,0x66,0x7C,0x6C,0x66,0xE6,0x00
,0x3C,0x66,0x60,0x3C,0x06,0x66,0x3C,0x00
,0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00
,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00
,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00
,0xC6,0xC6,0xC6,0xD6,0xFE,0xEE,0xC6,0x00
,0xC6,0x6C,0x38,0x38,0x6C,0xC6,0xC6,0x00
,0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00
,0xFE,0xC6,0x8C,0x18,0x32,0x66,0xFE,0x00
,0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00
,0xC0,0x60,0x30,0x18,0x0C,0x06,0x02,0x00
,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00
,0x18,0x3C,0x7E,0x18,0x18,0x18,0x18,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF
,0x30,0x18,0x0C,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x78,0x0C,0x7C,0xCC,0x76,0x00
,0xE0,0x60,0x7C,0x66,0x66,0x66,0xDC,0x00
,0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00
,0x1C,0x0C,0x7C,0xCC,0xCC,0xCC,0x76,0x00
,0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00
,0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00
,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x7C
,0xE0,0x60,0x6C,0x76,0x66,0x66,0xE6,0x00
,0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00
,0x06,0x00,0x0E,0x06,0x06,0x66,0x66,0x3C
,0xE0,0x60,0x66,0x6C,0x78,0x6C,0xE6,0x00
,0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00
,0x00,0x00,0x6C,0xFE,0xD6,0xD6,0xC6,0x00
,0x00,0x00,0xDC,0x66,0x66,0x66,0x66,0x00
,0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00
,0x00,0x00,0xDC,0x66,0x66,0x7C,0x60,0xF0
,0x00,0x00,0x76,0xCC,0xCC,0x7C,0x0C,0x1E
,0x00,0x00,0xDC,0x76,0x60,0x60,0xF0,0x00
,0x00,0x00,0x3C,0x60,0x3C,0x06,0x7C,0x00
,0x30,0x30,0x7C,0x30,0x30,0x36,0x1C,0x00
,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x00
,0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00
,0x00,0x00,0xC6,0xD6,0xD6,0xFE,0x6C,0x00
,0x00,0x00,0xC6,0x6C,0x38,0x6C,0xC6,0x00
,0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C
,0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00
,0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00
,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00
,0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00
,0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00
,0xCC,0x33,0xCC,0x33,0xCC,0x33,0xCC,0x33
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00
,0x0F,0x0F,0x0F,0x0F,0x00,0x00,0x00,0x00
,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0xF0,0xF0,0xF0,0xF0
,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
,0x0F,0x0F,0x0F,0x0F,0xF0,0xF0,0xF0,0xF0
,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0
,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F
,0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F
,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F
,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x0F,0x0F
,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF
,0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF
,0x0F,0x0F,0x0F,0x0F,0xFF,0xFF,0xFF,0xFF
,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00
,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00
,0x00,0x00,0x00,0x1F,0x1F,0x00,0x00,0x00
,0x18,0x18,0x18,0x1F,0x0F,0x00,0x00,0x00
,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18
,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18
,0x00,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18
,0x18,0x18,0x18,0x1F,0x1F,0x18,0x18,0x18
,0x00,0x00,0x00,0xF8,0xF8,0x00,0x00,0x00
,0x18,0x18,0x18,0xF8,0xF0,0x00,0x00,0x00
,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00
,0x18,0x18,0x18,0xFF,0xFF,0x00,0x00,0x00
,0x00,0x00,0x00,0xF0,0xF8,0x18,0x18,0x18
,0x18,0x18,0x18,0xF8,0xF8,0x18,0x18,0x18
,0x00,0x00,0x00,0xFF,0xFF,0x18,0x18,0x18
,0x18,0x18,0x18,0xFF,0xFF,0x18,0x18,0x18
,0x10,0x38,0x6C,0xC6,0x00,0x00,0x00,0x00
,0x0C,0x18,0x30,0x00,0x00,0x00,0x00,0x00
,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00
,0x3C,0x66,0x60,0xF8,0x60,0x66,0xFE,0x00
,0x38,0x44,0xBA,0xA2,0xBA,0x44,0x38,0x00
,0x7E,0xF4,0xF4,0x74,0x34,0x34,0x34,0x00
,0x1E,0x30,0x38,0x6C,0x38,0x18,0xF0,0x00
,0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00
,0x40,0xC0,0x44,0x4C,0x54,0x1E,0x04,0x00
,0x40,0xC0,0x4C,0x52,0x44,0x08,0x1E,0x00
,0xE0,0x10,0x62,0x16,0xEA,0x0F,0x02,0x00
,0x00,0x18,0x18,0x7E,0x18,0x18,0x7E,0x00
,0x18,0x18,0x00,0x7E,0x00,0x18,0x18,0x00
,0x00,0x00,0x00,0x7E,0x06,0x06,0x00,0x00
,0x18,0x00,0x18,0x30,0x66,0x66,0x3C,0x00
,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00
,0x00,0x00,0x73,0xDE,0xCC,0xDE,0x73,0x00
,0x7C,0xC6,0xC6,0xFC,0xC6,0xC6,0xF8,0xC0
,0x00,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00
,0x3C,0x60,0x60,0x3C,0x66,0x66,0x3C,0x00
,0x00,0x00,0x1E,0x30,0x7C,0x30,0x1E,0x00
,0x38,0x6C,0xC6,0xFE,0xC6,0x6C,0x38,0x00
,0x00,0xC0,0x60,0x30,0x38,0x6C,0xC6,0x00
,0x00,0x00,0x66,0x66,0x66,0x7C,0x60,0x60
,0x00,0x00,0x00,0xFE,0x6C,0x6C,0x6C,0x00
,0x00,0x00,0x00,0x7E,0xD8,0xD8,0x70,0x00
,0x03,0x06,0x0C,0x3C,0x66,0x3C,0x60,0xC0
,0x03,0x06,0x0C,0x66,0x66,0x3C,0x60,0xC0
,0x00,0xE6,0x3C,0x18,0x38,0x6C,0xC7,0x00
,0x00,0x00,0x66,0xC3,0xDB,0xDB,0x7E,0x00
,0xFE,0xC6,0x60,0x30,0x60,0xC6,0xFE,0x00
,0x00,0x7C,0xC6,0xC6,0xC6,0x6C,0xEE,0x00
,0x18,0x30,0x60,0xC0,0x80,0x00,0x00,0x00
,0x18,0x0C,0x06,0x03,0x01,0x00,0x00,0x00
,0x00,0x00,0x00,0x01,0x03,0x06,0x0C,0x18
,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x18
,0x18,0x3C,0x66,0xC3,0x81,0x00,0x00,0x00
,0x18,0x0C,0x06,0x03,0x03,0x06,0x0C,0x18
,0x00,0x00,0x00,0x81,0xC3,0x66,0x3C,0x18
,0x18,0x30,0x60,0xC0,0xC0,0x60,0x30,0x18
,0x18,0x30,0x60,0xC1,0x83,0x06,0x0C,0x18
,0x18,0x0C,0x06,0x83,0xC1,0x60,0x30,0x18
,0x18,0x3C,0x66,0xC3,0xC3,0x66,0x3C,0x18
,0xC3,0xE7,0x7E,0x3C,0x3C,0x7E,0xE7,0xC3
,0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0
,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03
,0xCC,0xCC,0x33,0x33,0xCC,0xCC,0x33,0x33
,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55
,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00
,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03
,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF
,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0
,0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80
,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01
,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF
,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF
,0xAA,0x55,0xAA,0x55,0x00,0x00,0x00,0x00
,0x0A,0x05,0x0A,0x05,0x0A,0x05,0x0A,0x05
,0x00,0x00,0x00,0x00,0xAA,0x55,0xAA,0x55
,0xA0,0x50,0xA0,0x50,0xA0,0x50,0xA0,0x50
,0xAA,0x54,0xA8,0x50,0xA0,0x40,0x80,0x00
,0xAA,0x55,0x2A,0x15,0x0A,0x05,0x02,0x01
,0x01,0x02,0x05,0x0A,0x15,0x2A,0x55,0xAA
,0x00,0x80,0x40,0xA0,0x50,0xA8,0x54,0xAA
,0x7E,0xFF,0x99,0xFF,0xBD,0xC3,0xFF,0x7E
,0x7E,0xFF,0x99,0xFF,0xC3,0xBD,0xFF,0x7E
,0x38,0x38,0xFE,0xFE,0xFE,0x10,0x38,0x00
,0x10,0x38,0x7C,0xFE,0x7C,0x38,0x10,0x00
,0x6C,0xFE,0xFE,0xFE,0x7C,0x38,0x10,0x00
,0x10,0x38,0x7C,0xFE,0xFE,0x10,0x38,0x00
,0x00,0x3C,0x66,0xC3,0xC3,0x66,0x3C,0x00
,0x00,0x3C,0x7E,0xFF,0xFF,0x7E,0x3C,0x00
,0x00,0x7E,0x66,0x66,0x66,0x66,0x7E,0x00
,0x00,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x00
,0x0F,0x07,0x0D,0x78,0xCC,0xCC,0xCC,0x78
,0x3C,0x66,0x66,0x66,0x3C,0x18,0x7E,0x18
,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x7C,0x38
,0x18,0x1C,0x1E,0x1B,0x18,0x78,0xF8,0x70
,0x99,0x5A,0x24,0xC3,0xC3,0x24,0x5A,0x99
,0x10,0x38,0x38,0x38,0x38,0x38,0x7C,0xD6
,0x18,0x3C,0x7E,0xFF,0x18,0x18,0x18,0x18
,0x18,0x18,0x18,0x18,0xFF,0x7E,0x3C,0x18
,0x10,0x30,0x70,0xFF,0xFF,0x70,0x30,0x10
,0x08,0x0C,0x0E,0xFF,0xFF,0x0E,0x0C,0x08
,0x00,0x00,0x18,0x3C,0x7E,0xFF,0xFF,0x00
,0x00,0x00,0xFF,0xFF,0x7E,0x3C,0x18,0x00
,0x80,0xE0,0xF8,0xFE,0xF8,0xE0,0x80,0x00
,0x02,0x0E,0x3E,0xFE,0x3E,0x0E,0x02,0x00
,0x38,0x38,0x92,0x7C,0x10,0x28,0x28,0x28
,0x38,0x38,0x10,0xFE,0x10,0x28,0x44,0x82
,0x38,0x38,0x12,0x7C,0x90,0x28,0x24,0x22
,0x38,0x38,0x90,0x7C,0x12,0x28,0x48,0x88
,0x00,0x3C,0x18,0x3C,0x3C,0x3C,0x18,0x00
,0x3C,0xFF,0xFF,0x18,0x0C,0x18,0x30,0x18
,0x18,0x3C,0x7E,0x18,0x18,0x7E,0x3C,0x18
,0x00,0x24,0x66,0xFF,0x66,0x24,0x00,0x00
};
// NOTE: Don't forget to connect MR to +5V and OE to ground!
void setup() {
pinMode(SDI, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(LE, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(SHSDI, OUTPUT);
pinMode(SHCLK, OUTPUT);
pinMode(SHLE, OUTPUT);
//-- Clear bitmap --
for (int row = 0; row < 8; row++) {
for (int zone = 0; zone <= maxZoneIndex; zone++) {
bitmap[row][zone] = 0;
}
}
}
// NOTE: data1 is the first 8 pins; data2 is the second 8
void MBIOut(byte data1, byte data2) {
shiftOut(SDI, CLK, MSBFIRST, data2);
shiftOut(SDI, CLK, MSBFIRST, data1);
digitalWrite(LE, HIGH);
delayMicroseconds(1);
digitalWrite(LE, LOW);
}
void SHOut(byte data) {
digitalWrite(SHLE, LOW);
shiftOut(SHSDI, SHCLK, MSBFIRST, data);
digitalWrite(SHLE, HIGH);
}
void ShiftAll(byte anode1, byte cathode1, byte cathode2) {
digitalWrite(LE, LOW);
shiftOut(SDI, CLK, MSBFIRST, anode1);
shiftOut(SDI, CLK, MSBFIRST, anode1);
shiftOut(SDI, CLK, MSBFIRST, cathode2);
shiftOut(SDI, CLK, MSBFIRST, cathode1); // MBI5026 (sink) comes first
digitalWrite(LE, HIGH);
//shiftOut(SDI, CLK, MSBFIRST, cathode2);
}
void testAllLEDs() {
for (int i=0; i < 8; i++) {
//MBIOut(bits[i], bits[i]);
for (int n=0; n < 8; n++) {
//SHOut(bits[n]);
ShiftAll(bits[n], bits[i], bits[i]);
delay(25);
}
}
}
// This routine takes whatever we've setup in the bitmap array and display it on the matrix
void RefreshDisplay()
{
for (int row = 0; row < 8; row++) {
int rowbit = 1 << row;
//-- Shift out to each matrix (zone is 8 columns represented by one matrix)
for (int zone = maxZoneIndex; zone >= 0; zone--) {
ShiftAll(bitmap[row][zone], rowbit, rowbit);
}
//-- Wait a little bit to let humans see what we've pushed out onto the matrix --
delayMicroseconds(500);
}
}
// Converts row and colum to actual bitmap bit and turn it off/on
void Plot(int col, int row, bool isOn)
{
int zone = col / 8;
int colBitIndex = col % 8;
byte colBit = 1 << colBitIndex;
if (isOn)
bitmap[row][zone] = bitmap[row][zone] | colBit;
else
bitmap[row][zone] = bitmap[row][zone] & (~colBit);
}
// Plot each character of the message one column at a time, updated the display, shift bitmap left.
void AlphabetSoup()
{
char msg[] = "IT WORKS ";
for (int charIndex=0; charIndex < (sizeof(msg)-1); charIndex++)
{
//int charsetIndex = msg[charIndex];
int alphabetIndex = msg[charIndex] - '@'; // Note: @ == 64
if (alphabetIndex < 0) alphabetIndex=0;
//-- Draw one character of the message --
// Each character is only 5 columns wide, but I loop two more times to create 2 pixel space betwen characters
for (int col = 0; col < 7; col++)
{
for (int row = 0; row < 8; row++)
{
// Set the pixel to what the alphabet say for columns 0 thru 4, but always leave columns 5 and 6 blank.
bool isOn = 0;
//if (col<5) isOn = pgm_read_byte(&charset[charsetIndex]);
if (col<5) isOn = bitRead(alphabets[alphabetIndex][col], 7-row ) == 1;
Plot(numCols-1, row, isOn); // We ALWAYS draw on the rightmost column, the shift loop below will scroll it leftward.
}
//-- The more times you repeat this loop, the slower we would scroll --
for (int refreshCount=0; refreshCount < 10; refreshCount++)
RefreshDisplay();
//-- Shift the bitmap one column to left --
for (int row=0; row<8; row++)
{
for (int zone=0; zone < numZones; zone++)
{
// This right shift would show as a left scroll on display because leftmost column is represented by least significant bit of the byte.
bitmap[row][zone] = bitmap[row][zone] >> 1;
// Roll over lowest bit from the next zone as highest bit of this zone.
if (zone < maxZoneIndex) bitWrite(bitmap[row][zone], 7, bitRead(bitmap[row][zone+1],0));
}
}
}
}
}
void loop() {
//testAllLEDs();
AlphabetSoup();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment