/*
Q1 -1 16- Vcc -5v
Q2 -2 15- Q0
Q3 -3 14- Data (Data In)
Q4 -4 13- OE_Enable - gnd
Q5 -5 12- Latch (ST_CP)
Q6 -6 11- Clock (SH_CP)
Q7 -7 10- CLR -5v
GND -8 9- Data 74HC595 Cascade (Data Out)
*/
byte character[27][8] =
{
{ B00011000,B00111100,B01100110,B01100110,B01111110,B01100110,B01100110,B00000000 }, //A
{ B01111100,B01100110,B01100110,B01111100,B01100110,B01100110,B01111100,B00000000 }, //B
{ B00111100,B01100110,B01000000,B01000000,B01000000,B01100110,B00111100,B00000000 }, //C
{ B11111000,B01101100,B01100110,B01100110,B01100110,B01101100,B11111000,B00000000 }, //D
{ B11111110,B01100010,B01101000,B01111000,B01101000,B01100010,B11111110,B00000000 }, //E
{ B11111110,B01100010,B01101000,B01111000,B01101000,B01100000,B11110000,B00000000 }, //F
{ B00111100,B01100110,B11000000,B11000000,B11001110,B01100110,B00111110,B00000000 }, //G
{ B11001100,B11001100,B11001100,B11111100,B11001100,B11001100,B11001100,B00000000 }, //H
{ B01111000,B00110000,B00110000,B00110000,B00110000,B00110000,B01111000,B00000000 }, //I
{ B00011110,B00001100,B00001100,B00001100,B11001100,B11001100,B01111000,B00000000 }, //J
{ B00110110,B00100110,B00101100,B00111000,B00101100,B00100110,B00110110,B00000000 }, //K
{ B11110000,B01100000,B01100000,B01100000,B01100010,B01100110,B11111110,B00000000 }, //L
{ B11000110,B11101110,B11111110,B11111110,B11010110,B11000110,B11000110,B00000000 }, //M
{ B11000110,B11100110,B11110110,B11011110,B11001110,B11000110,B11000110,B00000000 }, //N
{ B00111000,B01101100,B11000110,B11000110,B11000110,B01101100,B00111000,B00000000 }, //O
{ B01111100,B01100110,B01100110,B01111100,B01100000,B01100000,B01110000,B00000000 }, //P
{ B01111000,B11001100,B11001100,B11001100,B11011100,B01111000,B00011100,B00000000 }, //Q
{ B11111100,B01100110,B01100110,B01111100,B01101100,B01100110,B11110110,B00000000 }, //R
{ B01111000,B11001100,B11100000,B01110000,B00011100,B11001100,B01111000,B00000000 }, //S
{ B11111100,B10110100,B00110000,B00110000,B00110000,B00110000,B01111000,B00000000 }, //T
{ B11001100,B11001100,B11001100,B11001100,B11001100,B11001100,B11111100,B00000000 }, //U
{ B11001100,B11001100,B11001100,B11001100,B11001100,B01111000,B00110000,B00000000 }, //V
{ B11000110,B11000110,B11000110,B11010110,B11111110,B11101110,B11000110,B00000000 }, //W
{ B11000110,B11000110,B01101100,B00111000,B00111000,B01101100,B11000110,B00000000 }, //X
{ B11001100,B11001100,B11001100,B01111000,B00110000,B00110000,B01111000,B00000000 }, //Y
{ B11111110,B11000110,B10001100,B00011000,B00110010,B01100110,B11111110,B00000000 }, //Z
{ B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000 } //(blank)
};
/*
*/
byte data[8]= { B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000 };
byte rowbyrow[8] = {0B11111110,0B11111101,0B11111011,0B11110111,0B11101111,0B11011111,0B10111111,0B01111111};
char c[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', ' '};
//char c[27] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};
//column - anode row - cathode
String message;
int message_size;
int** arr = new int*[8]; //initialize 2-dimension array
#define DataPin_column 2
#define LatchPin_column 3
#define ClockPin_column 4
#define DataPin_row 10
#define LatchPin_row 11
#define ClockPin_row 12
void DisplayLetter( int n)
{
for(int j=0;j<8;j++)
{
digitalWrite(LatchPin_column, LOW);
shiftOut(DataPin_column, ClockPin_column, LSBFIRST, character[n][j]);
digitalWrite(LatchPin_column, HIGH);
digitalWrite(LatchPin_row, LOW);
shiftOut(DataPin_row, ClockPin_row, LSBFIRST, rowbyrow[j]);
digitalWrite(LatchPin_row, HIGH);
delay(5);
}
}
void CopyToMatrix(int startcol, int c_idx, int **arr)
{
int col = startcol*8;
for(int i=0; i<8; i++)
{
int z=7;
for(int j=col; j<col+8; j++)
{
arr[i][j] = bitRead(character[c_idx][i],z);
z-=1;
}
}
}
void setup()
{
Serial.begin(9600);
pinMode(DataPin_column, OUTPUT);
pinMode(LatchPin_column, OUTPUT);
pinMode(ClockPin_column, OUTPUT);
pinMode(DataPin_row, OUTPUT);
pinMode(LatchPin_row, OUTPUT);
pinMode(ClockPin_row, OUTPUT);
message = "WELCOME";
message_size = message.length() * 8;
Serial.println(message_size);
//***allocate dynamic 2-dimension array************
//int** arr = new int*[8]; <--declare as global
for (int i = 0; i < 8; i++)
{
arr[i] = new int[message_size];
}
//*************************************************
/*
for(int x=0; x<message.length(); x++)
{
String s = message.substring(x,x+1);
for(int i=0; i<27; i++)
{
if((String)c[i] == s)
{
Serial.print(x);
Serial.print(" - ");
Serial.print(i);
Serial.println();
CopyToMatrix(x,i,arr);
}
}
}
//Display Matrix from message
for(int d=0; d<8; d++)
{
for(int e=0; e<message_size; e++)
{
Serial.print(arr[d][e]);
}
Serial.println();
}
for(int s=0; s<8; s++)
{
int x=7;
for(int t=0; t<8; t++)
{
bitWrite(data[s],x,arr[s][t]);
x-=1;
}
}
for(int u=0; u<8; u++)
{
for(int v=0; v<8; v++)
{
Serial.print(bitRead(data[u],v));
}
Serial.println();
}
Serial.print(character[5][1],BIN);
Serial.println("f");
Serial.print(data[1],BIN);
Serial.println("f");
while(true)
{
for(int j=0;j<8;j++)
{
digitalWrite(LatchPin_column, LOW);
shiftOut(DataPin_column, ClockPin_column, LSBFIRST, data[j]);
digitalWrite(LatchPin_column, HIGH);
digitalWrite(LatchPin_row, LOW);
shiftOut(DataPin_row, ClockPin_row, LSBFIRST, rowbyrow[j]);
digitalWrite(LatchPin_row, HIGH);
delay(5);
}
}
*/
//DisplayLetter(3);
}
void loop()
{
for(int i=0;i<20;i++)
{
DisplayLetter(1);
}
DisplayLetter(26);
for(int i=0;i<20;i++)
{
DisplayLetter(10);
}
DisplayLetter(26);
for(int i=0;i<20;i++)
{
DisplayLetter(15);
}
DisplayLetter(26);
}