void checkInputs() { //encoder button if (!digitalRead(ENC_BTN_PIN) && !encPressRegistered) { encPressRegistered = true; encPressedTime = millis(); } else if (digitalRead(ENC_BTN_PIN) && encPressRegistered) { encPressRegistered = false; encReleasedTime = millis(); if (encReleasedTime - encPressedTime < 500) { // press shorter than .5s is for entering the submenu if (insideTab == 0) { insideTab = 1; } updateScreen(); } 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(); } } //encoder encoder.tick(); int encPosition = encoder.getPosition(); if (encPositionOld != encPosition) { int change = encPositionOld - encPosition; if (!insideTab && !shiftBtnPushed) { //Change tab displayTab = displayTab + change; if (displayTab > 100) { //to address "negative" numbers displayTab = 0; } else if (displayTab > 6) { displayTab = 6; } } else if (!insideTab && shiftBtnPushed && displayTab == 0 && masterClockMode == 0) { //Change BPM bpm = bpm + change; if (bpm > MAXBPM) { bpm = MAXBPM; } else if (bpm < MINBPM) { bpm = MINBPM; } calculateBPMTiming(); } else if (!insideTab && shiftBtnPushed && displayTab != 0) { //Change Subdiv channels[displayTab - 1].mode = channels[displayTab - 1].mode - change; if (channels[displayTab - 1].mode == 65535) { //65535 is 0-1 for unsigned vars channels[displayTab - 1].mode = 0; } else if (channels[displayTab - 1].mode > (sizeof(subDivs) / sizeof(int)) - 1) { channels[displayTab - 1].mode = (sizeof(subDivs) / sizeof(int)) - 1; } if (!isPlaying) { calculateCycles(); } } else if (insideTab && !shiftBtnPushed) { menuItem = menuItem + change; if (menuItem > 100) { //for "negative" values menuItem = 0; } else if (menuItem > lastMenuItem) { menuItem = lastMenuItem; } } else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 0) { //Master Clock Mode masterClockMode = masterClockMode + change; if (masterClockMode > 100) { masterClockMode = 1; } else if (masterClockMode > 1) { masterClockMode = 0; } } 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; if (masterClockMode > 250) { masterClockMode = 0; } else if (masterClockMode > 3) { masterClockMode = 3; } } else if (displayTab == 0 && insideTab == 2 && masterClockMode == 0) { //bpm modulation bpmModulationRange = bpmModulationRange + change; if (bpmModulationRange == 255 && bpmModulationChannel == 0) { bpmModulationRange = 0; } else if (bpmModulationRange == 255 && bpmModulationChannel == 1) { bpmModulationRange = 9; bpmModulationChannel = 0; } else if (bpmModulationRange > 9 && bpmModulationChannel == 0) { bpmModulationRange = 0; bpmModulationChannel = 1; } else if (bpmModulationRange > 9 && bpmModulationChannel == 1) { bpmModulationRange = 9; } } else if (displayTab != 0 && insideTab == 0) { //subdivision channels[displayTab - 1].mode = channels[displayTab - 1].mode - change; if (channels[displayTab - 1].mode == 65535) { //65535 is 0-1 for unsigned vars channels[displayTab - 1].mode = 0; } else if (channels[displayTab - 1].mode > (sizeof(subDivs) / sizeof(int)) - 1) { channels[displayTab - 1].mode = (sizeof(subDivs) / sizeof(int)) - 1; } if (!isPlaying) { calculateCycles(); } } else if (displayTab != 0 && insideTab == 1) { //random channels[displayTab - 1].random = channels[displayTab - 1].random + change; if (channels[displayTab - 1].random == 65535) { channels[displayTab - 1].random = 0; } else if (channels[displayTab - 1].random > 9) { channels[displayTab - 1].random = 9; } } else if (displayTab != 0 && insideTab == 2) { //modulation channels[displayTab - 1].modulationRange = channels[displayTab - 1].modulationRange + change; if (channels[displayTab - 1].modulationRange < 0 && channels[displayTab - 1].modulationChannel == 0) { channels[displayTab - 1].modulationRange = 0; } else if (channels[displayTab - 1].modulationRange > 6 && channels[displayTab - 1].modulationChannel == 0) { channels[displayTab - 1].modulationChannel = 1; channels[displayTab - 1].modulationRange = 0; } else if (channels[displayTab - 1].modulationRange < 0 && channels[displayTab - 1].modulationChannel == 1) { channels[displayTab - 1].modulationChannel = 0; channels[displayTab - 1].modulationRange = 6; } else if (channels[displayTab - 1].modulationRange > 6 && channels[displayTab - 1].modulationChannel == 1) { channels[displayTab - 1].modulationRange = 6; } } else if (displayTab != 0 && insideTab == 3) { //offset channels[displayTab - 1].offset = channels[displayTab - 1].offset + change; if (channels[displayTab - 1].offset == 65535) { channels[displayTab - 1].offset = 0; } else if (channels[displayTab - 1].offset >= channelPulsesPerCycle[displayTab - 1]) { channels[displayTab - 1].offset = channelPulsesPerCycle[displayTab - 1]; } } */ updateScreen(); encPositionOld = encPosition; } //play button if (!digitalRead(START_STOP_BTN_PIN) && !playBtnPushed) { if (masterClockMode == 0) { calculateBPMTiming(); resetClocks(); isPlaying = !isPlaying; } playBtnPushed = true; saveState(); updateScreen(); //to wake up the screen if turned off } else if (digitalRead(START_STOP_BTN_PIN) && playBtnPushed) { playBtnPushed = false; } //shift button if (!digitalRead(SHIFT_BTN_PIN) && !shiftBtnPushed) { shiftBtnPushed = true; //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(); updateScreen(); } //modulations a1Input = analogRead(ANALOGUE_INPUT_1_PIN); a2Input = analogRead(ANALOGUE_INPUT_2_PIN); }