Firmware for HexBoard MIDI controller
Added in some new scales and adjusted contrast between dim and normal keys
Jared DeCook 2024-02-24
parent acdb87e · commit eac95d9
-rw-r--r--HexBoard_V1.1.ino56
1 files changed, 44 insertions, 12 deletions
diff --git a/HexBoard_V1.1.ino b/HexBoard_V1.1.ino
index 2e4e830..9f4bde8 100644
--- a/HexBoard_V1.1.ino
+++ b/HexBoard_V1.1.ino
@@ -46,7 +46,7 @@ int pressedBrightness = 255;
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
int stripBrightness = 130;
int defaultBrightness = 100;
-int dimBrightness = 30;
+int dimBrightness = 26;
int pressedBrightness = 255;
#endif
@@ -466,22 +466,33 @@ GEMSelect selectKey(sizeof(selectKeyOptions) / sizeof(SelectOptionByte), selectK
GEMItem menuItemKey("Key:", key, selectKey, setLayoutLEDs);
byte scale = 0;
-SelectOptionByte selectScaleOptions[] = { { "ALL", 0 }, { "Major", 1 }, { "HarMin", 2 }, { "MelMin", 3 }, { "NatMin", 4 }, { "PentMaj", 5 }, { "PentMin", 6 }, { "Blues", 7 }, { "NONE", 8 }, { "NONE", 9 }, { "NONE", 10 }, { "NONE", 11 } };
+SelectOptionByte selectScaleOptions[] = {
+ { "ALL", 0 }, { "Major", 1 }, { "HarMin", 2 }, { "MelMin", 3 }, { "NatMin", 4 }, { "PentMaj", 5 },
+ { "PentMin", 6 }, { "Blues", 7 }, { "DoubHar", 8 }, { "Phrygia", 9 }, { "PhryDom", 10 }, { "Dorian", 11 },
+ { "Lydian", 12 }, { "Mixolyd", 13 }, { "Locrian", 14 }, { "NONE", 15 }
+ };
GEMSelect selectScale(sizeof(selectScaleOptions) / sizeof(SelectOptionByte), selectScaleOptions);
GEMItem menuItemScale("Scale:", scale, selectScale, applySelectedScale);
const bool (*selectedScale)[12];
// Scale arrays of boolean (for O(1) access instead of O(12/2))
-// 0 1 2 3 4 5 6 7 8 9 X E
-const bool noneScale[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
-const bool chromaticScale[12] = {1,1,1,1,1,1,1,1,1,1,1,1};
-const bool majorScale[12] = {1,0,1,0,1,1,0,1,0,1,0,1};
-const bool harmonicMinorScale[12] = {1,0,1,1,0,1,0,1,1,0,0,1};
-const bool melodicMinorScale[12] = {1,0,1,1,0,1,0,1,0,1,0,1};
-const bool naturalMinorScale[12] = {1,0,1,1,0,1,0,1,1,0,1,0};
-const bool pentatonicMajorScale[12]={1,0,1,0,1,0,0,1,0,1,0,0};
-const bool pentatonicMinorScale[12]={1,0,0,1,0,1,0,1,0,0,1,0};
-const bool bluesScale[12] = {1,0,0,1,0,1,1,1,0,0,1,0};
+// 0 1 2 3 4 5 6 7 8 9 X E
+const bool noneScale[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
+const bool chromaticScale[12] = {1,1,1,1,1,1,1,1,1,1,1,1};
+const bool majorScale[12] = {1,0,1,0,1,1,0,1,0,1,0,1};
+const bool harmonicMinorScale[12] = {1,0,1,1,0,1,0,1,1,0,0,1};
+const bool melodicMinorScale[12] = {1,0,1,1,0,1,0,1,0,1,0,1};
+const bool naturalMinorScale[12] = {1,0,1,1,0,1,0,1,1,0,1,0};
+const bool pentatonicMajorScale[12] = {1,0,1,0,1,0,0,1,0,1,0,0};
+const bool pentatonicMinorScale[12] = {1,0,0,1,0,1,0,1,0,0,1,0};
+const bool bluesScale[12] = {1,0,0,1,0,1,1,1,0,0,1,0};
+const bool doubleHarmonicScale[12] = {1,1,0,0,1,1,0,1,1,0,0,1};
+const bool phrygianScale[12] = {1,1,0,1,0,1,0,1,1,0,1,0};
+const bool phrygianDominantScale[12]= {1,1,0,0,1,1,0,1,1,0,1,0};
+const bool dorianScale[12] = {1,0,1,1,0,1,0,1,0,1,1,0};
+const bool lydianScale[12] = {1,0,1,0,1,0,1,1,0,1,0,1};
+const bool mixolydianScale[12] = {1,0,1,0,1,1,0,1,0,1,1,0};
+const bool locrianScale[12] = {1,1,0,1,0,1,1,0,1,0,1,0};
// Function to apply the selected scale
void applySelectedScale() {
@@ -510,6 +521,27 @@ void applySelectedScale() {
case 7: // Blues scale
selectedScale = &bluesScale;
break;
+ case 8: // Double Harmonic scale
+ selectedScale = &doubleHarmonicScale;
+ break;
+ case 9: // Phrygian scale
+ selectedScale = &phrygianScale;
+ break;
+ case 10: // Phrygian Dominant scale
+ selectedScale = &phrygianDominantScale;
+ break;
+ case 11: // Dorian scale
+ selectedScale = &dorianScale;
+ break;
+ case 12: // Lydian scale
+ selectedScale = &lydianScale;
+ break;
+ case 13: // Mixolydian scale
+ selectedScale = &mixolydianScale;
+ break;
+ case 14: // Locrian scale
+ selectedScale = &locrianScale;
+ break;
default: // Dim all LEDs
selectedScale = &noneScale;
break;