#define numberOfRows 3 #define numberOfColumns 3 #define numberOfLayers 3 #define numberOfAnodes numberOfRows*numberOfColumns #define nonUsedAnodes 7 #define nonUsedCathodes 5 int serialAn = 41; int rclkAn = 39; int srclkAn = 37; int srclrAn = 35; int serialAn1 = 33; int rclkAn1 = 31; int srclkAn1 = 29; int srclrAn1 = 27; int serialCat = 8; int rclkCat = 6; int srclkCat = 4; int srclrCat = 2; void setup(){ //anodes pinMode(serialAn, OUTPUT); pinMode(rclkAn, OUTPUT); pinMode(srclkAn, OUTPUT); pinMode(srclrAn, OUTPUT); pinMode(serialAn1, OUTPUT); pinMode(rclkAn1, OUTPUT); pinMode(srclkAn1, OUTPUT); pinMode(srclrAn1, OUTPUT); //cathodes pinMode(serialCat, OUTPUT); pinMode(rclkCat, OUTPUT); pinMode(srclkCat, OUTPUT); pinMode(srclrCat, OUTPUT); //clearing out the registers digitalWrite(srclkAn, LOW); digitalWrite(serialAn, LOW); digitalWrite(srclrAn, HIGH); digitalWrite(rclkAn, LOW); digitalWrite(srclrAn, LOW); digitalWrite(rclkAn, HIGH); digitalWrite(srclrAn, HIGH); digitalWrite(srclkAn1, LOW); digitalWrite(serialAn1, LOW); digitalWrite(srclrAn1, HIGH); digitalWrite(rclkAn1, LOW); digitalWrite(srclrAn1, LOW); digitalWrite(rclkAn1, HIGH); digitalWrite(srclrAn1, HIGH); digitalWrite(srclkCat, LOW); digitalWrite(serialCat, LOW); digitalWrite(rclkCat, LOW); digitalWrite(srclrCat, HIGH); digitalWrite(rclkCat, HIGH); for(int i=1; i<=numberOfColumns; i++){ for(int j=1; j<=numberOfRows; j++){ for(int k=1; k<=numberOfLayers; k++){ lightUpOneLed(j,i,k,50); } } } //attempting to clear out all sets of SR's digitalWrite(srclkAn, LOW); digitalWrite(serialAn, LOW); digitalWrite(srclrAn, HIGH); digitalWrite(rclkAn, LOW); digitalWrite(srclrAn, LOW); digitalWrite(rclkAn, HIGH); digitalWrite(srclrAn, HIGH); digitalWrite(srclkAn1, LOW); digitalWrite(serialAn1, LOW); digitalWrite(srclrAn1, HIGH); digitalWrite(rclkAn1, LOW); digitalWrite(srclrAn1, LOW); digitalWrite(rclkAn1, HIGH); digitalWrite(srclrAn1, HIGH); digitalWrite(srclkCat, LOW); digitalWrite(serialCat, LOW); digitalWrite(rclkCat, LOW); digitalWrite(srclrCat, HIGH); digitalWrite(rclkCat, HIGH); delay(1000); }//end of setup() void loop(){ int i=1; for(i=1; i<=3; i++){ lightUpOneRowSheet(i, 500); } for(i=1; i<=3; i++){ lightUpOneLayer(i, 500); } for(i=1; i<=3; i++){ lightUpOneColumnSheet(i, 500); } lightUpEdges(500); for(int i=1; i<=numberOfColumns; i++){ for(int j=1; j<=numberOfRows; j++){ for(int k=1; k<=numberOfLayers; k++){ lightUpOneLed(j,i,k,50); } } } lightUpOneVertColumn(1,1,500); lightUpOneColumn(1,1,500); lightUpOneRow(1,1,500); lightUpOneLed(2,2,2,500); lightUpSides(500); lightUpCornerCubes(250); }//end of loop() function int offLed; int onLed; void lightUpOneLed(int anodeRow, int anodeCol, int cathodeLayer, int lightDuration){ int anodeNumber= (anodeRow*3-3)+anodeCol; //turning on the specific anode digitalWrite(rclkAn1, LOW); digitalWrite(rclkAn, LOW); for(offLed=0; offLed<(nonUsedAnodes+anodeNumber-1) && offLed<8; offLed++){ digitalWrite(serialAn1, LOW); digitalWrite(srclkAn1, HIGH); digitalWrite(srclkAn1, LOW); } for(onLed=0; onLed<(2-anodeNumber); onLed++){ digitalWrite(serialAn1, HIGH); digitalWrite(srclkAn1, HIGH); digitalWrite(srclkAn1, LOW); } for(offLed=0; offLed<(anodeNumber-2); offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } for(onLed=0; onLed<1 && onLed<(anodeNumber-1); onLed++){ digitalWrite(serialAn, HIGH); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } for(offLed=0; offLed<(numberOfAnodes-anodeNumber); offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } digitalWrite(rclkAn1, HIGH); digitalWrite(rclkAn, HIGH); //turning on the specific cathode layer digitalWrite(rclkCat, LOW); for(offLed=0; offLed<(cathodeLayer-1); offLed++){ digitalWrite(serialCat, HIGH); digitalWrite(srclkCat, HIGH); digitalWrite(srclkCat, LOW); } for(onLed=0; onLed<1; onLed++){ digitalWrite(serialCat, LOW); digitalWrite(srclkCat, HIGH); digitalWrite(srclkCat, LOW); } for(offLed=0; offLed<((numberOfLayers-cathodeLayer)+nonUsedCathodes); offLed++){ digitalWrite(serialCat, HIGH); digitalWrite(srclkCat, HIGH); digitalWrite(srclkCat, LOW); } digitalWrite(rclkCat, HIGH); delay(lightDuration); }//end of lightUpOneLed function //////////////////////////////////////////////////////////////////////////////////////////////////// void lightUpOneVertColumn(int anodeRow, int anodeCol, int lightDuration){ int anodeNumber = (anodeRow*3-3)+anodeCol; //turning on the specific anode digitalWrite(rclkAn1, LOW); digitalWrite(rclkAn, LOW); for(offLed=0; offLed<(nonUsedAnodes+anodeNumber-1) && offLed<8; offLed++){ digitalWrite(serialAn1, LOW); digitalWrite(srclkAn1, HIGH); digitalWrite(srclkAn1, LOW); } for(onLed=0; onLed<(2-anodeNumber); onLed++){ digitalWrite(serialAn1, HIGH); digitalWrite(srclkAn1, HIGH); digitalWrite(srclkAn1, LOW); } for(offLed=0; offLed<(anodeNumber-2); offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } for(onLed=0; onLed<1 && onLed<(anodeNumber-1); onLed++){ digitalWrite(serialAn, HIGH); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } for(offLed=0; offLed<(numberOfAnodes-anodeNumber); offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } digitalWrite(rclkAn1, HIGH); digitalWrite(rclkAn, HIGH); //turning on all of the layers digitalWrite(rclkCat, LOW); for(onLed=0; onLed0){ //turning on the specific anode digitalWrite(rclkAn1, LOW); digitalWrite(rclkAn, LOW); digitalWrite(rclkCat, LOW); for(offLed=0; offLed<(nonUsedAnodes+anodeNumber-1) && offLed<8; offLed++){ digitalWrite(serialAn1, LOW); digitalWrite(srclkAn1, HIGH); digitalWrite(srclkAn1, LOW); } for(onLed=0; onLed<(2-anodeNumber); onLed++){ digitalWrite(serialAn1, HIGH); digitalWrite(srclkAn1, HIGH); digitalWrite(srclkAn1, LOW); } for(offLed=0; offLed<(anodeNumber-2); offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } for(onLed=0; onLed<1; onLed++){ digitalWrite(serialAn, HIGH); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } for(offLed=0; offLed<(numberOfAnodes-anodeNumber); offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } //turning on the specific cathode layer for(offLed=0; offLed<(cathodeLayer[i]-1); offLed++){ digitalWrite(serialCat, HIGH); digitalWrite(srclkCat, HIGH); digitalWrite(srclkCat, LOW); } for(onLed=0; onLed<1; onLed++){ digitalWrite(serialCat, LOW); digitalWrite(srclkCat, HIGH); digitalWrite(srclkCat, LOW); } for(offLed=0; offLed<((numberOfLayers-cathodeLayer[i])+nonUsedCathodes); offLed++){ digitalWrite(serialCat, HIGH); digitalWrite(srclkCat, HIGH); digitalWrite(srclkCat, LOW); } digitalWrite(rclkAn1, HIGH); digitalWrite(rclkAn, HIGH); digitalWrite(rclkCat, HIGH); delay(2);//allowing a small time for the leds to light up } }//end of for loop i=0; }//end of while loop }//end of lightUpMultipleLeds ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void lightUpCornerCubes(int lightDuration){ lightUpCornerCubesSub(0, 0, lightDuration); lightUpCornerCubesSub(3, 1, lightDuration); lightUpCornerCubesSub(1, 0, lightDuration); lightUpCornerCubesSub(2, 1, lightDuration); lightUpCornerCubesSub(0, 1, lightDuration); lightUpCornerCubesSub(3, 0, lightDuration); lightUpCornerCubesSub(1, 1, lightDuration); lightUpCornerCubesSub(2, 0, lightDuration); } //lightUpCornerCubes used to be: /* int anodeRow1 [] = {1,1,2,2,1,1,2,2};// int anodeCol1 [8] = {1,2,1,2,1,2,1,2};// int cathodeLayer1 [8] = {1,1,1,1,2,2,2,2};// lightUpMultipleLeds(anodeRow1, anodeCol1, cathodeLayer1, lightDuration, sizeof(anodeRow1)/sizeof(anodeRow1[0])); int anodeRow2 [] = {2,2,3,3,2,2,3,3}; int anodeCol2 [] = {2,3,2,3,2,3,2,3}; int cathodeLayer2 [] = {2,2,2,2,3,3,3,3}; lightUpMultipleLeds(anodeRow2, anodeCol2, cathodeLayer2, lightDuration, sizeof(anodeRow2)/sizeof(anodeRow2[0])); int anodeRow3 [] = {1,1,2,2,1,1,2,2}; int anodeCol3 [] = {2,3,2,3,2,3,2,3}; int cathodeLayer3 [] = {1,1,1,1,2,2,2,2}; lightUpMultipleLeds(anodeRow3, anodeCol3, cathodeLayer3, lightDuration, sizeof(anodeRow3)/sizeof(anodeRow3[0])); int anodeRow4 [] = {2,2,3,3,2,2,3,3}; int anodeCol4 [] = {1,2,1,2,1,2,1,2}; int cathodeLayer4 [] = {2,2,2,2,3,3,3,3}; lightUpMultipleLeds(anodeRow4, anodeCol4, cathodeLayer4, lightDuration, sizeof(anodeRow4)/sizeof(anodeRow4[0])); */ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void lightUpCornerCubesSub(int i, int j, int lightDuration){ //turning on the specific anode digitalWrite(rclkAn1, LOW); digitalWrite(rclkAn, LOW); for(offLed=0; offLed<(nonUsedAnodes+i) && offLed<8; offLed++){ digitalWrite(serialAn1, LOW); digitalWrite(srclkAn1, HIGH); digitalWrite(srclkAn1, LOW); } for(onLed=0; onLed<(1-i); onLed++){ digitalWrite(serialAn1, HIGH); digitalWrite(srclkAn1, HIGH); digitalWrite(srclkAn1, LOW); } for(offLed=0; offLed<(i*(numberOfColumns-1)-2) && offLed<3; offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } for(onLed=0; onLed<(1+i) && onLed<2; onLed++){ digitalWrite(serialAn, HIGH); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } for(offLed=0; offLed<(numberOfColumns-2); offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } for(onLed=0; onLed<2; onLed++){ digitalWrite(serialAn, HIGH); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } if(i==0 || i==1){ for(offLed=0; offLed<(4-i*(numberOfColumns-1)+i); offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } } else if(i==2 || i==3){ for(offLed=0; offLed<(3-i); offLed++){ digitalWrite(serialAn, LOW); digitalWrite(srclkAn, HIGH); digitalWrite(srclkAn, LOW); } } digitalWrite(rclkAn1, HIGH); digitalWrite(rclkAn, HIGH); //turning on the specific cathode layer digitalWrite(rclkCat, LOW); for(onLed=0; onLed<(1-j); onLed++){ digitalWrite(serialCat, LOW); digitalWrite(srclkCat, HIGH); digitalWrite(srclkCat, LOW); } for(offLed=0; offLed