Hazel
Created December 26, 2024 © GPL3+

2D Puzzle Cube

This puzzle cube is inspired by the 50th Anniversary of the Rubik's Cube, offering a new way to visualise and play with the iconic puzzle.

IntermediateWork in progress22
2D Puzzle Cube

Things used in this project

Hardware components

Seeeduino Nano
Seeed Studio Seeeduino Nano
×1
15-pin SMD female header (SSM-115-L-SV-LC)
×2

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free

Story

Read more

Schematics

Block diagram

Eagle Schematic

Eagle Board

BOM

Code

cube_twist.ino

Arduino
Code for the 8x8 NeoPixel matrix demo
//2D Rubiks cube
  /*
      A B C D E F G H
  1          | | |
  2          | | |
  3  | | | | | | | | |
  4  | | | | | | | | |
  5          | | |
  6          | | |

  5.4 uF caps
  */

//NeoPixel setup
  #include <Adafruit_NeoPixel.h>
  #ifdef __AVR__
    #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
  #endif

  #define LED_PIN    6
  #define LED_COUNT 48
  Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

  int max_brightness = 50;

  uint32_t red = strip.Color(max_brightness, 0, 0);
  uint32_t green = strip.Color(0, max_brightness, 0, 0);
  uint32_t blue = strip.Color(0, 0, max_brightness);

  uint32_t magenta = strip.Color(max_brightness, 0, max_brightness);
  uint32_t aqua = strip.Color(0, max_brightness, max_brightness);
  uint32_t yellow = strip.Color(max_brightness, max_brightness, 0);

  uint32_t black = strip.Color(0, 0, 0);
  uint32_t white = strip.Color(max_brightness, max_brightness, max_brightness);

//Initial pixel setup
  //Empty squares
  uint32_t RGB_A1 = black;
  uint32_t RGB_A2 = black;
  uint32_t RGB_A5 = black;
  uint32_t RGB_A6 = black;

  uint32_t RGB_B1 = black;
  uint32_t RGB_B2 = black;
  uint32_t RGB_B5 = black;
  uint32_t RGB_B6 = black;

  uint32_t RGB_C1 = black;
  uint32_t RGB_C2 = black;
  uint32_t RGB_C5 = black;
  uint32_t RGB_C6 = black;

  uint32_t RGB_D1 = black;
  uint32_t RGB_D2 = black;
  uint32_t RGB_D5 = black;
  uint32_t RGB_D6 = black;

  uint32_t RGB_G1 = black;
  uint32_t RGB_G2 = black;
  uint32_t RGB_G5 = black;
  uint32_t RGB_G6 = black;

  uint32_t RGB_H1 = black;
  uint32_t RGB_H2 = black;
  uint32_t RGB_H5 = black;
  uint32_t RGB_H6 = black;

    //Top square
  uint32_t RGB_E1 = green;
  uint32_t RGB_F1 = green;
  uint32_t RGB_E2 = green;
  uint32_t RGB_F2 = green;

    //Back square
  uint32_t RGB_A3 = red;
  uint32_t RGB_B3 = red;
  uint32_t RGB_A4 = red;
  uint32_t RGB_B4 = red;

    //Left square
  uint32_t RGB_C3 = magenta;
  uint32_t RGB_D3 = magenta;
  uint32_t RGB_C4 = magenta;
  uint32_t RGB_D4 = magenta;

    //Front square
  uint32_t RGB_E3 = blue;
  uint32_t RGB_F3 = blue;
  uint32_t RGB_E4 = blue;
  uint32_t RGB_F4 = blue;

    //Right square
  uint32_t RGB_G3 = aqua;
  uint32_t RGB_H3 = aqua;
  uint32_t RGB_G4 = aqua;
  uint32_t RGB_H4 = aqua;

    //Bottom square
  uint32_t RGB_E5 = yellow;
  uint32_t RGB_F5 = yellow;
  uint32_t RGB_E6 = yellow;
  uint32_t RGB_F6 = yellow;

//LED assignments
  int LED_A1 = 0; int LED_B1 = 1; int LED_C1 = 2; int LED_D1 = 3; int LED_E1 = 4; int LED_F1 = 5; int LED_G1 = 6; int LED_H1 = 7; 
  int LED_A2 = 8; int LED_B2 = 9; int LED_C2 = 10; int LED_D2 = 11; int LED_E2 = 12; int LED_F2 = 13; int LED_G2 = 14; int LED_H2 = 15; 
  int LED_A3 = 16; int LED_B3 = 17; int LED_C3 = 18; int LED_D3 = 19; int LED_E3 = 20; int LED_F3 = 21; int LED_G3 = 22; int LED_H3 = 23; 
  int LED_A4 = 24; int LED_B4 = 25; int LED_C4 = 26; int LED_D4 = 27; int LED_E4 = 28; int LED_F4 = 29; int LED_G4 = 30; int LED_H4 = 31; 
  int LED_A5 = 32; int LED_B5 = 33; int LED_C5 = 34; int LED_D5 = 35; int LED_E5 = 36; int LED_F5 = 37; int LED_G5 = 38; int LED_H5 = 39; 
  int LED_A6 = 40; int LED_B6 = 41; int LED_C6 = 42; int LED_D6 = 43; int LED_E6 = 44; int LED_F6 = 45; int LED_G6 = 46; int LED_H6 = 47; 

char RowCol_ID = '1';

bool SW_FW_R = HIGH;
bool SW_BK_L = LOW;

bool SW_UP = LOW;
bool SW_LFT = LOW;
bool SW_RGT = LOW;
bool SW_DW = LOW;

const int Pin_SW_FW_R = 2;
const int Pin_SW_BK_L = 3;

const int Pin_SW_UP = 8;
const int Pin_SW_LFT = 9;
const int Pin_SW_RGT = 10;
const int Pin_SW_DW = 11;

void setup() {
  #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
    clock_prescale_set(clock_div_1);
  #endif

  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(max_brightness); // Set BRIGHTNESS (max = 255)

  pinMode(Pin_SW_FW_R, INPUT);
  pinMode(Pin_SW_BK_L, INPUT);

  pinMode(Pin_SW_UP, INPUT);
  pinMode(Pin_SW_LFT, INPUT);
  pinMode(Pin_SW_RGT, INPUT);
  pinMode(Pin_SW_DW, INPUT);

  Serial.begin(9600);

  rainbow(1, 2);

  updateFaces();
  RandomMoves(8);
}


void loop() {
  updateFaces();

  SW_FW_R = digitalRead(Pin_SW_FW_R);
  SW_BK_L = digitalRead(Pin_SW_BK_L);

  SW_UP = digitalRead(Pin_SW_UP);
  SW_LFT = digitalRead(Pin_SW_LFT);
  SW_RGT = digitalRead(Pin_SW_RGT);
  SW_DW = digitalRead(Pin_SW_DW);

  if (SW_RGT == HIGH){
    switch (RowCol_ID) {
    case '1':
      RowCol_ID = '2';
    break;

    case '2':
      RowCol_ID = '3';
    break;

    case '3':
      RowCol_ID = '4';
    break;

    case '4':
      RowCol_ID = '5';
    break;

    case '5':
      RowCol_ID = '6';
    break;

    case '6':
      RowCol_ID = '1';
    break;

    default:
      RowCol_ID = '1';
    break;
    }
  }

  if (SW_LFT == HIGH){
    switch (RowCol_ID) {
    case '1':
      RowCol_ID = '6';
    break;

    case '2':
      RowCol_ID = '1';
    break;

    case '3':
      RowCol_ID = '2';
    break;

    case '4':
      RowCol_ID = '3';
    break;

    case '5':
      RowCol_ID = '4';
    break;

    case '6':
      RowCol_ID = '5';
    break;

    default:
      RowCol_ID = '6';
    break;
    }
  }

  if (SW_DW == HIGH){
    switch (RowCol_ID) {
    case 'A':
      RowCol_ID = 'B';
    break;

    case 'B':
      RowCol_ID = 'C';
    break;

    case 'C':
      RowCol_ID = 'D';
    break;

    case 'D':
      RowCol_ID = 'E';
    break;

    case 'E':
      RowCol_ID = 'F';
    break;

    case 'F':
      RowCol_ID = 'G';
    break;

    case 'G':
      RowCol_ID = 'H';
    break;

    case 'H':
      RowCol_ID = 'A';
    break;

    default:
      RowCol_ID = 'A';
    break;
    }
  }

  if (SW_UP == HIGH){
    switch (RowCol_ID) {
    case 'A':
      RowCol_ID = 'H';
    break;

    case 'B':
      RowCol_ID = 'A';
    break;

    case 'C':
      RowCol_ID = 'B';
    break;

    case 'D':
      RowCol_ID = 'C';
    break;

    case 'E':
      RowCol_ID = 'D';
    break;

    case 'F':
      RowCol_ID = 'E';
    break;

    case 'G':
      RowCol_ID = 'F';
    break;

    case 'H':
      RowCol_ID = 'G';
    break;

    default:
      RowCol_ID = 'H';
    break;
    }
  }

  switch (RowCol_ID) {
    case '1':
      Preview_Row1();
      if (SW_FW_R == HIGH){
        Right_Row1();
      }
      else if (SW_BK_L == HIGH){
        Left_Row1();
      }
      break;

    case '2':
      Preview_Row2();
      if (SW_FW_R == HIGH){
        Right_Row2();
      }
      else if (SW_BK_L == HIGH){
        Left_Row2();
      }
      break;

    case '3':
      Preview_Row3();
      if (SW_FW_R == HIGH){
        Right_Row3();
      }
      else if (SW_BK_L == HIGH){
        Left_Row3();
      }
      break;

    case '4':
      Preview_Row4();
      if (SW_FW_R == HIGH){
        Right_Row4();
      }
      else if (SW_BK_L == HIGH){
        Left_Row4();
      }
      break;

    case '5':
      Preview_Row5();
      if (SW_FW_R == HIGH){
        Right_Row5();
      }
      else if (SW_BK_L == HIGH){
        Left_Row5();
      }
      break;

    case '6':
      Preview_Row6();
      if (SW_FW_R == HIGH){
        Right_Row6();
      }
      else if (SW_BK_L == HIGH){
        Left_Row6();
      }
      break;

    case 'A':
      Preview_ColA();
      if (SW_FW_R == HIGH){
        Up_ColA();
      }
      else if (SW_BK_L == HIGH){
        Down_ColA();
      }
      break;

    case 'B':
      Preview_ColB();
      if (SW_FW_R == HIGH){
        Up_ColB();
      }
      else if (SW_BK_L == HIGH){
        Down_ColB();
      }
      break;

    case 'C':
      Preview_ColC();
      if (SW_FW_R == HIGH){
        Up_ColC();
      }
      else if (SW_BK_L == HIGH){
        Down_ColC();
      }
      break;

    case 'D':
      Preview_ColD();
      if (SW_FW_R == HIGH){
        Up_ColD();
      }
      else if (SW_BK_L == HIGH){
        Down_ColD();
      }
      break;

    case 'E':
      Preview_ColE();
      if (SW_FW_R == HIGH){
        Up_ColE();
      }
      else if (SW_BK_L == HIGH){
        Down_ColE();
      }
      break;

    case 'F':
      Preview_ColF();
      if (SW_FW_R == HIGH){
        Up_ColF();
      }
      else if (SW_BK_L == HIGH){
        Down_ColF();
      }
      break;

    case 'G':
      Preview_ColG();
      if (SW_FW_R == HIGH){
        Up_ColG();
      }
      else if (SW_BK_L == HIGH){
        Down_ColG();
      }
      break;

    case 'H':
      Preview_ColH();
      if (SW_FW_R == HIGH){
        Up_ColH();
      }
      else if (SW_BK_L == HIGH){
        Down_ColH();
      }
      break;
  }
}


void updateFaces() {
  strip.setPixelColor(LED_A1, RGB_A1);
  strip.setPixelColor(LED_B1, RGB_B1);
  strip.setPixelColor(LED_C1, RGB_C1);
  strip.setPixelColor(LED_D1, RGB_D1);
  strip.setPixelColor(LED_E1, RGB_E1);
  strip.setPixelColor(LED_F1, RGB_F1);
  strip.setPixelColor(LED_G1, RGB_G1);
  strip.setPixelColor(LED_H1, RGB_H1);
  
  strip.setPixelColor(LED_A2, RGB_A2);
  strip.setPixelColor(LED_B2, RGB_B2);
  strip.setPixelColor(LED_C2, RGB_C2);
  strip.setPixelColor(LED_D2, RGB_D2);
  strip.setPixelColor(LED_E2, RGB_E2);
  strip.setPixelColor(LED_F2, RGB_F2);
  strip.setPixelColor(LED_G2, RGB_G2);
  strip.setPixelColor(LED_H2, RGB_H2);

  strip.setPixelColor(LED_A3, RGB_A3);
  strip.setPixelColor(LED_B3, RGB_B3);
  strip.setPixelColor(LED_C3, RGB_C3);
  strip.setPixelColor(LED_D3, RGB_D3);
  strip.setPixelColor(LED_E3, RGB_E3);
  strip.setPixelColor(LED_F3, RGB_F3);
  strip.setPixelColor(LED_G3, RGB_G3);
  strip.setPixelColor(LED_H3, RGB_H3);

  strip.setPixelColor(LED_A4, RGB_A4);
  strip.setPixelColor(LED_B4, RGB_B4);
  strip.setPixelColor(LED_C4, RGB_C4);
  strip.setPixelColor(LED_D4, RGB_D4);
  strip.setPixelColor(LED_E4, RGB_E4);
  strip.setPixelColor(LED_F4, RGB_F4);
  strip.setPixelColor(LED_G4, RGB_G4);
  strip.setPixelColor(LED_H4, RGB_H4);

  strip.setPixelColor(LED_A5, RGB_A5);
  strip.setPixelColor(LED_B5, RGB_B5);
  strip.setPixelColor(LED_C5, RGB_C5);
  strip.setPixelColor(LED_D5, RGB_D5);
  strip.setPixelColor(LED_E5, RGB_E5);
  strip.setPixelColor(LED_F5, RGB_F5);
  strip.setPixelColor(LED_G5, RGB_G5);
  strip.setPixelColor(LED_H5, RGB_H5);

  strip.setPixelColor(LED_A6, RGB_A6);
  strip.setPixelColor(LED_B6, RGB_B6);
  strip.setPixelColor(LED_C6, RGB_C6);
  strip.setPixelColor(LED_D6, RGB_D6);
  strip.setPixelColor(LED_E6, RGB_E6);
  strip.setPixelColor(LED_F6, RGB_F6);
  strip.setPixelColor(LED_G6, RGB_G6);
  strip.setPixelColor(LED_H6, RGB_H6);
  
  strip.show();                          //  Update strip to match
}

void white_corners() {
  RGB_E1 = white;
  RGB_A3 = white;
  RGB_C3 = white;
  RGB_E3 = white;
  RGB_G3 = white;
  RGB_E5 = white;
}

void Left_Row1() {
  //Save old values
  uint32_t Old_RGB_E1 = RGB_E1;
  uint32_t Old_RGB_F1 = RGB_F1;

  uint32_t Old_RGB_A3 = RGB_A3;
  uint32_t Old_RGB_A4 = RGB_A4;
  uint32_t Old_RGB_B3 = RGB_B3;
  uint32_t Old_RGB_B4 = RGB_B4;

  uint32_t Old_RGB_C3 = RGB_C3;
  uint32_t Old_RGB_C4 = RGB_C4;

  uint32_t Old_RGB_E6 = RGB_E6;
  uint32_t Old_RGB_F6 = RGB_F6;

  uint32_t Old_RGB_H3 = RGB_H3;
  uint32_t Old_RGB_H4 = RGB_H4;
  
  //Rotate back face CW
  RGB_A3 = Old_RGB_A4;
  RGB_B3 = Old_RGB_A3;
  RGB_B4 = Old_RGB_B3;
  RGB_A4 = Old_RGB_B4;

  //Shift Row 1
  RGB_F1 = Old_RGB_H3;
  RGB_E1 = Old_RGB_F1;
  
  RGB_C3 = Old_RGB_E1;
  RGB_C4 = Old_RGB_C3;

  RGB_E6 = Old_RGB_C4;
  RGB_F6 = Old_RGB_E6;

  RGB_H4 = Old_RGB_F6;
  RGB_H3 = Old_RGB_H4;
}

void Right_Row1() {
  Left_Row6();
}

void Left_Row2() {
  //Save old values
  uint32_t Old_RGB_E2 = RGB_E2;
  uint32_t Old_RGB_F2 = RGB_F2;

  uint32_t Old_RGB_E3 = RGB_E3;
  uint32_t Old_RGB_E4 = RGB_E4;
  uint32_t Old_RGB_F3 = RGB_F3;
  uint32_t Old_RGB_F4 = RGB_F4;

  uint32_t Old_RGB_D3 = RGB_D3;
  uint32_t Old_RGB_D4 = RGB_D4;

  uint32_t Old_RGB_E5 = RGB_E5;
  uint32_t Old_RGB_F5 = RGB_F5;

  uint32_t Old_RGB_G3 = RGB_G3;
  uint32_t Old_RGB_G4 = RGB_G4;
  
  //Rotate front face CCW
  RGB_E3 = Old_RGB_F3;
  RGB_E4 = Old_RGB_E3;
  RGB_F4 = Old_RGB_E4;
  RGB_F3 = Old_RGB_F4;

  //Shift Row 2
  RGB_F2 = Old_RGB_G3;
  RGB_E2 = Old_RGB_F2;
  
  RGB_D3 = Old_RGB_E2;
  RGB_D4 = Old_RGB_D3;

  RGB_E5 = Old_RGB_D4;
  RGB_F5 = Old_RGB_E5;

  RGB_G4 = Old_RGB_F5;
  RGB_G3 = Old_RGB_G4;  
}

void Right_Row2() {
  Left_Row5();
}

void Left_Row3() {
  //Save old values
  uint32_t Old_RGB_E1 = RGB_E1;
  uint32_t Old_RGB_F1 = RGB_F1;
  uint32_t Old_RGB_E2 = RGB_E2;
  uint32_t Old_RGB_F2 = RGB_F2;

  uint32_t Old_RGB_A3 = RGB_A3;
  uint32_t Old_RGB_B3 = RGB_B3;
  uint32_t Old_RGB_C3 = RGB_C3;
  uint32_t Old_RGB_D3 = RGB_D3;
  uint32_t Old_RGB_E3 = RGB_E3;
  uint32_t Old_RGB_F3 = RGB_F3;
  uint32_t Old_RGB_G3 = RGB_G3;
  uint32_t Old_RGB_H3 = RGB_H3;
  
  //Rotate top face CW
  RGB_E1 = Old_RGB_E2;
  RGB_F1 = Old_RGB_E1;
  RGB_F2 = Old_RGB_F1;
  RGB_E2 = Old_RGB_F2;

  //Shift Row 3
  RGB_A3 = Old_RGB_B3;
  RGB_B3 = Old_RGB_C3;
  RGB_C3 = Old_RGB_D3;
  RGB_D3 = Old_RGB_E3;
  RGB_E3 = Old_RGB_F3;
  RGB_F3 = Old_RGB_G3;
  RGB_G3 = Old_RGB_H3;
  RGB_H3 = Old_RGB_A3;
}

void Right_Row3() {
  //Save old values
  uint32_t Old_RGB_E1 = RGB_E1;
  uint32_t Old_RGB_F1 = RGB_F1;
  uint32_t Old_RGB_E2 = RGB_E2;
  uint32_t Old_RGB_F2 = RGB_F2;

  uint32_t Old_RGB_A3 = RGB_A3;
  uint32_t Old_RGB_B3 = RGB_B3;
  uint32_t Old_RGB_C3 = RGB_C3;
  uint32_t Old_RGB_D3 = RGB_D3;
  uint32_t Old_RGB_E3 = RGB_E3;
  uint32_t Old_RGB_F3 = RGB_F3;
  uint32_t Old_RGB_G3 = RGB_G3;
  uint32_t Old_RGB_H3 = RGB_H3;
  
  //Rotate top face CCW
  RGB_E1 = Old_RGB_F1;
  RGB_F1 = Old_RGB_F2;
  RGB_F2 = Old_RGB_E2;
  RGB_E2 = Old_RGB_E1;

  //Shift Row 3 right
  RGB_A3 = Old_RGB_H3;
  RGB_B3 = Old_RGB_A3;
  RGB_C3 = Old_RGB_B3;
  RGB_D3 = Old_RGB_C3;
  RGB_E3 = Old_RGB_D3;
  RGB_F3 = Old_RGB_E3;
  RGB_G3 = Old_RGB_F3;
  RGB_H3 = Old_RGB_G3;
}

void Left_Row4() {
  //Save old values
  uint32_t Old_RGB_A4 = RGB_A4;
  uint32_t Old_RGB_B4 = RGB_B4;
  uint32_t Old_RGB_C4 = RGB_C4;
  uint32_t Old_RGB_D4 = RGB_D4;
  uint32_t Old_RGB_E4 = RGB_E4;
  uint32_t Old_RGB_F4 = RGB_F4;
  uint32_t Old_RGB_G4 = RGB_G4;
  uint32_t Old_RGB_H4 = RGB_H4;

  uint32_t Old_RGB_E5 = RGB_E5;
  uint32_t Old_RGB_E6 = RGB_E6;
  uint32_t Old_RGB_F5 = RGB_F5;
  uint32_t Old_RGB_F6 = RGB_F6;
  
  //Rotate bottom face CCW
  RGB_E5 = Old_RGB_F5;
  RGB_F5 = Old_RGB_F6;
  RGB_F6 = Old_RGB_E6;
  RGB_E6 = Old_RGB_E5;

  //Shift Row 4
  RGB_A4 = Old_RGB_B4;
  RGB_B4 = Old_RGB_C4;
  RGB_C4 = Old_RGB_D4;
  RGB_D4 = Old_RGB_E4;
  RGB_E4 = Old_RGB_F4;
  RGB_F4 = Old_RGB_G4;
  RGB_G4 = Old_RGB_H4;
  RGB_H4 = Old_RGB_A4;
}

void Right_Row4() {
  //Save old values
  uint32_t Old_RGB_A4 = RGB_A4;
  uint32_t Old_RGB_B4 = RGB_B4;
  uint32_t Old_RGB_C4 = RGB_C4;
  uint32_t Old_RGB_D4 = RGB_D4;
  uint32_t Old_RGB_E4 = RGB_E4;
  uint32_t Old_RGB_F4 = RGB_F4;
  uint32_t Old_RGB_G4 = RGB_G4;
  uint32_t Old_RGB_H4 = RGB_H4;

  uint32_t Old_RGB_E5 = RGB_E5;
  uint32_t Old_RGB_E6 = RGB_E6;
  uint32_t Old_RGB_F5 = RGB_F5;
  uint32_t Old_RGB_F6 = RGB_F6;
  
  //Rotate bottom face CW
  RGB_E5 = Old_RGB_E6;
  RGB_F5 = Old_RGB_E5;
  RGB_F6 = Old_RGB_F5;
  RGB_E6 = Old_RGB_F6;

  //Shift Row 4 right
  RGB_A4 = Old_RGB_H4;
  RGB_B4 = Old_RGB_A4;
  RGB_C4 = Old_RGB_B4;
  RGB_D4 = Old_RGB_C4;
  RGB_E4 = Old_RGB_D4;
  RGB_F4 = Old_RGB_E4;
  RGB_G4 = Old_RGB_F4;
  RGB_H4 = Old_RGB_G4;
}

void Left_Row5() {
  //Save old values
  uint32_t Old_RGB_E2 = RGB_E2;
  uint32_t Old_RGB_F2 = RGB_F2;

  uint32_t Old_RGB_E3 = RGB_E3;
  uint32_t Old_RGB_E4 = RGB_E4;
  uint32_t Old_RGB_F3 = RGB_F3;
  uint32_t Old_RGB_F4 = RGB_F4;

  uint32_t Old_RGB_D3 = RGB_D3;
  uint32_t Old_RGB_D4 = RGB_D4;

  uint32_t Old_RGB_E5 = RGB_E5;
  uint32_t Old_RGB_F5 = RGB_F5;

  uint32_t Old_RGB_G3 = RGB_G3;
  uint32_t Old_RGB_G4 = RGB_G4;

  //Rotate front face CW
  RGB_E3 = Old_RGB_E4;
  RGB_E4 = Old_RGB_F4;
  RGB_F4 = Old_RGB_F3;
  RGB_F3 = Old_RGB_E3;

  //Shift Row 2
  RGB_F2 = Old_RGB_E2;
  RGB_E2 = Old_RGB_D3;
  
  RGB_D3 = Old_RGB_D4;
  RGB_D4 = Old_RGB_E5;

  RGB_E5 = Old_RGB_F5;
  RGB_F5 = Old_RGB_G4;

  RGB_G4 = Old_RGB_G3;
  RGB_G3 = Old_RGB_F2; 
}

void Right_Row5() {
  Left_Row2();
}

void Left_Row6() {
  //Save old values
  uint32_t Old_RGB_E1 = RGB_E1;
  uint32_t Old_RGB_F1 = RGB_F1;

  uint32_t Old_RGB_A3 = RGB_A3;
  uint32_t Old_RGB_A4 = RGB_A4;
  uint32_t Old_RGB_B3 = RGB_B3;
  uint32_t Old_RGB_B4 = RGB_B4;

  uint32_t Old_RGB_C3 = RGB_C3;
  uint32_t Old_RGB_C4 = RGB_C4;

  uint32_t Old_RGB_E6 = RGB_E6;
  uint32_t Old_RGB_F6 = RGB_F6;

  uint32_t Old_RGB_H3 = RGB_H3;
  uint32_t Old_RGB_H4 = RGB_H4;
  
  //Rotate back face CCW
  RGB_A3 = Old_RGB_B3;
  RGB_B3 = Old_RGB_B4;
  RGB_B4 = Old_RGB_A4;
  RGB_A4 = Old_RGB_A3;

  //Shift Row 6
  RGB_F1 = Old_RGB_E1;
  RGB_E1 = Old_RGB_C3;
  
  RGB_C3 = Old_RGB_C4;
  RGB_C4 = Old_RGB_E6;

  RGB_E6 = Old_RGB_F6;
  RGB_F6 = Old_RGB_H4;

  RGB_H4 = Old_RGB_H3;
  RGB_H3 = Old_RGB_F1;
}

void Right_Row6() {
  Left_Row1();
}

void Up_ColA() {
  //Same as Col F down
  //Save old values
  uint32_t Old_RGB_A3 = RGB_A3;
  uint32_t Old_RGB_A4 = RGB_A4;

  uint32_t Old_RGB_G3 = RGB_G3;
  uint32_t Old_RGB_G4 = RGB_G4;
  uint32_t Old_RGB_H3 = RGB_H3;
  uint32_t Old_RGB_H4 = RGB_H4;

  uint32_t Old_RGB_F1 = RGB_F1;
  uint32_t Old_RGB_F2 = RGB_F2;
  uint32_t Old_RGB_F3 = RGB_F3;
  uint32_t Old_RGB_F4 = RGB_F4;
  uint32_t Old_RGB_F5 = RGB_F5;
  uint32_t Old_RGB_F6 = RGB_F6;

  //Rotate right face CCW
  RGB_G3 = Old_RGB_H3;
  RGB_H3 = Old_RGB_H4;
  RGB_H4 = Old_RGB_G4;
  RGB_G4 = Old_RGB_G3;

  //Shift column A up
  RGB_A3 = Old_RGB_A4;
  RGB_A4 = Old_RGB_F6;

  //Shift column F down
  RGB_F1 = Old_RGB_A3;
  RGB_F2 = Old_RGB_F1;
  RGB_F3 = Old_RGB_F2;
  RGB_F4 = Old_RGB_F3;
  RGB_F5 = Old_RGB_F4;
  RGB_F6 = Old_RGB_F5;
}

void Down_ColA() {
  Up_ColF();
}

void Up_ColB() {
  //Same as Col E down
  //Save old values
  uint32_t Old_RGB_B3 = RGB_B3;
  uint32_t Old_RGB_B4 = RGB_B4;

  uint32_t Old_RGB_C3 = RGB_C3;
  uint32_t Old_RGB_C4 = RGB_C4;
  uint32_t Old_RGB_D3 = RGB_D3;
  uint32_t Old_RGB_D4 = RGB_D4;

  uint32_t Old_RGB_E1 = RGB_E1;
  uint32_t Old_RGB_E2 = RGB_E2;
  uint32_t Old_RGB_E3 = RGB_E3;
  uint32_t Old_RGB_E4 = RGB_E4;
  uint32_t Old_RGB_E5 = RGB_E5;
  uint32_t Old_RGB_E6 = RGB_E6;

  //Rotate left face CW
  RGB_D3 = Old_RGB_C3;
  RGB_C3 = Old_RGB_C4;
  RGB_C4 = Old_RGB_D4;
  RGB_D4 = Old_RGB_D3;

  //Shift column B up
  RGB_B3 = Old_RGB_B4;
  RGB_B4 = Old_RGB_E6;

  //Shift column E down
  RGB_E1 = Old_RGB_B3;
  RGB_E2 = Old_RGB_E1;
  RGB_E3 = Old_RGB_E2;
  RGB_E4 = Old_RGB_E3;
  RGB_E5 = Old_RGB_E4;
  RGB_E6 = Old_RGB_E5;
}

void Down_ColB() {
  Up_ColE();
}

void Up_ColC() {
  Left_Row6();
}

void Down_ColC() {
  Up_ColH();
}

void Up_ColD() {
  Left_Row5();
}

void Down_ColD() {
  Up_ColG();
}

void Up_ColE() {
  //Save old values
  uint32_t Old_RGB_E1 = RGB_E1;
  uint32_t Old_RGB_E2 = RGB_E2;
  uint32_t Old_RGB_E3 = RGB_E3;
  uint32_t Old_RGB_E4 = RGB_E4;
  uint32_t Old_RGB_E5 = RGB_E5;
  uint32_t Old_RGB_E6 = RGB_E6;

  uint32_t Old_RGB_D3 = RGB_D3;
  uint32_t Old_RGB_D4 = RGB_D4;
  uint32_t Old_RGB_C3 = RGB_C3;
  uint32_t Old_RGB_C4 = RGB_C4;

  uint32_t Old_RGB_B3 = RGB_B3;
  uint32_t Old_RGB_B4 = RGB_B4;

  //Rotate left face
  RGB_D3 = Old_RGB_D4;
  RGB_C3 = Old_RGB_D3;
  RGB_C4 = Old_RGB_C3;
  RGB_D4 = Old_RGB_C4;

  //Shift column E up
  RGB_B3 = Old_RGB_E1;
  
  RGB_E1 = Old_RGB_E2;
  RGB_E2 = Old_RGB_E3;
  RGB_E3 = Old_RGB_E4;
  RGB_E4 = Old_RGB_E5;
  RGB_E5 = Old_RGB_E6;
  RGB_E6 = Old_RGB_B4;
  
  RGB_B4 = Old_RGB_B3;
}

void Down_ColE() {
  //Save old values
  uint32_t Old_RGB_E1 = RGB_E1;
  uint32_t Old_RGB_E2 = RGB_E2;
  uint32_t Old_RGB_E3 = RGB_E3;
  uint32_t Old_RGB_E4 = RGB_E4;
  uint32_t Old_RGB_E5 = RGB_E5;
  uint32_t Old_RGB_E6 = RGB_E6;

  uint32_t Old_RGB_D3 = RGB_D3;
  uint32_t Old_RGB_D4 = RGB_D4;
  uint32_t Old_RGB_C3 = RGB_C3;
  uint32_t Old_RGB_C4 = RGB_C4;

  uint32_t Old_RGB_B3 = RGB_B3;
  uint32_t Old_RGB_B4 = RGB_B4;

  //Rotate left face
  RGB_D3 = Old_RGB_C3;
  RGB_C3 = Old_RGB_C4;
  RGB_C4 = Old_RGB_D4;
  RGB_D4 = Old_RGB_D3;

  //Shift column E up
  RGB_B3 = Old_RGB_B4;
  
  RGB_E1 = Old_RGB_B3;
  RGB_E2 = Old_RGB_E1;
  RGB_E3 = Old_RGB_E2;
  RGB_E4 = Old_RGB_E3;
  RGB_E5 = Old_RGB_E4;
  RGB_E6 = Old_RGB_E5;
  
  RGB_B4 = Old_RGB_E6;
}

void Up_ColF() {
  //Same as down Col A
  uint32_t Old_RGB_A3 = RGB_A3;
  uint32_t Old_RGB_A4 = RGB_A4;
...

This file has been truncated, please download it to see its full contents.

Credits

Hazel
4 projects • 4 followers
Contact

Comments