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].subDiv = channels[displayTab - 1].subDiv - change; if (channels[displayTab - 1].subDiv > 200) { channels[displayTab - 1].subDiv = 0; } else if (channels[displayTab - 1].subDiv > (sizeof(subDivs) / sizeof(byte)) - 1) { channels[displayTab - 1].subDiv = (sizeof(subDivs) / sizeof(byte)) - 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 = 0; } else if (masterClockMode > 1) { masterClockMode = 1; } } else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 1) { //Modulation channel bpmModulationChannel = bpmModulationChannel + change; if (bpmModulationChannel == 0 || bpmModulationChannel == 1) { bpmModulationRange = 1; } else if (bpmModulationChannel > 100) { bpmModulationRange = 0; bpmModulationChannel = 255; } else if (bpmModulationChannel > 1) { bpmModulationChannel = 1; } } else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 2) { //Modulation range bpmModulationRange = bpmModulationRange + change; if (bpmModulationRange == 0) { bpmModulationRange = 1; } else if (bpmModulationRange > 100) { bpmModulationRange = 1; } else if (bpmModulationRange > 5) { //50bpm bpmModulationRange = 5; } } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 0) { //Channel Mode channels[displayTab - 1].mode = channels[displayTab - 1].mode + change; if (channels[displayTab - 1].mode > 100) { channels[displayTab - 1].mode = 0; } else if (channels[displayTab - 1].mode > 2) { channels[displayTab - 1].mode = 2; } } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 1 && channels[displayTab - 1].mode == 0) { //Offset channels[displayTab - 1].offset = channels[displayTab - 1].offset + change; if (channels[displayTab - 1].offset > 100) { channels[displayTab - 1].offset = 0; } else if (channels[displayTab - 1].offset > channelPulsesPerCycle[displayTab-1]) { channels[displayTab - 1].offset = channelPulsesPerCycle[displayTab-1]; } } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 1 && channels[displayTab - 1].mode == 1) { //RANDOM channels[displayTab - 1].random = channels[displayTab - 1].random + change; if (channels[displayTab - 1].random > 100) { channels[displayTab - 1].random = 0; } else if (channels[displayTab - 1].random > 9) { channels[displayTab - 1].random = 9; } } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 0) { //CV1 for CLK channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change; if (channels[displayTab - 1].CV1Target > 100) { channels[displayTab - 1].CV1Target = 0; } else if (channels[displayTab - 1].CV1Target > 1) { channels[displayTab - 1].CV1Target = 1; } } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 0) { //CV2 for CLK channels[displayTab - 1].CV2Target = channels[displayTab - 1].CV2Target + change; if (channels[displayTab - 1].CV2Target > 100) { channels[displayTab - 1].CV2Target = 0; } else if (channels[displayTab - 1].CV2Target > 1) { channels[displayTab - 1].CV2Target = 1; } } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 1) { //CV1 for RND channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change; if (channels[displayTab - 1].CV1Target > 100) { channels[displayTab - 1].CV1Target = 0; } else if (channels[displayTab - 1].CV1Target > 2) { channels[displayTab - 1].CV1Target = 2; } } else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 1) { //CV2 for RND channels[displayTab - 1].CV2Target = channels[displayTab - 1].CV2Target + change; if (channels[displayTab - 1].CV2Target > 100) { channels[displayTab - 1].CV2Target = 0; } else if (channels[displayTab - 1].CV2Target > 2) { channels[displayTab - 1].CV2Target = 2; } } /* } 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); }