From c1b2d6d9964667465d69efd9450e044a6785e729 Mon Sep 17 00:00:00 2001 From: Dejvino Date: Mon, 16 Feb 2026 23:06:36 +0100 Subject: [PATCH] fix theme indexing --- RP2040_Tracker.ino | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/RP2040_Tracker.ino b/RP2040_Tracker.ino index 7f8adff..145a776 100644 --- a/RP2040_Tracker.ino +++ b/RP2040_Tracker.ino @@ -61,6 +61,7 @@ UIState currentState = UI_MENU_MAIN; const char* mainMenu[] = { "Tracker", "Randomize", "Setup" }; const int mainMenuCount = sizeof(mainMenu) / sizeof(char*); const char* randomizeMenu[] = { "Back", "Scale", "Melody", "Mutation", "Song Mode", "Theme 1", "Theme 2", "Theme 3", "Theme 4", "Theme 5", "Theme 6", "Theme 7" }; +const int THEME_1_INDEX = 5; const int randomizeMenuCount = sizeof(randomizeMenu) / sizeof(char*); const char* setupMenu[] = { "Back", "Channel", "Tempo", "Save", "Load" }; const int setupMenuCount = sizeof(setupMenu) / sizeof(char*); @@ -68,7 +69,8 @@ const int setupMenuCount = sizeof(setupMenu) / sizeof(char*); int menuSelection = 0; volatile int navigationSelection = 1; volatile int playbackStep = 0; -volatile int midiChannel = 1; +int midiChannel = 1; +volatile int shMidiChannel = midiChannel; int scaleNotes[12]; int numScaleNotes = 0; int melodySeed = 0; @@ -170,6 +172,7 @@ bool loadSequence() { if (magic != EEPROM_MAGIC) return false; EEPROM.get(addr, midiChannel); addr += sizeof(midiChannel); + shMidiChannel = midiChannel; EEPROM.get(addr, melodySeed); addr += sizeof(melodySeed); EEPROM.get(addr, numScaleNotes); addr += sizeof(numScaleNotes); @@ -240,7 +243,7 @@ void setup() { } void sendMidi(uint8_t status, uint8_t note, uint8_t velocity) { - uint8_t channelStatus = status | (midiChannel - 1); + uint8_t channelStatus = status | (shMidiChannel - 1); Serial1.write(channelStatus); Serial1.write(note); Serial1.write(velocity); @@ -359,6 +362,7 @@ void handleInput() { midiChannel += (delta > 0 ? 1 : -1); if (midiChannel < 1) midiChannel = 16; if (midiChannel > 16) midiChannel = 1; + shMidiChannel = midiChannel; break; case UI_SETUP_TEMPO_EDIT: tempo += delta; @@ -438,15 +442,16 @@ void handleInput() { } } } - if (menuSelection >= 5) { // Themes + if (menuSelection >= THEME_1_INDEX) { // Themes + const int selectedTheme = menuSelection - THEME_1_INDEX + 1; if (isPlaying) { - queuedTheme = menuSelection - 2; + queuedTheme = selectedTheme; mutex_enter_blocking(&midiMutex); generateSequenceData(queuedTheme, nextSequence); nextSequenceReady = true; mutex_exit(&midiMutex); } else { - generateTheme(menuSelection - 2); + generateTheme(selectedTheme); } } break; @@ -612,12 +617,12 @@ void drawMenu(const char* title, const char* items[], int count, int selection) } // Special case for queued theme - if (currentState == UI_MENU_RANDOMIZE && i >= 5 && queuedTheme == (i - 4)) { + if (currentState == UI_MENU_RANDOMIZE && i >= THEME_1_INDEX && queuedTheme == (i - THEME_1_INDEX + 1)) { display.print(F(" [NEXT]")); } // Special case for active theme - if (currentState == UI_MENU_RANDOMIZE && i >= 5 && currentThemeIndex == (i - 4)) { + if (currentState == UI_MENU_RANDOMIZE && i >= THEME_1_INDEX && currentThemeIndex == (i - THEME_1_INDEX + 1)) { display.print(F(" *")); }