//**************************************************************// // Name : LED Cube Final Code // // Author : Tim Ballas // // Date : 25 Nov, 2007 // // Version : 1.0 // // Notes : This is a compilation of code from the ShiftOut // // : example and the original code for Make's // // : Weekend Projects // //**************************************************************** //Pin connected to ST_CP of 74HC595 int latchPin = 9; //Pin connected to SH_CP of 74HC595 int clockPin = 8; ////Pin connected to DS of 74HC595 int dataPin = 10; // Ground Pins int topGND = 6; int midGND = 12; int botGND = 11; int delayedby = 30; //holders for infromation you're going to pass to shifting function byte dataRED; byte dataGREEN; // table of values for 3x3x3 LEDs // 0 is off, 1 is on for each LED // last element must have 0 duration int imageTab[][10] = { // Lights up each LED for 1/2 second, starting with the top-front-left corner LED, and going to the bottom-rear-right corner LED. { B000, B000, B010, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B100, B000, B000, B000, B000, B000, B000, 50 }, { B001, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B010, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B100, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B001, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B010, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B100, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B001, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B010, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B100, B000, B000, B000, 50 }, { B000, B000, B000, B001, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B010, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B100, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B001, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B010, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B100, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B001, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B010, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B100, 50 }, { B000, B000, B000, B000, B000, B000, B001, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B010, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B100, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B001, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B100, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B001, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B000, 0 } // this is a dummy element for end of table (duration=0) // END Lights up each LED for 1/2 second, starting with the top-front-left corner LED, and going to the bottom-rear-right corner LED. /* // Light up all LEDs then four and then one { B111, B111, B111, B111, B111, B111, B111, B111, B111, 50 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 50 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 50 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 50 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 40 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 40 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 40 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 40 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 40 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 30 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 30 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 30 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 30 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 30 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 20 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 20 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 20 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 20 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 20 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 10 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 10 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 10 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 10 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 10 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 5 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 5 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 5 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 5 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 5 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B000, B000, 0 } // this is a dummy element for end of table (duration=0) /* { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 4 }, { B000, B000, B000, B110, B110, B000, B110, B110, B000, 4 }, { B111, B111, B111, B111, B111, B111, B111, B111, B111, 4 }, { B000, B000, B000, B000, B000, B000, B000, B000, B000, 0 } // this is a dummy element for end of table (duration=0) */ // END Light up all LEDs then four and then one /* // Plus sign turning { B100, B000, B000, B110, B001, B000, B100, B000, B000, 50 }, { B100, B000, B000, B101, B010, B000, B100, B000, B000, 50 }, { B100, B000, B000, B100, B100, B100, B100, B000, B000, 50 }, { B100, B000, B000, B100, B000, B011, B100, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B000, 0 } // this is a dummy element for end of table (duration=0) */ // END Plus sign turning /* // Plus sign turning speeding up { B100, B000, B000, B110, B001, B000, B100, B000, B000, 50 }, { B100, B000, B000, B101, B010, B000, B100, B000, B000, 50 }, { B100, B000, B000, B100, B100, B100, B100, B000, B000, 50 }, { B100, B000, B000, B100, B000, B011, B100, B000, B000, 50 }, { B100, B000, B000, B110, B001, B000, B100, B000, B000, 40 }, { B100, B000, B000, B101, B010, B000, B100, B000, B000, 40 }, { B100, B000, B000, B100, B100, B100, B100, B000, B000, 40 }, { B100, B000, B000, B100, B000, B011, B100, B000, B000, 40 }, { B100, B000, B000, B110, B001, B000, B100, B000, B000, 30 }, { B100, B000, B000, B101, B010, B000, B100, B000, B000, 30 }, { B100, B000, B000, B100, B100, B100, B100, B000, B000, 30 }, { B100, B000, B000, B100, B000, B011, B100, B000, B000, 30 }, { B100, B000, B000, B110, B001, B000, B100, B000, B000, 20 }, { B100, B000, B000, B101, B010, B000, B100, B000, B000, 20 }, { B100, B000, B000, B100, B100, B100, B100, B000, B000, 20 }, { B100, B000, B000, B100, B000, B011, B100, B000, B000, 20 }, { B100, B000, B000, B110, B001, B000, B100, B000, B000, 10 }, { B100, B000, B000, B101, B010, B000, B100, B000, B000, 10 }, { B100, B000, B000, B100, B100, B100, B100, B000, B000, 10 }, { B100, B000, B000, B100, B000, B011, B100, B000, B000, 10 }, { B000, B000, B000, B000, B000, B000, B000, B000, B000, 0 } // this is a dummy element for end of table (duration=0) // END Plus sign turning speeding up */ /* { B001, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B100, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 50 }, // { B001, B000, B000, B100, B000, B000, B000, B010, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B000, 0 } */ /* { B100, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B010, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B001, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B100, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B010, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B001, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B100, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B010, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B001, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B100, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B010, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B001, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B100, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B010, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B001, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B100, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B010, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B001, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B100, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B010, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B001, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B100, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B001, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B100, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B010, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B001, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B000, 0 } // this is a dummy element for end of table (duration=0) */ /* { B000, B000, B001, B000, B000, B000, B000, B000, B000, 50 }, { B000, B001, B000, B000, B000, B000, B000, B000, B000, 50 }, { B001, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B100, B000, B000, B000, B000, B000, B000, B000, 50 }, { B100, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B100, B000, B000, B000, B000, B000, B000, 50 }, { B000, B010, B000, B000, B000, B000, B000, B000, B000, 50 }, { B010, B000, B000, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B010, B000, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B001, B000, B000, B000, 50 }, { B000, B000, B000, B000, B001, B000, B000, B000, B000, 50 }, { B000, B000, B000, B001, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B100, B000, B000, B000, B000, 50 }, { B000, B000, B000, B100, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B100, B000, B000, B000, 50 }, { B000, B000, B000, B000, B010, B000, B000, B000, B000, 50 }, { B000, B000, B000, B010, B000, B000, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B010, B000, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B001, 50 }, { B000, B000, B000, B000, B000, B000, B000, B001, B000, 50 }, { B000, B000, B000, B000, B000, B000, B001, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B100, B000, 50 }, { B000, B000, B000, B000, B000, B000, B100, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B100, 50 }, { B000, B000, B000, B000, B000, B000, B000, B010, B000, 50 }, { B000, B000, B000, B000, B000, B000, B010, B000, B000, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B010, 50 }, { B000, B000, B000, B000, B000, B000, B000, B000, B000, 0 } */ }; // This function delays the specified number of 1/10 milliseconds void delay_one_tenth_ms(unsigned long int ms) { unsigned long int timer; unsigned long int DelayCount = 87; // this value was determined by trial and error while (ms != 0) { // Toggling PD6 is done here to force the compiler to do this loop, rather than optimize it away for (timer=0; timer <= DelayCount; timer++) {PORTD |= B00000100;}; ms--; } } // This function displays a 3x3x3 image by multiplexing through the images for the 3 planes. // The multiplex rate is about 111Hz. // This function also acts as a delay for the Duration specified. byte displayImage(int index) { unsigned long int duration = imageTab[index][9]; unsigned char topRow0 = imageTab[index][0]; unsigned char midRow0 = imageTab[index][1]; unsigned char botRow0 = imageTab[index][2]; unsigned char topRow1 = imageTab[index][3]; unsigned char midRow1 = imageTab[index][4]; unsigned char botRow1 = imageTab[index][5]; unsigned char topRow2 = imageTab[index][6]; unsigned char midRow2 = imageTab[index][7]; unsigned char botRow2 = imageTab[index][8]; for (int i=0; i=0; i--) { digitalWrite(myClockPin, 0); //if the value passed to myDataOut and a bitmask result // true then... so if we are at i=6 and our value is // %11010100 it would the code compares it to %01000000 // and proceeds to set pinState to 1. if ( myDataOut & (1<