diff --git a/software/GToE/GToE.ino b/software/GToE/GToE.ino index 5acbf8b..ee65cdc 100644 --- a/software/GToE/GToE.ino +++ b/software/GToE/GToE.ino @@ -50,7 +50,7 @@ bool bpmModulationChannel; //0 - CV1, 1 - CV2 byte bpmModulationRange = 0; struct channel { - unsigned int mode; + unsigned int mode; //need to be changed to subdiv unsigned int random; bool modulationChannel; //0 - CV1, 1 - CV2 int modulationRange; @@ -87,6 +87,8 @@ bool needPulseReset[6] = { true, true, true, true, true, true }; unsigned int displayTab = 0; unsigned int displayTabOld; bool insideTab = false; +unsigned int menuItem = 0; +unsigned int lastMenuItem = 3; bool playBtnPushed = false; bool shiftBtnPushed = false; @@ -142,7 +144,6 @@ void setup() { pinMode(ENC_BTN_PIN, INPUT_PULLUP); pinMode(START_STOP_BTN_PIN, INPUT_PULLUP); - // pinMode(START_STOP_BTN_PIN, ANALOGUE_INPUT_1_PIN); // no idea where this came from pinMode(SHIFT_BTN_PIN, INPUT_PULLUP); pinMode(EXT_INPUT_PIN, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(EXT_INPUT_PIN), externalClock, FALLING); diff --git a/software/GToE/InputsCheck.ino b/software/GToE/InputsCheck.ino index c67cb9f..5ee9ee3 100644 --- a/software/GToE/InputsCheck.ino +++ b/software/GToE/InputsCheck.ino @@ -8,27 +8,16 @@ void checkInputs() { encPressRegistered = false; encReleasedTime = millis(); - /*if (encReleasedTime - encPressedTime < 500) { // press shorter than .5s switches tabs + if (encReleasedTime - encPressedTime < 500) { // press shorter than .5s is for entering the submenu if (insideTab == 0) { - displayTabOld = displayTab; - displayTab++; - if (displayTab > 6) { - displayTab = 0; - } - } else if (insideTab < 3 && displayTab != 0) { - insideTab++; - } else if (insideTab < 2 && displayTab == 0) { - insideTab++; - } else { insideTab = 1; - } + } updateScreen(); - } else */ if (encReleasedTime - encPressedTime < 2000) { // longer press (<2s) and switches random mode, longer than 2s presses are ignored - if (insideTab == 0) { - insideTab = 1; - } else { + } else if (encReleasedTime - encPressedTime < 2000) { // longer press (<2s) is for navigating back. longer than 2s presses are ignored + if (insideTab == 1) { insideTab = 0; - } + menuItem = 0; + } updateScreen(); } } @@ -63,15 +52,22 @@ void checkInputs() { if (!isPlaying) { calculateCycles(); } - } - /* if (displayTab == 0 && insideTab == 0 && masterClockMode == 0) { - bpm = bpm + change; - if (bpm > MAXBPM) { - bpm = MAXBPM; - } else if (bpm < MINBPM) { - bpm = MINBPM; + } else if (insideTab && !shiftBtnPushed) { + menuItem = menuItem + change; + if (menuItem > 100) { //for "negative" values + menuItem = 0; + } else if (menuItem > lastMenuItem) { + menuItem = lastMenuItem; } - calculateBPMTiming(); + } else if (insideTab && shiftBtnPushed && displayTab !=0 && menuItem == 1) { //RANDOM + channels[displayTab - 1].random = channels[displayTab - 1].random + change; + if (channels[displayTab - 1].random > 1000) { + channels[displayTab - 1].random = 0; + } else if (channels[displayTab - 1].random > 9) { + channels[displayTab - 1].random = 9; + } + } + /* } else if (displayTab == 0 && insideTab == 1) { //Clock mode masterClockMode = masterClockMode + change; @@ -157,13 +153,14 @@ void checkInputs() { //shift button if (!digitalRead(SHIFT_BTN_PIN) && !shiftBtnPushed) { shiftBtnPushed = true; - display.fillRoundRect(120, 52, 8, 8, 3, SSD1306_WHITE); - display.display(); - + //display.fillRoundRect(120, 52, 8, 8, 3, SSD1306_WHITE); + //display.display(); + updateScreen(); } else if (digitalRead(SHIFT_BTN_PIN) && shiftBtnPushed) { shiftBtnPushed = false; - display.fillRoundRect(120, 52, 8, 8, 3, SSD1306_BLACK); - display.display(); + //display.fillRoundRect(120, 52, 8, 8, 3, SSD1306_BLACK); + //display.display(); + updateScreen(); } //modulations diff --git a/software/GToE/UI.ino b/software/GToE/UI.ino index b286473..7b8f0e7 100644 --- a/software/GToE/UI.ino +++ b/software/GToE/UI.ino @@ -9,10 +9,13 @@ void updateScreen() { display.setTextSize(1); if (displayTab == 0) { - //display.setTextColor(SSD1306_WHITE, SSD1306_BLACK); - display.fillRoundRect(0, 46, 24, 18, 3, SSD1306_WHITE); - //display.print(F(" ")); - display.setTextColor(SSD1306_BLACK); + if (insideTab == true || shiftBtnPushed == true) { + display.drawRoundRect(0, 46, 24, 18, 3, SSD1306_WHITE); + display.setTextColor(SSD1306_WHITE); + } else { + display.fillRoundRect(0, 46, 24, 18, 3, SSD1306_WHITE); + display.setTextColor(SSD1306_BLACK); + } display.print(F("BPM")); } else { display.setTextColor(SSD1306_WHITE); @@ -21,16 +24,15 @@ void updateScreen() { for (int i = 1; i <= 6; i++) { if (displayTab == i) { - if (insideTab == false) { - display.fillRoundRect(i*12 + 12, 46, 13, 18, 3, SSD1306_WHITE); - display.setTextColor(SSD1306_BLACK); - } else { + if (insideTab == true || shiftBtnPushed == true) { display.drawRoundRect(i*12 + 12, 46, 13, 18, 3, SSD1306_WHITE); display.setTextColor(SSD1306_WHITE); + } else { + display.fillRoundRect(i*12 + 12, 46, 13, 18, 3, SSD1306_WHITE); + display.setTextColor(SSD1306_BLACK); } display.print(" "); display.print(i); - //display.print(" "); } else { display.setTextColor(SSD1306_WHITE); display.print(" "); @@ -38,17 +40,163 @@ void updateScreen() { } } - display.drawRect(0, 46, 128, 2, SSD1306_BLACK); - //display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); - //display.fillRect(108, 60, 20, 8, SSD1306_WHITE); - //display.println(); - //display.println(); - //display.fillRect(0, 10, 128, 2, SSD1306_WHITE); + display.drawRect(0, 46, 128, 2, SSD1306_BLACK); //to crop off parts of tabs round rect + + + //Submenu + if (insideTab) { + display.fillRoundRect(60, menuItem*12, 68, 10, 2, SSD1306_WHITE); + } + if (displayTab == 0) { //BPM + if (masterClockMode == 0) { + lastMenuItem = 2; + } else { + lastMenuItem = 0; + } + if (menuItem == 0 && insideTab) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(62, 1); + display.println(F("CLK:")); + if (masterClockMode == 0) { + if (menuItem == 1) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(62, 13); + display.println(F("CV1:")); + if (menuItem == 2) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(62, 25); + display.println(F("CV2:")); + } + + } else { //CHANNELS + if (true) { //placeholder for channel modes + lastMenuItem = 3; + } else { + lastMenuItem = 0; + } + if (menuItem == 0 && insideTab) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(62, 1); + display.println(F("MODE:")); + if (menuItem == 1) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(62, 13); + display.println(F("RND:")); + if (menuItem == 2) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(62, 25); + display.println(F("CV1:")); + if (menuItem == 3) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(62, 37); + display.println(F("CV2:")); + } + + //Submenu Values + if (displayTab == 0) { //BPM + if (menuItem == 0 && insideTab) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(94, 1); + if (masterClockMode == 0) { + display.println(F("INT")); + } else if (masterClockMode == 1) { + display.println(F("EXT-24")); + } + if (masterClockMode == 0) { + if (menuItem == 1) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(94, 13); + if (bpmModulationRange == 0) { + display.println(F("OFF")); + } else { + display.println(bpmModulationRange * 10); + } + if (menuItem == 2) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(94, 25); + display.println(F("OFF")); + } + + } else { //CHANNELS + if (menuItem == 0 && insideTab) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(94, 1); + display.println(F("CLK")); + if (menuItem == 1) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(94, 13); + if (channels[displayTab - 1].random > 0) { + display.print(channels[displayTab - 1].random); + display.print(F("0% ")); + } else { + display.print(F("OFF ")); + } + if (menuItem == 2) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(94, 25); + if (channels[displayTab - 1].modulationRange > 0) { + display.print(F("+/-")); + display.print(channels[displayTab - 1].modulationRange); + } else { + display.print(F("OFF ")); + } + if (menuItem == 3) { + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(94, 37); + display.println(F("OFF")); + } //Content - display.setCursor(4, 0); + display.setCursor(2, 2); display.setTextSize(3); - display.setTextColor(SSD1306_WHITE); + if (!insideTab && shiftBtnPushed){ + display.fillRoundRect(0, 0, 58, 42, 5, SSD1306_WHITE); + display.setTextColor(SSD1306_BLACK); + } else { + display.setTextColor(SSD1306_WHITE); + } if (displayTab == 0 && masterClockMode == 0) { if (bpm < 100) { display.print(" "); @@ -56,7 +204,7 @@ void updateScreen() { display.println(bpm); display.setCursor(21, 24); display.setTextSize(2); - display.println(F("bpm")); + display.println(F("BPM")); } else if (displayTab == 0 && masterClockMode == 1) { display.println(F(" 24")); display.setCursor(8, 24); @@ -83,9 +231,7 @@ void updateScreen() { } //Extra params - display.setCursor(58, 0); - display.setTextSize(1); - if (displayTab == 0) { + /*if (displayTab == 0) { if (insideTab == 1) { display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); } else { @@ -164,7 +310,7 @@ void updateScreen() { display.print(F("/")); display.print(channelPulsesPerCycle[displayTab - 1] + 1); display.print(F(" ")); - } + }*/ display.display(); } \ No newline at end of file