//By Mayank Chauhan int row; int column; int varRow[] = {6, 2, 3, 9, 4, 5, 7, 8}; //horizontals int varColumn[] = {A5, A3, A2, A4, 11, A1, 10, A0}; //verticals int valRow[8] = {0,0,0,0,0,0,0,0}; int valColumn[8] = {1,1,1,1,1,1,1,1}; int pinNum[] = {6, 2, 3, 9, 4, 5, 7, 8, A5, A3, A2, A4, 11, A1, 10, A0}; int startPin = 0; int j = 0; char patNum = '3'; char prevValue = '0'; //bars is pattern 3 i.e 2 //fade in is pattern 4 i.e 3 //self Made Fucntions void high(int startPin,bool arrayNum) { if (arrayNum == 0) // that is my column { for (int i = startPin; i <= 7 - startPin; ++i) { digitalWrite(varColumn[i], LOW); } digitalWrite(varRow[startPin], HIGH); digitalWrite(varRow[7 - startPin], HIGH); } else { for (int i = startPin; i <= 7 - startPin; ++i) { digitalWrite(varRow[i], HIGH); } digitalWrite(varColumn[startPin], LOW); digitalWrite(varColumn[7 - startPin], LOW); } } void low(int startPin,bool arrayNum) { if (arrayNum == 0) // that is my column { for (int i = startPin; i <= 7 - startPin; ++i) { digitalWrite(varColumn[i], HIGH); } digitalWrite(varRow[startPin], LOW); digitalWrite(varRow[7 - startPin], LOW); } else { for (int i = startPin; i <= 7 - startPin; ++i) { digitalWrite(varRow[i], LOW); } digitalWrite(varColumn[startPin], HIGH); digitalWrite(varColumn[7 - startPin], HIGH); } } void highForward(int startPin,bool arrayNum,int j) //this funciton will move forward making the pins high { if (arrayNum == 0) // that is my column { for (int i = 0; i <= 7; ++i) { digitalWrite(varColumn[i], HIGH); } digitalWrite(varRow[startPin], HIGH); for (int i = startPin ; i <= 6 - j; ++i) { digitalWrite(varColumn[i], LOW); delay(100); digitalWrite(varColumn[i], HIGH); } digitalWrite(varRow[startPin], LOW); } else { digitalWrite(varColumn[startPin], LOW); for (int i = 0+j; i <= 7-j ; ++i) { digitalWrite(varRow[i], HIGH); delay(100); digitalWrite(varRow[i], LOW); } digitalWrite(varColumn[startPin], HIGH); } } void highReverse(int startPin, int arrayNum ,int j) //this will make all the pins high moving in a reverse direction { if (arrayNum == 0) { for (int i = 8; i < 0; --i) { digitalWrite(varColumn[i], HIGH); } digitalWrite(varRow[startPin], HIGH); for (int i = 7 - j; i >= 0 + j; --i) { digitalWrite(varColumn[i], LOW); delay(100); digitalWrite(varColumn[i], HIGH); } digitalWrite(varRow[startPin], LOW); } else { digitalWrite(varColumn[startPin], LOW); for (int i = 7 - j; i > 0 + j ; --i) { digitalWrite(varRow[i], HIGH); delay(100); digitalWrite(varRow[i], LOW); } digitalWrite(varColumn[startPin], HIGH); } } void setup() { Serial.begin(9600); for (int i = 0; i < 16; ++i) { pinMode(pinNum[i], OUTPUT); // HERE I HAVE DECLARED THAT I WILL USE 10 DIGITAL AND 6 ANALOG PINS AS OUTPUT } } void loop() { if((Serial.available()) > 0) { patNum = Serial.read(); prevValue = patNum; Serial.println(patNum); } else { prevValue = patNum; Serial.println(prevValue); } if(prevValue == '1') { for (int highA = 0; highA < 8; ++highA) //WHERE HIGHA IS THE SET OF PINS WHIHC SHOULD BE HIGH THAT IS CATHODE PINS { for (int i = 0; i < 8; ) { /* this loop will do all pins low except highA pins */ // TO CONTROL EACH LED I WANT ONE PIN HIGH AND ONE PIN LOW if(i == highA) { i++; //HERE I WILL SKIP THE PIN I WANT TO BE HIGH AND MAKE REST ALL PINS LOW } else { digitalWrite(pinNum[i], LOW); //I AM MAKING ALL CATHODES LOW EXCEPT THE ONE I WANT TO GLOW i++; } } digitalWrite(pinNum[highA], HIGH); // NOW I WILL MAKE MY ANODE WHICH I WANT TO GLOW AS LOW AND REST ALL ANODES AS HIGH for (int lowB = 8; lowB < 16; ++lowB) { for (int i = 8; i < 16; ) { if(i == lowB) { i++; //SKIPPING THE ANODE I WANT } else { digitalWrite(pinNum[i], HIGH); // MAKING REST OF THE ANODES HIGH i++; } } digitalWrite(pinNum[lowB], LOW); delay(200); //MY LED WILL STAY LIT FOR 200MILLISEOCNDS } } for (int highA = 7; highA >= 0; --highA) //WHERE HIGHA IS THE SET OF PINS WHIHC SHOULD BE HIGH THAT IS CATHODE PINS { for (int i = 7; i >= 0; ) { /* this loop will do all pins low except highA pins */ // TO CONTROL EACH LED I WANT ONE PIN HIGH AND ONE PIN LOW if(i == highA) { i--; //HERE I WILL SKIP THE PIN I WANT TO BE HIGH AND MAKE REST ALL PINS LOW } else { digitalWrite(pinNum[i], LOW); //I AM MAKING ALL CATHODES LOW EXCEPT THE ONE I WANT TO GLOW i--; } } digitalWrite(pinNum[highA], HIGH); // NOW I WILL MAKE MY ANODE WHICH I WANT TO GLOW AS LOW AND REST ALL ANODES AS HIGH for (int lowB = 15; lowB >= 8; --lowB) { for (int i = 15; i >= 8; ) { if(i == lowB) { i--; //SKIPPING THE ANODE I WANT } else { digitalWrite(pinNum[i], HIGH); // MAKING REST OF THE ANODES HIGH i--; } } digitalWrite(pinNum[lowB], LOW); delay(200); //MY LED WILL STAY LIT FOR 200MILLISEOCNDS } } } else if(prevValue == '2') { high(0,0); delay(300); low(0,0); high(0,1); delay(300); low(0,1); high(1,0); delay(300); low(1,0); high(1,1); delay(300); low(1,1); high(2,0); delay(300); low(2,0); high(3,0); delay(300); low(3,0); high(3,1); delay(300); low(3,1); high(2,0); delay(300); low(2,0); high(2,1); delay(300); low(2,1); high(1,0); delay(300); low(1,0); high(1,1); delay(300); low(1,1); high(0,0); delay(300); low(0,0); high(0,1); delay(300); low(0,1); } else if(prevValue == '3') { for (int i = 0; i < 350; ++i) { high(0,0); delay(1); low(0,0); high(0,1); delay(1); low(0,1); } for (int i = 0; i < 350; ++i) { high(1,0); delay(1); low(1,0); high(1,1); delay(1); low(1,1); } for (int i = 0; i < 350; ++i) { high(2,0); delay(1); low(2,0); high(2,1); delay(1); low(2,1); } for (int i = 0; i < 350; ++i) { high(3,0); delay(1); low(3,0); high(3,1); delay(1); low(3,1); } for (int i = 0; i < 350; ++i) { high(2,0); delay(1); low(2,0); high(2,1); delay(1); low(2,1); } for (int i = 0; i < 350; ++i) { high(1,0); delay(1); low(1,0); high(1,1); delay(1); low(1,1); } for (int i = 0; i < 350; ++i) { high(0,0); delay(1); low(0,0); high(0,1); delay(1); low(0,1); } } else if(prevValue == '4') { highForward(0,0,0); highForward(7,1,0); highReverse(7,0,0); highReverse(0,1,0); highForward(1,0,1); highForward(6,1,1); highReverse(6,0,1); highReverse(1,1,1); highForward(2,0,2); highForward(5,1,2); highReverse(5,0,2); highReverse(2,1,2); highForward(3,0,3); highForward(4,1,3); highReverse(4,0,3); highReverse(4,1,3); } // else // { // for (int i = 0; i < 8; ++i) // { // digitalWrite(varRow[i], 1); // } // for (int i = 0; i < 8; ++i) // { // digitalWrite(varColumn[i], 0); // } // } }