Last active
January 2, 2026 21:19
-
-
Save jaymcgavren/396dbc69088e0119fc6c6f400fafe22d to your computer and use it in GitHub Desktop.
Linwood Whaley's assembly code to run animations on his 4 x 4 x 4 LED cube
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /* | |
| led-cube-4x4x4-6.5 | |
| Arduino UNO or Nano | |
| MCP23017 I/O expander controlled by I2C | |
| MCP23017 address is 0x20 | |
| 64 leds in a 4 by 4 by 4 by 4 arrangement | |
| 16 2N3906 PNP transistors controlling led anodes connected to MCP23017 GPIO port | |
| outputs---low on output turns transistors on | |
| 4 2N4401 NPN transistors controlling cube levels (led cathodes) connected to 4 | |
| pins of Arduino board---high on output turns transistors on | |
| ATMEGA328P assembly language used in this program---for speed and memory savings | |
| THIS | |
| digitalWrite(Level_1, LOW); // start off | |
| digitalWrite(Level_2, LOW); // with all | |
| digitalWrite(Level_3, LOW); // cathodes | |
| digitalWrite(Level_4, LOW); // off | |
| TO THIS | |
| PORTB = B0000; // turn off all levels | |
| SAVES 30 BYTES | |
| Each of the four levels has its leds arranged in 4x4 matrix with the cathodes | |
| wired together | |
| TOP VIEW of CUBE | |
| |B7_____B6_____B5_____B4| | |
| | | | | | |
| |B3_____B2_____B1_____B0| | |
| | | | | | |
| |A7_____A6_____A5_____A4| | |
| | | | | | |
| |A3_____A2_____A1_____A0| | |
| Four levels are stacked; each led has its anode wired to anode of led of | |
| the next level | |
| FRONT VIEW of CUBE | |
| A3 A2 A1 A0 Level 4 --- Arduino Pin - D11(PORTB Bit 3) | |
| | | | | | |
| A3 A2 A1 A0 Level 3 --- Arduino Pin - D10(PORTB Bit 2) | |
| | | | | | |
| A3 A2 A1 A0 Level 2 --- Arduino Pin - D9(PORTB BIT 1) | |
| | | | | | |
| A3 A2 A1 A0 Level 1 --- Arduino Pin - D8(PORTB Bit 0) | |
| | | | | | |
| | | | | | |
| TOP VIEW of CUBE | |
| Wire.write(0x13); MCP23017 register address of GPIOB | |
| B7 B6 B5 B4 Wire.write(0x7f); make port B pins HIGH----except B7 | |
| PNP transistors---HiGH turns them off---LOW turns then on | |
| B3 B2 B1 B0 0x7f --- B0111 1111 --- B7 is LOW---B7 LED anode has power | |
| A7 A6 A5 A4 Wire.write(0x12); MCP23017 register address of GPIOA | |
| Wire.write(0xff); make port A pins HIGH | |
| A3 A2 A1 A0 PNP transistors---HiGH turns them off---LOW turns then on | |
| 0xff --- B1111 1111---All GPIOA anodes, no power | |
| MCP23017 Pin Assignment of LEDS | |
| digital.Write(Level_4, HIGH); a HIGH to level 4 transistor will turn it on --- supplying | |
| ground to all level 4 leds --- so any that have anode voltage | |
| will turn on | |
| PORTB = B1000; Does the same thing | |
| Date Start: 8/20-2025 | |
| : 8/26/2025 add display functions | |
| : 10/09/2025 add display functions | |
| : 11/16/2025 clean, change, comments | |
| : 12/5/2025 add comments, clean up, assembly language | |
| : 12/17/2025 add new function for I2C cube display | |
| : 12/18/2025 more comments, changed picLvlSpd to cube_LvL_Spd | |
| : 12/19/2025 more change, clean up | |
| : 12/21/2025 add wallFlip(); and spinUp(); to loop(); | |
| add more assembly languge, include more function | |
| calls in program --- save bytes --- add more comments | |
| update --- cube_LvL_Spd() - if else statements | |
| : still need alot more comments! | |
| */ | |
| #include "Wire.h" | |
| void topBottomTop(); /// Line number 215 | |
| void diagonal(); /// Line number 249 | |
| void wallLeftRightLeft(); /// Line number 366 | |
| void wallFrontBack(); /// Line number 393 | |
| void wallAround(); /// Line number 420 | |
| void ELECTRON(); /// Line number 498 | |
| void squareSmallLarge(); /// Line number 709 | |
| void wallFlip(); /// Line number 728 ---Needs work | |
| void spinUp(); /// Line number 766 ---Needs work | |
| const int diagsped = 135; | |
| const int electSped = 15; // 15 looks good | |
| const int wallSped = 45; | |
| const int spinSped = 75; | |
| const int topbotSped = 125; | |
| byte Lvl; | |
| void setup() { | |
| Wire.begin(); // wake i2c | |
| Wire.beginTransmission(0x20); // i2c address of i/o expander | |
| Wire.write(0x00); // register address of IODIRA--port A input/output direction | |
| Wire.write(0x00); // make all port A pins outputs | |
| Wire.write(0x00); // make all port B pins outputs | |
| Wire.endTransmission(); | |
| /////////////////////////////Start with all leds off///////////////////////////////// | |
| Wire.beginTransmission(0x20); // address i/o expander | |
| Wire.write(0x12); // register address of GPIOA---port A output pins | |
| Wire.write(0xff); // make all port A pins HIGH---turn off transistors | |
| Wire.write(0xff); // make all port B pins HIGH---turn off transistors | |
| Wire.endTransmission(); | |
| ///////////////////////////////////////////////////////////////////////////////////// | |
| DDRB = B1111; // Pin D8; Pin D9; Pin D11; Pin D12 are outputs | |
| // replaces the pinMode(8, OUTPUT) function--a one(1) makes them outputs | |
| PORTB = B0000; // replaces the digitalWrite(8, LOW) function--a zero(0) is a LOW | |
| // a one(1) is a HIGH | |
| // all outputs LOW --- cube Levels off | |
| } // end---void setup //////////////////////////// | |
| void columnWrite(byte Aport, byte Bport) { | |
| Wire.beginTransmission(0x20); // I2C address of i/o expander | |
| Wire.write(0x12); // address of port A i/o register --- GPIOA | |
| Wire.write(Aport); // make selected port A pins LOW---turn on transistors | |
| Wire.write(Bport); // make selected port B pins LOW---turn on transistors | |
| Wire.endTransmission(); // voltage to led anodes on port A | |
| } // end---void columnWrite //////////////////////////////////////////////////// | |
| void allLevelsOn_Off(int spdVar) { | |
| PORTB = B1111; // enable ground to all levels | |
| delay(spdVar); | |
| PORTB = B0000; // disable ground to all levels | |
| } // end---void levelsOn /////////////////////////////////////////////////////////// | |
| void cube_LvL_Spd(byte level, int spd) { | |
| if(level == 1) { | |
| Lvl = 1; | |
| } | |
| else if(level == 2) { | |
| Lvl = 2; | |
| } | |
| else if(level == 3) { | |
| Lvl = 4; | |
| } | |
| else { | |
| Lvl = 8; | |
| } | |
| PORTB = Lvl; | |
| delay(spd); | |
| PORTB = 0; | |
| } // end---void cube_LvL_Spd /////////////////////////////////////////////////// | |
| void loop() { | |
| topBottomTop(); | |
| for(int i = 0; i < 3; i++) { | |
| wallLeftRightLeft(); | |
| } | |
| for(int i = 0; i < 2; i++) { | |
| wallFrontBack(); | |
| } | |
| for(int i = 0; i < 3; i++) { | |
| wallAround(); | |
| } | |
| squareSmallLarge(); | |
| for(int i = 0; i < 2; i++) { | |
| diagonal(); | |
| } | |
| ELECTRON(); | |
| wallFlip(); | |
| spinUp(); | |
| } | |
| void topBottomTop() { ////////////////////////////////////////////////////////////////// | |
| PORTB = B0000; // start with all levels off -- digitalWrite pis 8, 9, 10, 11 -- LOW | |
| columnWrite(0x00, 0x00); // all LED anodes on | |
| for(int i = 0; i < 4; i++) { // loop ten times | |
| //////////////////////////// Bottom to Top ///////////////////////////// | |
| cube_LvL_Spd(1, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| //////////////////////////// Top to Bottom ///////////////////////////// | |
| cube_LvL_Spd(4, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, topbotSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| } // end---for loop | |
| columnWrite(0xff, 0xff); // all LED anodes off | |
| } // end---void topBottomTop() | |
| void diagonal() { ////////////////////////////////////////////////////////////////////// | |
| PORTB = B0000; // turn off all levels | |
| columnWrite(0xee, 0xee); // 1110 1110 --- A4, A0 and B4, B0 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); // 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0x77, 0x77); // 0111 0111 --- A7, A3 and B7, B3 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); // 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xee, 0xee); // 1110 1110 --- A4, A0 and B4, B0 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); // 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0x77, 0x77); // 0111 0111 --- A7, A3 and B7, B3 | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); // 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xee, 0xee); // 1110 1110 --- A4, A0 and B4, B0 | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); // 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0x77, 0x77); ///// 0111 0111 --- A7, A3 and B7, B3 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0x77, 0x77); ///// 0111 0111 --- A7, A3 and B7, B3 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0 | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0x77, 0x77); ///// 0111 0111 --- A7, A3 and B7, B3 | |
| cube_LvL_Spd(1, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0 | |
| cube_LvL_Spd(4, diagsped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| } // end---void diagonal() | |
| void wallLeftRightLeft() { /////////////////////////////////////////////////////////////////// | |
| PORTB = B0000; // disable ground to all levels | |
| columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0 | |
| allLevelsOn_Off(125); | |
| columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1 | |
| allLevelsOn_Off(125); | |
| columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2 | |
| allLevelsOn_Off(125); | |
| columnWrite(0x77, 0x77); ///// 0111 0111 --- A7, A3 and B7, B3 | |
| allLevelsOn_Off(125); | |
| columnWrite(0xbb, 0xbb); ///// 1011 1011 --- A6, A2 and B6, B2 | |
| allLevelsOn_Off(125); | |
| columnWrite(0xdd, 0xdd); ///// 1101 1101 --- A5, A1 and B5, B1 | |
| allLevelsOn_Off(125); | |
| columnWrite(0xee, 0xee); ///// 1110 1110 --- A4, A0 and B4, B0 | |
| allLevelsOn_Off(125); | |
| } // end---void wallLeftRightLeft() | |
| void wallFrontBack() { //////////////////////////////////////////////////////////////////////////////// | |
| PORTB = B0000; // disable ground to all levels | |
| columnWrite(0xf0, 0xff); // 1111 0000 --- A3, A2, A1, A0 --- 1111 1111 --- No B | |
| allLevelsOn_Off(125); | |
| columnWrite(0x0f, 0xff); // 0000 1111 --- A7, A6, A5, A4 --- 1111 1111 --- No B | |
| allLevelsOn_Off(125); | |
| columnWrite(0xff, 0xf0); // 1111 1111 --- No A --- 1111 0000 --- B3, B2, B1, B0 | |
| allLevelsOn_Off(125); | |
| columnWrite(0xff, 0x0f); // 1111 1111 --- No A --- 0000 1111 --- B7, B6, B5, B4 | |
| allLevelsOn_Off(125); | |
| columnWrite(0xff, 0xf0); // 1111 1111 --- No A --- 1111 0000 --- B3, B2, B1, B0 | |
| allLevelsOn_Off(125); | |
| columnWrite(0x0f, 0xff); // 0000 1111 --- A7, A6, A5, A4 --- 1111 1111 --- No B | |
| allLevelsOn_Off(125); | |
| columnWrite(0xf0, 0xff); // 1111 0000 --- A3, A2, A1, A0 --- 1111 1111 --- No B | |
| allLevelsOn_Off(125); | |
| } // end---void wallFrontBack() | |
| void wallAround() { /////////////////////////////////////////////////////////////////////////// | |
| PORTB = B0000; // all levels off | |
| columnWrite(0xf7, 0xff); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xf3, 0xff); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xf1, 0xff); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xf0, 0xff); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xe0, 0xff); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xe0, 0xfe); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xe0, 0xee); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xe0, 0xce); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xe0, 0x8e); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xe0, 0x0e); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xe0, 0x06); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x60, 0x06); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x68, 0x06); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x6c, 0x06); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x6e, 0x06); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x6f, 0x06); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x7f, 0x06); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x7f, 0x07); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x7f, 0x17); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x7f, 0x37); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x7f, 0x77); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x7f, 0xf7); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0x7f, 0xff); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| columnWrite(0xff, 0xff); | |
| allLevelsOn_Off(75); // all levels on, delay, all levels off | |
| } // end---wallAround ////////////////////////////// | |
| void ELECTRON() { //////////////////////////////////////////////////////////////////////////////////////// ELECTRON | |
| PORTB = B0000; | |
| for(int x =1; x <= 6; x++) { | |
| columnWrite(0xfe, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdf, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfb); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0x7f); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfb); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdf, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xfe, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) ***11111111111 | |
| //////**************************** next electron ***************************22222222222 | |
| columnWrite(0xff, 0xdf); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfd); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdf, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xfd, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdf, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfd); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xdf); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)************2222222 | |
| //////**************************** next electron ***************************33333333333333333 | |
| columnWrite(0x7f, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbf, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdf, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xef, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xdf, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbf, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0x7f, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)******3333333333 | |
| ////**************************** next electron ********************************444444444444 | |
| columnWrite(0xff, 0xef); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfd); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbf, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xf7, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbf, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfd); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0x2f); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) *********444444444444 | |
| ////****************************** next electron **********************************55555555555 | |
| columnWrite(0xfb, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbf, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfb); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xbf); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfb); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xbf, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xfb, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)***********555555555555 | |
| ////****************************** next electron *************************************6666666666 | |
| columnWrite(0xff, 0xf7); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfb); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfd); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfe); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfd); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xfb); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xff, 0xf7); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)************666666666666 | |
| ////********************************next ELECRTON*************************************7777777777777 | |
| columnWrite(0xf7, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xfb, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xfd, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xfe, 0xff); | |
| cube_LvL_Spd(4, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(3, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(2, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xfd, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xfb, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display) | |
| columnWrite(0xf7, 0xff); | |
| cube_LvL_Spd(1, electSped); // cube_LvL_Spd(cube level[1-4], speed of display)**********77777777777 | |
| } | |
| } //end-----Electron ///////////////////////////// | |
| void squareSmallLarge() { ////////////////////////////////////////////////////////////////////////// | |
| PORTB = B0000; // turn off all levels | |
| for(int i = 0; i < 4; i++) { | |
| columnWrite(0x60, 0x06); | |
| allLevelsOn_Off(500); | |
| columnWrite(0x9f, 0xf9); | |
| allLevelsOn_Off(500); | |
| columnWrite(0x60, 0x06); | |
| allLevelsOn_Off(500); | |
| } | |
| } | |
| void wallFlip() { /////////////////////////////////////////////////////////////////////////// | |
| PORTB = B0000; // turn off all levels | |
| for(int i = 0; i < 2; i++) { | |
| columnWrite(0xf0, 0xff); | |
| allLevelsOn_Off(750); | |
| columnWrite(0xb7, 0xed); | |
| allLevelsOn_Off(750); | |
| columnWrite(0x77, 0x77); | |
| allLevelsOn_Off(750); | |
| columnWrite(0xde, 0x7b); | |
| allLevelsOn_Off(750); | |
| columnWrite(0xff, 0x0f); | |
| allLevelsOn_Off(750); | |
| columnWrite(0xb7, 0xed); | |
| allLevelsOn_Off(750); | |
| columnWrite(0xee, 0xee); | |
| allLevelsOn_Off(750); | |
| columnWrite(0xde, 0x7b); | |
| allLevelsOn_Off(750); | |
| } | |
| columnWrite(0xf0, 0xff); | |
| allLevelsOn_Off(750); | |
| } // end---wallFlip()//////////////////////////////////////////////////////// | |
| void spinUp() { //////////////////////////////////////////////////////////////////// | |
| PORTB = B0000; // turn off all levels | |
| // LEVEL ONE // | |
| columnWrite(0xbf, 0xff); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x9f, 0xff); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x9f, 0xfd); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x9f, 0xf9); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x9f, 0xf1); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x1f, 0xf1); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x17, 0xf1); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x13, 0xf1); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x11, 0xf1); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x10, 0xf1); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x00, 0xf1); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x00, 0xf0); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x00, 0xe0); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x00, 0xc0); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x00, 0x80); | |
| cube_LvL_Spd(1, spinSped); | |
| columnWrite(0x00, 0x00); | |
| cube_LvL_Spd(1, spinSped); | |
| // LEVEL TWO // | |
| columnWrite(0xff, 0x7f); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0xff, 0x77); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x7f, 0x77); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x77, 0x77); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x73, 0x77); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x71, 0x77); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x70, 0x77); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x60, 0x77); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x60, 0x76); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x60, 0x66); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x60, 0x46); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x60, 0x06); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x60, 0x02); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x20, 0x02); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x00, 0x02); | |
| cube_LvL_Spd(2, spinSped); | |
| columnWrite(0x00, 0x00); | |
| cube_LvL_Spd(2, spinSped); | |
| // LEVEL THREE // | |
| columnWrite(0xff, 0xfd); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0xff, 0xf9); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0xbf, 0xf9); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x9f, 0xf9); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x8f, 0xf9); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x8f, 0xf8); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x8f, 0xe8); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x8f, 0xc8); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x8f, 0x88); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x8f, 0x08); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x8f, 0x00); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x0f, 0x00); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x07, 0x00); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x03, 0x00); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x01, 0x00); | |
| cube_LvL_Spd(3, spinSped); | |
| columnWrite(0x00, 0x00); | |
| cube_LvL_Spd(3, spinSped); | |
| // LEVEL FOUR // | |
| columnWrite(0xfe, 0xff); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0xee, 0xff); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0xee, 0xfe); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0xee, 0xee); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0xee, 0xce); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0xee, 0x8e); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0xee, 0x0e); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0xee, 0x06); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0x6e, 0x006); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0x66, 0x06); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0x62, 0x06); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0x60, 0x06); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0x40, 0x06); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0x40, 0x04); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0x40, 0x00); | |
| cube_LvL_Spd(4, spinSped); | |
| columnWrite(0x00, 0x00); | |
| cube_LvL_Spd(4, spinSped); | |
| } // end---spinUp() /////////////////////////////////////////////////// | |
| ////// |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment