Firmware for HexBoard MIDI controller
| -rw-r--r-- | HexBoard_V1.1.ino | 113 |
1 files changed, 105 insertions, 8 deletions
diff --git a/HexBoard_V1.1.ino b/HexBoard_V1.1.ino index 88b7da8..2e4e830 100644 --- a/HexBoard_V1.1.ino +++ b/HexBoard_V1.1.ino @@ -116,13 +116,14 @@ const int EXTR_2 = 129; const int EXTR_3 = 130; const int EXTR_4 = 131; const int EXTR_5 = 132; -const int CMDB_1 = 133; -const int CMDB_2 = 134; -const int CMDB_3 = 135; -const int CMDB_4 = 136; -const int CMDB_5 = 137; -const int CMDB_6 = 138; -const int CMDB_7 = 139; +// start CMDB in a range that won't interfere with layouts. +const int CMDB_1 = 201; +const int CMDB_2 = 202; +const int CMDB_3 = 203; +const int CMDB_4 = 204; +const int CMDB_5 = 205; +const int CMDB_6 = 206; +const int CMDB_7 = 207; const int UNUSED = 255; // LED addresses for CMD buttons. @@ -241,6 +242,60 @@ const byte fullLayout[elementCount] = { ROW_FLIP(9, 8, 7, 6, 5, 4, 3, 2, 1, 0) }; +// ./makeLayout.py 99 -4 -3 +const byte fourtyone1[elementCount] = { + ROW_FLIP(CMDB_1, 99, 95, 91, 87, 83, 79, 75, 71, 67), + ROW_FLIP(96, 92, 88, 84, 80, 76, 72, 68, 64, 60), + ROW_FLIP(CMDB_2, 89, 85, 81, 77, 73, 69, 65, 61, 57), + ROW_FLIP(86, 82, 78, 74, 70, 66, 62, 58, 54, 50), + ROW_FLIP(CMDB_3, 79, 75, 71, 67, 63, 59, 55, 51, 47), + ROW_FLIP(76, 72, 68, 64, 60, 56, 52, 48, 44, 40), + ROW_FLIP(CMDB_4, 69, 65, 61, 57, 53, 49, 45, 41, 37), + ROW_FLIP(66, 62, 58, 54, 50, 46, 42, 38, 34, 30), + ROW_FLIP(CMDB_5, 59, 55, 51, 47, 43, 39, 35, 31, 27), + ROW_FLIP(56, 52, 48, 44, 40, 36, 32, 28, 24, 20), + ROW_FLIP(CMDB_6, 49, 45, 41, 37, 33, 29, 25, 21, 17), + ROW_FLIP(46, 42, 38, 34, 30, 26, 22, 18, 14, 10), + ROW_FLIP(CMDB_7, 39, 35, 31, 27, 23, 19, 15, 11, 7), + ROW_FLIP(36, 32, 28, 24, 20, 16, 12, 8, 4, 0) +}; + +// ./makeLayout.py 138 3 -10 +const byte fourtyone2[elementCount] = { + ROW_FLIP(CMDB_1, 138, 141, 144, 147, 150, 153, 156, 159, 162), + ROW_FLIP(128, 131, 134, 137, 140, 143, 146, 149, 152, 155), + ROW_FLIP(CMDB_2, 121, 124, 127, 130, 133, 136, 139, 142, 145), + ROW_FLIP(111, 114, 117, 120, 123, 126, 129, 132, 135, 138), + ROW_FLIP(CMDB_3, 104, 107, 110, 113, 116, 119, 122, 125, 128), + ROW_FLIP(94, 97, 100, 103, 106, 109, 112, 115, 118, 121), + ROW_FLIP(CMDB_4, 87, 90, 93, 96, 99, 102, 105, 108, 111), + ROW_FLIP(77, 80, 83, 86, 89, 92, 95, 98, 101, 104), + ROW_FLIP(CMDB_5, 70, 73, 76, 79, 82, 85, 88, 91, 94), + ROW_FLIP(60, 63, 66, 69, 72, 75, 78, 81, 84, 87), + ROW_FLIP(CMDB_6, 53, 56, 59, 62, 65, 68, 71, 74, 77), + ROW_FLIP(43, 46, 49, 52, 55, 58, 61, 64, 67, 70), + ROW_FLIP(CMDB_7, 36, 39, 42, 45, 48, 51, 54, 57, 60), + ROW_FLIP(26, 29, 32, 35, 38, 41, 44, 47, 50, 53) +}; + +// ./makeLayout.py 152 -1 -8 +const byte fourtyone3[elementCount] = { + ROW_FLIP(CMDB_1, 152, 151, 150, 149, 148, 147, 146, 145, 144), + ROW_FLIP(144, 143, 142, 141, 140, 139, 138, 137, 136, 135), + ROW_FLIP(CMDB_2, 135, 134, 133, 132, 131, 130, 129, 128, 127), + ROW_FLIP(127, 126, 125, 124, 123, 122, 121, 120, 119, 118), + ROW_FLIP(CMDB_3, 118, 117, 116, 115, 114, 113, 112, 111, 110), + ROW_FLIP(110, 109, 108, 107, 106, 105, 104, 103, 102, 101), + ROW_FLIP(CMDB_4, 101, 100, 99, 98, 97, 96, 95, 94, 93), + ROW_FLIP(93, 92, 91, 90, 89, 88, 87, 86, 85, 84), + ROW_FLIP(CMDB_5, 84, 83, 82, 81, 80, 79, 78, 77, 76), + ROW_FLIP(76, 75, 74, 73, 72, 71, 70, 69, 68, 67), + ROW_FLIP(CMDB_6, 67, 66, 65, 64, 63, 62, 61, 60, 59), + ROW_FLIP(59, 58, 57, 56, 55, 54, 53, 52, 51, 50), + ROW_FLIP(CMDB_7, 50, 49, 48, 47, 46, 45, 44, 43, 42), + ROW_FLIP(42, 41, 40, 39, 38, 37, 36, 35, 34, 33) +}; + const byte* currentLayout = wickiHaydenLayout; // These are for standard tuning only @@ -392,11 +447,17 @@ void harmonicTable(); void gerhard(); void ezMajor(); void full(); +void fortyone1(); +void fortyone2(); +void fortyone3(); GEMItem menuItemWickiHayden("Wicki-Hayden", wickiHayden); GEMItem menuItemHarmonicTable("Harmonic Table", harmonicTable); GEMItem menuItemGerhard("Gerhard", gerhard); GEMItem menuItemEzMajor("EZ Major", ezMajor); GEMItem menuItemFull("Full", full); +GEMItem menuItem411("41-1", fortyone1); +GEMItem menuItem412("41-2", fortyone2); +GEMItem menuItem413("41-3", fortyone3); void setLayoutLEDs(); //Forward declaration byte key = 0; @@ -504,7 +565,7 @@ GEMItem menuItemBuzzer("Buzzer:", buzzer, selectBuzzer); // For use when testing out unfinished features GEMItem menuItemTesting("Testing", menuPageTesting); boolean release = false; // Whether this is a release or not -GEMItem menuItemVersion("V0.6.x ", release, GEM_READONLY); +GEMItem menuItemVersion("V0.6.y ", release, GEM_READONLY); void sequencerSetup(); //Forward declaration // For enabling basic sequencer mode - not complete GEMItem menuItemSequencer("Sequencer:", sequencerMode, sequencerSetup); @@ -692,6 +753,12 @@ void diagnosticTest() { } void commandPress(byte command) { + // 14,15 undefined + // 20-31 undefined + // 35, 41 undefined + // 46-63 undefined + //84-90 undefined + // 102-119 undefined if (command == EXTR_1) { MIDI.sendControlChange(85, 127, midiChannel); } else if (command == EXTR_2) { @@ -1506,6 +1573,9 @@ void setupMenu() { menuPageTesting.addMenuItem(menuItemSequencer); menuPageTesting.addMenuItem(menuItemEzMajor); menuPageTesting.addMenuItem(menuItemFull); + menuPageTesting.addMenuItem(menuItem411); + menuPageTesting.addMenuItem(menuItem412); + menuPageTesting.addMenuItem(menuItem413); menuPageTesting.addMenuItem(menuItemVersion); menuPageTesting.addMenuItem(menuItemTones); menuPageTesting.addMenuItem(menuItemArp); @@ -1552,6 +1622,33 @@ void full() { menu.setMenuPageCurrent(menuPageMain); menu.drawMenu(); } +void fortyone1() { + currentLayout = fourtyone1; + setLayoutLEDs(); + if (ModelNumber != 1) { + u8g2.setDisplayRotation(U8G2_R1); + } + menu.setMenuPageCurrent(menuPageMain); + menu.drawMenu(); +} +void fortyone2() { + currentLayout = fourtyone2; + setLayoutLEDs(); + if (ModelNumber != 1) { + u8g2.setDisplayRotation(U8G2_R1); + } + menu.setMenuPageCurrent(menuPageMain); + menu.drawMenu(); +} +void fortyone3() { + currentLayout = fourtyone3; + setLayoutLEDs(); + if (ModelNumber != 1) { + u8g2.setDisplayRotation(U8G2_R1); + } + menu.setMenuPageCurrent(menuPageMain); + menu.drawMenu(); +} void ezMajor() { currentLayout = ezMajorLayout; setLayoutLEDs(); |