const int columnPins[] = {2,3,4,5,6,7,8,9};
const int rowPins[] = {A0, A1, A2, A3, A4, A5, A6, A7};
int BUTTON_PIN = 21;
int speed =300;
int pressedTime, releasedTime, pressDuration;
int PRESS_TIME =500;
//Rows
#define R1 A0
#define R2 A1
#define R3 A2
#define R4 A3
#define R5 A4
#define R6 A5
#define R7 A6
#define R8 A7
//Columns
#define C1 2
#define C2 3
#define C3 4
#define C4 5
#define C5 6
#define C6 7
#define C7 8
#define C8 9
//defining position
int direction=0; //7 for left to right , 0 for right to left
int initialcol=7;//0 for left to right , 7 for right to left
String text="";
long initialsec;
long finalsec;
//matrix that gets printed to LEDs, it starts of blank but will be changed to what needs to get printed
int printedmatrix [8][8]={
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1}
};
//matrix 0
int leta [8][8]={
{1,1,1,0,1,1,1,1},
{1,1,0,1,0,1,1,1},
{1,0,1,1,1,0,1,1},
{1,0,1,1,1,0,1,1},
{1,0,0,0,0,0,1,1},
{1,0,1,1,1,0,1,1},
{1,0,1,1,1,0,1,1},
{1,1,1,1,1,1,1,1}
};
int letb [8][8]={
{1,1,1,1,1,1,1,1},
{1,0,0,0,1,1,1,1},
{1,0,1,1,0,1,1,1},
{1,0,1,1,0,1,1,1},
{1,0,0,0,1,1,1,1},
{1,0,1,1,0,1,1,1},
{1,0,1,1,0,1,1,1},
{1,0,0,0,1,1,1,1}
};
int letc [8][8]={
{1,1,0,0,0,0,1,1},
{1,0,0,1,1,0,0,1},
{0,0,1,1,1,1,1,1},
{0,0,1,1,1,1,1,1},
{0,0,1,1,1,1,1,1},
{1,0,0,1,1,0,0,1},
{1,1,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1}
};
int letd [8][8]={
{0,0,0,0,0,1,1,1},
{1,0,0,1,0,0,1,1},
{1,0,0,1,1,0,0,1},
{1,0,0,1,1,0,0,1},
{1,0,0,1,1,0,0,1},
{1,0,0,1,0,0,1,1},
{0,0,0,0,0,1,1,1},
{1,1,1,1,1,1,1,1}
};
int lete [8][8]={
{0,0,0,0,0,0,0,1},
{1,0,1,1,1,1,01},
{1,0,1,0,1,1,1,1},
{1,0,0,0,1,1,1,1},
{1,0,1,0,1,1,1,1},
{1,0,1,1,1,1,0,1},
{0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1}
};
int letf [8][8]={
{0,0,0,0,0,0,0,1},
{1,0,0,1,1,1,0,1},
{1,0,0,1,0,1,1,1},
{1,0,0,0,0,1,1,1},
{1,0,0,1,0,1,1,1},
{1,0,0,1,1,1,1,1},
{0,0,0,0,1,1,1,1},
{1,1,1,1,1,1,1,1}
};
int letg [8][8]={
{1,1,0,0,0,0,1,1},
{1,0,0,1,1,0,0,1},
{0,0,1,1,1,1,1,1},
{0,0,1,1,1,1,1,1},
{0,0,1,1,0,0,0,1},
{1,0,0,1,1,0,0,1},
{1,1,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1}
};
int leth [8][8]={
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,0,0,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{1,1,1,1,1,1,1,1}
};
int leti [8][8]={
{1,0,0,0,0,1,1,1},
{1,1,0,0,1,1,1,1},
{1,1,0,0,1,1,1,1},
{1,1,0,0,1,1,1,1},
{1,1,0,0,1,1,1,1},
{1,1,0,0,1,1,1,1},
{1,0,0,0,0,1,1,1},
{1,1,1,1,1,1,1,1}
};
int letj [8][8]={
{1,1,1,0,0,0,0,1},
{1,1,1,1,0,0,1,1},
{1,1,1,1,0,0,1,1},
{1,1,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{1,0,0,0,0,1,1,1},
{1,1,1,1,1,1,1,1}
};
int letk [8][8]={
{0,0,0,1,1,0,0,1},
{1,0,0,1,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,0,0,0,0,1,1,1},
{1,0,0,1,0,0,1,1},
{1,0,0,1,1,0,0,1},
{0,0,0,1,1,0,0,1},
{1,1,1,1,1,1,1,1}
};
int letl [8][8]={
{0,0,0,0,1,1,1,1},
{1,0,0,1,1,1,1,1},
{1,0,0,1,1,1,1,1},
{1,0,0,1,1,1,1,1},
{1,0,0,1,1,1,0,1},
{1,0,0,1,1,0,0,1},
{0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1}
};
int letm [8][8]={
{0,0,1,1,1,0,0,1},
{0,0,0,1,0,0,0,1},
{0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,1},
{0,0,1,0,1,0,0,1},
{0,0,1,1,1,0,0,1},
{0,0,1,1,1,0,0,1},
{1,1,1,1,1,1,1,1}
};
int letn [8][8]={
{0,0,1,1,1,0,0,1},
{0,0,0,1,1,0,0,1},
{0,0,0,0,1,0,0,1},
{0,0,1,0,0,0,0,1},
{0,0,1,1,0,0,0,1},
{0,0,1,1,1,0,0,1},
{0,0,1,1,1,0,0,1},
{1,1,1,1,1,1,1,1}
};
int leto [8][8]={
{1,1,0,0,0,1,1,1},
{1,0,0,1,0,0,1,1},
{0,0,1,1,1,0,0,1},
{0,0,1,1,1,0,0,1},
{0,0,1,1,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,1,0,0,0,1,1,1},
{1,1,1,1,1,1,1,1}
};
int letp [8][8]={
{0,0,0,0,0,0,1,1},
{1,0,0,1,1,0,0,1},
{1,0,0,1,1,0,0,1},
{1,0,0,0,0,0,1,1},
{1,0,0,1,1,1,1,1},
{1,0,0,1,1,1,1,1},
{0,0,0,0,1,1,1,1},
{1,1,1,1,1,1,1,1}
};
int letq [8][8]={
{1,0,0,0,0,1,1,1},
{0,0,1,1,0,0,1,1},
{0,1,1,1,0,0,1,1},
{0,1,1,1,0,0,1,1},
{0,0,1,0,0,0,1,1},
{1,0,0,0,0,1,1,1},
{1,1,1,0,0,0,1,1},
{1,1,1,1,1,1,1,1}
};
int letr [8][8]={
{0,0,0,0,0,0,1,1},
{1,0,0,1,1,0,0,1},
{1,0,0,1,1,0,0,1},
{1,0,0,0,0,0,1,1},
{1,0,0,1,0,0,1,1},
{1,0,0,1,1,0,0,1},
{0,0,0,1,1,0,0,1},
{1,1,1,1,1,1,1,1}
};
int lets [8][8]={
{1,0,0,0,0,1,1,1},
{0,0,1,1,0,0,1,1},
{0,0,0,1,1,1,1,1},
{1,0,0,0,1,1,1,1},
{1,1,1,0,0,0,1,1},
{0,0,1,1,0,0,1,1},
{1,0,0,0,0,1,1,1},
{1,1,1,1,1,1,1,1}
};
int lett [8][8]={
{0,0,0,0,0,0,1,1},
{0,1,0,0,1,0,1,1},
{1,1,0,0,1,1,1,1},
{1,1,0,0,1,1,1,1},
{1,1,0,0,1,1,1,1},
{1,1,0,0,1,1,1,1},
{1,0,0,0,0,1,1,1},
{1,1,1,1,1,1,1,1}
};
int letu [8][8]={
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1}
};
int letv [8][8]={
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{1,0,0,0,0,1,1,1},
{1,1,0,0,1,1,1,1},
{1,1,1,1,1,1,1,1}
};
int letw [8][8]={
{0,0,1,1,1,0,0,1},
{0,0,1,1,1,0,0,1},
{0,0,1,0,1,0,0,1},
{0,0,0,0,0,0,0,1},
{0,0,0,0,0,0,0,1},
{0,0,0,1,0,0,0,1},
{0,0,1,1,1,0,0,1},
{1,1,1,1,1,1,1,1}
};
int letx [8][8]={
{0,0,1,1,1,0,0,1},
{0,0,1,1,1,0,0,1},
{1,0,0,1,0,0,1,1},
{1,1,0,0,0,1,1,1},
{1,1,0,0,0,1,1,1},
{1,0,0,1,0,0,1,1},
{0,0,1,1,1,0,0,1},
{1,1,1,1,1,1,1,1}
};
int lety [8][8]={
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{0,0,1,1,0,0,1,1},
{1,0,0,0,0,1,1,1},
{1,1,0,0,1,1,1,1},
{1,1,0,0,1,1,1,1},
{1,0,0,0,0,1,1,1},
{1,1,1,1,1,1,1,1}
};
int letz [8][8]={
{0,0,0,0,0,0,0,1},
{0,1,1,1,1,0,0,1},
{0,1,1,1,0,0,1,1},
{1,1,1,0,0,1,1,1},
{1,1,0,0,1,1,0,1},
{1,0,0,1,1,0,0,1},
{0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1}
};
//matrix 26
int letspace [8][8]={
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1}
};
void setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(21), but, CHANGE);
pinMode(21, INPUT_PULLUP);
cli();//stop interrupts
//set timer1 interrupts
TCCR1A = 0; //set entire TCCR1A register to 0
TCCR1B = 0; //same for TCCR1B
TCNT1 = 0; //initialize counter value to 0
// set compare match register for 1hz increments
OCR1A = 500; // 16000000/(1024*(1/2.5)) - 1
// turn on CTC mode
TCCR1B |= (1 << WGM12);
//set CS12 and CS10 bits for 1024 prescalar
TCCR1B |= (1 << CS12) | (1 << CS10);
// enable timer compare interrupt
TIMSK1 |= (1 << OCIE1A );
sei();//allow interrupts
//declaring as output
pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(R3, OUTPUT);
pinMode(R4, OUTPUT);
pinMode(R5, OUTPUT);
pinMode(R6, OUTPUT);
pinMode(R7, OUTPUT);
pinMode(R8, OUTPUT);
pinMode(C1, OUTPUT);
pinMode(C2, OUTPUT);
pinMode(C3, OUTPUT);
pinMode(C4, OUTPUT);
pinMode(C5, OUTPUT);
pinMode(C6, OUTPUT);
pinMode(C7, OUTPUT);
pinMode(C8, OUTPUT);
TurnOffALL_LED();
}
void loop() {
Serial.println("Enter TEXT TO DISPLAY");
while(Serial.available()==0){}
while(Serial.available()>0){
text=Serial.readStringUntil('\n');
}
text.toUpperCase();
//Serial.println(text);
for(int i=0;i<=text.length()-1;i++){ //will loop through each letter
int let;
if(text[i]>40){ //checks if its letter or space
let=text[i]-65;
}
else if(text[i]==32){ //sets space character to corresponding matrix number
let=26;
}
for(int k=0;k<=7;k++){
lettertomatrix(let,k, initialcol); //print inital column
delay(speed);
movingmatrix(direction); //move everything down by one
}
}
for(int i=0;i<=7;i++){ //implements space after word
lettertomatrix(26,i,initialcol);
delay(speed);
movingmatrix(direction);
}
}
ISR(TIMER1_COMPA_vect){
for (int i=0;i<8;i++){ //cycling in column j
SelRow(i+1);
SetLEDinRow(1,printedmatrix[i][0]);
SetLEDinRow(2,printedmatrix[i][1]);
SetLEDinRow(3,printedmatrix[i][2]);
SetLEDinRow(4,printedmatrix[i][3]);
SetLEDinRow(5,printedmatrix[i][4]);
SetLEDinRow(6,printedmatrix[i][5]);
SetLEDinRow(7,printedmatrix[i][6]);
SetLEDinRow(8,printedmatrix[i][7]);
TurnOffALL_LED();
}
}
void lettertomatrix(int letter, int col,int initialcol){ //print
switch(letter){
case 0:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=leta[i][col];
}
break;
}
case 1:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letb[i][col];
}
break;
}
case 2:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letc[i][col];
}
break;
}
case 3:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letd[i][col];
}
break;
}
case 4:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=lete[i][col];
}
break;
}
case 5:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letf[i][col];
}
break;
}
case 6:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letg[i][col];
}
break;
}
case 7:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=leth[i][col];
}
break;
}
case 8:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=leti[i][col];
}
break;
}
case 9:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letj[i][col];
}
break;
}
case 10:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letk[i][col];
}
break;
}
case 11:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letl[i][col];
}
break;
}
case 12:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letm[i][col];
}
break;
}
case 13:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letn[i][col];
}
break;
}
case 14:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=leto[i][col];
}
break;
}
case 15:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letp[i][col];
}
break;
}
case 16:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letq[i][col];
}
break;
}
case 17:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letr[i][col];
}
break;
}
case 18:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=lets[i][col];
}
break;
}
case 19:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=lett[i][col];
}
break;
}
case 20:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letu[i][col];
}
break;
}
case 21:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letv[i][col];
}
break;
}
case 22:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letw[i][col];
}
break;
}
case 23:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letx[i][col];
}
break;
}
case 24:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=lety[i][col];
}
break;
}
case 25:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letz[i][col];
}
break;
}
case 26:{
for(int i=0;i<=7;i++){
printedmatrix[i][initialcol]=letspace[i][col];
}
break;
}
default:
break;
}
}
void movingmatrix(int direction){
for(int i=0;i<=6;i++){
for(int k=0;k<=7;k++){
printedmatrix[k][abs(direction-i)]=printedmatrix[k][abs(direction-(i+1))];
delay(1);
}
}
for(int i=0;i<=7;i++){
printedmatrix[i][abs(direction-7)]=1;
}
}
void SelRow(int row){
if (row==1) digitalWrite(R1,HIGH); else digitalWrite(R1,LOW);
if (row==2) digitalWrite(R2,HIGH); else digitalWrite(R2,LOW);
if (row==3) digitalWrite(R3,HIGH); else digitalWrite(R3,LOW);
if (row==4) digitalWrite(R4,HIGH); else digitalWrite(R4,LOW);
if (row==5) digitalWrite(R5,HIGH); else digitalWrite(R5,LOW);
if (row==6) digitalWrite(R6,HIGH); else digitalWrite(R6,LOW);
if (row==7) digitalWrite(R7,HIGH); else digitalWrite(R7,LOW);
if (row==8) digitalWrite(R8,HIGH); else digitalWrite(R8,LOW);
}
void TurnOffALL_LED() {
digitalWrite(R1,LOW);
digitalWrite(R2,LOW);
digitalWrite(R3,LOW);
digitalWrite(R4,LOW);
digitalWrite(R5,LOW);
digitalWrite(R6,LOW);
digitalWrite(R7,LOW);
digitalWrite(R8,LOW);
digitalWrite(C1,HIGH);
digitalWrite(C2,HIGH);
digitalWrite(C3,HIGH);
digitalWrite(C4,HIGH);
digitalWrite(C5,HIGH);
digitalWrite(C6,HIGH);
digitalWrite(C7,HIGH);
digitalWrite(C8,HIGH);
}
void SetLEDinRow(int column, int state){
if (column==1) digitalWrite(C1,state);
if (column==2) digitalWrite(C2,state);
if (column==3) digitalWrite(C3,state);
if (column==4) digitalWrite(C4,state);
if (column==5) digitalWrite(C5,state);
if (column==6) digitalWrite(C6,state);
if (column==7) digitalWrite(C7,state);
if (column==8) digitalWrite(C8,state);
}
void but(){
if (digitalRead(BUTTON_PIN)==LOW){
pressedTime=millis();
}
else if(digitalRead(BUTTON_PIN)==HIGH){
if (direction == 0 ){
direction = 7;
initialcol = 0;
Serial.println("LEFT_RIGHT");
}
else if (direction == 7){
direction = 0;
initialcol = 7;
Serial.println("RIGHT_to LEFT");
}
}}
// //delay(10);
// if(digitalRead(21)==0){
// initialsec=millis();
// finalsec=0;
// }
// else if(digitalRead(21)==1){
// finalsec=millis();
// long difference = finalsec-initialsec;
// //Serial.println(difference);
// if(difference<=1000){
// direction = 0;
// initialcol = 7;
// //Serial.println("LOW");
// }
// else if(difference>=2000){
// direction = 7;
// initialcol = 0;
// //Serial.println("HIGH");
// }
// }