diff --git a/Software/Gravity/Gravity.ino b/Software/Gravity/Gravity.ino index 55e04b4..bbd6b11 100644 --- a/Software/Gravity/Gravity.ino +++ b/Software/Gravity/Gravity.ino @@ -23,8 +23,10 @@ uint8_t bpm = 130; uint8_t bpmModulationChannel = 200; //0 - CV1, 1 - CV2, 255 - OFF uint8_t bpmModulationRange = 0; +enum modes {Clock, Random, Sequencer, Swing, Gate}; + struct channel { - uint8_t mode : 3; //mv: 7. 0 - CLK, 1 - RND, 2 - SEQ, 3 - SWING, 4 - Gate + enum modes mode : 3; //mv: 7. 0 - CLK, 1 - RND, 2 - SEQ, 3 - SWING, 4 - Gate uint8_t subDiv : 5; //mv: 31 uint8_t random : 4; //mv: 15 uint8_t seqPattern : 5; @@ -238,7 +240,7 @@ void clock() { if (bpmModulationRange != 0) { calculateBPMTiming(); for (uint8_t i; i < 7; i++) { - if (channels[i].mode == 4) { + if (channels[i].mode == Gate) { calculateGate(i); } } @@ -264,12 +266,12 @@ void clock() { // pull low all outputs after set pulse length for (uint8_t i = 0; i < 7; i++) { - if (channels[i].mode != 4 && tickCount >= PULSE_LENGTH) { //everything but gate mode + if (channels[i].mode != Gate && tickCount >= PULSE_LENGTH) { //everything but gate mode digitalWrite(outsPins[i], LOW); - } else if (channels[i].mode == 4 && tickCount >= gateCountDown[i]) { //gate mode gateLengthTime[i] < pulsePeriod + } else if (channels[i].mode == Gate && tickCount >= gateCountDown[i]) { //gate mode gateLengthTime[i] < pulsePeriod digitalWrite(outsPins[i], LOW); gateCountDown[i] = gateLengthTime[i]; - } else if (channels[i].mode == 4 && gateCountDown[i] > pulsePeriod && tickCount == 0) { + } else if (channels[i].mode == Gate && gateCountDown[i] > pulsePeriod && tickCount == 0) { gateCountDown[i] = gateCountDown[i] - pulsePeriod; } } @@ -360,7 +362,7 @@ void sendTriggers() { //rename to onPulse or something } bool currentStepValue = bitRead(sequences[channels[i].seqPattern].sequence, currentStep[i]); - if (channels[i].mode == 2 && currentStepValue && !channels[i].isMute) { + if (channels[i].mode == Sequencer && currentStepValue && !channels[i].isMute) { digitalWrite(outsPins[i], HIGH); } } @@ -373,7 +375,7 @@ void sendTriggers() { //rename to onPulse or something } else { sixteenthPulseCount = 0; for (uint8_t i; i < 7; i++) { - if (channels[i].mode == 2 && currentStep[i] < sequences[channels[i].seqPattern].length) { + if (channels[i].mode == Sequencer && currentStep[i] < sequences[channels[i].seqPattern].length) { currentStep[i] ++; } else { currentStep[i] = 0; @@ -390,7 +392,7 @@ void sendTriggers() { //rename to onPulse or something channelPulseCount[i] = 0; needPulseReset[i] = false; } - if (channels[i].mode == 4) { + if (channels[i].mode == Gate) { calculateGate(i); } } @@ -418,15 +420,15 @@ void sendTriggers() { //rename to onPulse or something } if (!channels[i].isMute) { - if ((channels[i].mode == 3 && channelPulseCount[i] == 0 && stepIsOdd == 0) - || (channels[i].mode == 3 && channelPulseCount[i] == channels[i].swing && stepIsOdd == 1) //swing + if ((channels[i].mode == Swing && channelPulseCount[i] == 0 && stepIsOdd == 0) + || (channels[i].mode == Swing && channelPulseCount[i] == channels[i].swing && stepIsOdd == 1) //swing ) { digitalWrite(outsPins[i], HIGH); } - if ((channels[i].mode == 0 && channelPulseCount[i] == channels[i].offset) //CLK with offset - || (channels[i].mode == 1 && channelPulseCount[i] == 0 && (random(10) + 1) > randAmount) //RND - || (channels[i].mode == 4 && channelPulseCount[i] == 0) //Gate + if ((channels[i].mode == Clock && channelPulseCount[i] == channels[i].offset) //CLK with offset + || (channels[i].mode == Random && channelPulseCount[i] == 0 && (random(10) + 1) > randAmount) //RND + || (channels[i].mode == Gate && channelPulseCount[i] == 0) //Gate ) { digitalWrite(outsPins[i], HIGH); } @@ -450,7 +452,7 @@ void calculateCycles() { } playingModes[i] = subDivs[channels[i].subDiv - mod]; //subtracting because the innitial array is backwards - if (channels[i].mode == 2 || channels[i].mode == 3) { //Sequencer and swing plays 1/16th + if (channels[i].mode == Sequencer || channels[i].mode == Swing) { //Sequencer and swing plays 1/16th channelPulsesPerCycle[i] = (PPQN / 4) - 1; } else if (playingModes[i] > 0) { channelPulsesPerCycle[i] = (playingModes[i] * PPQN) - 1; diff --git a/Software/Gravity/Interactions.ino b/Software/Gravity/Interactions.ino index ea2bbc0..d12d3d5 100644 --- a/Software/Gravity/Interactions.ino +++ b/Software/Gravity/Interactions.ino @@ -12,7 +12,7 @@ void checkInputs() { } else if (encReleasedTime - encPressedTime <= 300) { // press shorter than .3s is for entering the submenu if (!insideTab && displayScreen == 0) { insideTab = true; - } else if (insideTab && channels[displayTab - 1].mode == 2 && menuItem == 2 && displayScreen == 0) { //enter the pattern editor + } else if (insideTab && channels[displayTab - 1].mode == Sequencer && menuItem == 2 && displayScreen == 0) { //enter the pattern editor patternToEdit = channels[displayTab - 1].seqPattern; displayScreen = 1; isRecording = 0; @@ -103,7 +103,7 @@ void checkInputs() { || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) && displayTab != 0 - && channels[displayTab - 1].mode == 0) { + && channels[displayTab - 1].mode == Clock) { channels[displayTab - 1].subDiv = channels[displayTab - 1].subDiv - change; //channels[displayTab - 1].offset = 0; if (channels[displayTab - 1].subDiv > 100) { @@ -128,7 +128,7 @@ void checkInputs() { || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) && displayTab != 0 - && channels[displayTab - 1].mode == 1) { //Change Random + && channels[displayTab - 1].mode == Random) { //Change Random channels[displayTab - 1].random = channels[displayTab - 1].random + change; if (channels[displayTab - 1].random > 100) { channels[displayTab - 1].random = 0; @@ -140,7 +140,7 @@ void checkInputs() { || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) && displayTab != 0 - && channels[displayTab - 1].mode == 2) { //Change SEQ pattern + && channels[displayTab - 1].mode == Sequencer) { //Change SEQ pattern if (channels[displayTab - 1].seqPattern == 0 && change == -1) { channels[displayTab - 1].seqPattern = 0; } else if (channels[displayTab - 1].seqPattern == 31 && change == 1) { @@ -153,7 +153,7 @@ void checkInputs() { || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) && displayTab != 0 - && channels[displayTab - 1].mode == 3) { //Change SWING + && channels[displayTab - 1].mode == Swing) { //Change SWING channels[displayTab - 1].swing = channels[displayTab - 1].swing + change; if (channels[displayTab - 1].swing > 6) { channels[displayTab - 1].swing = 0; @@ -165,7 +165,7 @@ void checkInputs() { || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) && displayTab != 0 - && channels[displayTab - 1].mode == 4) { //Change GATE + && channels[displayTab - 1].mode == Gate) { //Change GATE channels[displayTab - 1].gate = channels[displayTab - 1].gate + change; if (channels[displayTab - 1].gate > 100 || channels[displayTab - 1].gate == 0) { channels[displayTab - 1].gate = 1; @@ -252,7 +252,7 @@ void checkInputs() { } else if (insideTab && (menuItemSelected || shiftBtnPushed) && displayTab != 0 && menuItem == 2 - && channels[displayTab - 1].mode == 0) { //Offset + && channels[displayTab - 1].mode == Clock) { //Offset channels[displayTab - 1].offset = channels[displayTab - 1].offset + change; if (channels[displayTab - 1].offset == 255) { // 0 - 1 for uint8 is 255 channels[displayTab - 1].offset = 0; @@ -264,7 +264,7 @@ void checkInputs() { && (menuItemSelected || shiftBtnPushed) && displayTab != 0 && menuItem == 2 - && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4)) { //SUBDIV for RANDOM and GATE + && (channels[displayTab - 1].mode == Random || channels[displayTab - 1].mode == Gate)) { //SUBDIV for RANDOM and GATE channels[displayTab - 1].subDiv = channels[displayTab - 1].subDiv - change; if (channels[displayTab - 1].subDiv > 200) { channels[displayTab - 1].subDiv = 0; @@ -279,7 +279,7 @@ void checkInputs() { && (menuItemSelected || shiftBtnPushed) && displayTab != 0 && menuItem == 3 - && channels[displayTab - 1].mode == 0) { //CV for CLK + && channels[displayTab - 1].mode == Clock) { //CV for CLK if (channels[displayTab - 1].CV1Target == 1 && channels[displayTab - 1].CV2Target == 0) { channelCV = 1; } else if (channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target == 1) { @@ -301,7 +301,7 @@ void checkInputs() { channels[displayTab - 1].CV2Target = 1; } saveState(); - } else if (insideTab && (menuItemSelected || shiftBtnPushed) && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 1) { //CV for RND + } else if (insideTab && (menuItemSelected || shiftBtnPushed) && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == Random) { //CV for RND if (channels[displayTab - 1].CV1Target == 2 && channels[displayTab - 1].CV2Target == 0) { channelCV = 1; } else if (channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target == 2) { @@ -323,7 +323,7 @@ void checkInputs() { channels[displayTab - 1].CV2Target = 2; } saveState(); - } else if (insideTab && (menuItemSelected || shiftBtnPushed) && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 2) { //CV1 for SEQ + } else if (insideTab && (menuItemSelected || shiftBtnPushed) && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == Sequencer) { //CV1 for SEQ if (channels[displayTab - 1].CV1Target == 3 && channels[displayTab - 1].CV2Target == 0) { channelCV = 1; } else if (channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target == 3) { diff --git a/Software/Gravity/UI.ino b/Software/Gravity/UI.ino index b86cf31..69f9643 100644 --- a/Software/Gravity/UI.ino +++ b/Software/Gravity/UI.ino @@ -118,9 +118,9 @@ void updateScreen() { //Channel Tabs else { //Menu items - if (channels[displayTab - 1].mode == 3) { + if (channels[displayTab - 1].mode == Swing) { lastMenuItem = 1; - } else if (channels[displayTab - 1].mode == 4) { + } else if (channels[displayTab - 1].mode == Gate) { lastMenuItem = 3; } else { lastMenuItem = 3; @@ -130,13 +130,13 @@ void updateScreen() { for (uint8_t i = 1; i <= lastMenuItem; i++) { if (i == 1) { valueStr = F("MODE:"); - } else if (i == 2 && channels[displayTab - 1].mode == 0) { + } else if (i == 2 && channels[displayTab - 1].mode == Clock) { valueStr = F("OFFSET:"); - } else if (i == 2 && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4)) { + } else if (i == 2 && (channels[displayTab - 1].mode == Random || channels[displayTab - 1].mode == Gate)) { valueStr = F("SUBDIV:"); - } else if (i == 2 && channels[displayTab - 1].mode == 2) { + } else if (i == 2 && channels[displayTab - 1].mode == Sequencer) { valueStr = F("EDIT PATTERN"); - } else if (i == 3 && channels[displayTab - 1].mode == 4) { + } else if (i == 3 && channels[displayTab - 1].mode == Gate) { valueStr = (String(pulsePeriod) + " " + String(channelPulsesPerCycle[displayTab - 1])); } else if (i == 3) { valueStr = F("MOD:"); @@ -150,17 +150,17 @@ void updateScreen() { //Values for (uint8_t i = 1; i <= lastMenuItem; i++) { - if (i == 1 && channels[displayTab - 1].mode == 0) { //Channel mode + if (i == 1 && channels[displayTab - 1].mode == Clock) { //Channel mode valueStr = F("CLOCK"); - } else if (i == 1 && channels[displayTab - 1].mode == 1) { + } else if (i == 1 && channels[displayTab - 1].mode == Random) { valueStr = F("RAND"); - } else if (i == 1 && channels[displayTab - 1].mode == 2) { + } else if (i == 1 && channels[displayTab - 1].mode == Sequencer) { valueStr = F("SEQ"); - } else if (i == 1 && channels[displayTab - 1].mode == 3) { + } else if (i == 1 && channels[displayTab - 1].mode == Swing) { valueStr = F("SWING"); - } else if (i == 1 && channels[displayTab - 1].mode == 4) { + } else if (i == 1 && channels[displayTab - 1].mode == Gate) { valueStr = F("GATE"); - } else if (i == 2 && channels[displayTab - 1].mode == 0) { //SubDiv and offset + } else if (i == 2 && channels[displayTab - 1].mode == Clock) { //SubDiv and offset valueStr = String(channels[displayTab - 1].offset) + F("/"); int PulsesPerStep; if (subDivs[channels[displayTab - 1].subDiv] < 0) { @@ -169,10 +169,10 @@ void updateScreen() { PulsesPerStep = subDivs[channels[displayTab - 1].subDiv] * PPQN; } valueStr = valueStr + String(PulsesPerStep); //(playingModes[i] * PPQN) - 1 //String(channelPulsesPerCycle[displayTab-1]+1) - } else if (i == 2 && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4) && subDivs[channels[displayTab - 1].subDiv] > 0) { + } else if (i == 2 && (channels[displayTab - 1].mode == Random || channels[displayTab - 1].mode == Gate) && subDivs[channels[displayTab - 1].subDiv] > 0) { valueStr = F("/"); valueStr = valueStr + String(subDivs[channels[displayTab - 1].subDiv]); - } else if (i == 2 && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4) && subDivs[channels[displayTab - 1].subDiv] < 0) { + } else if (i == 2 && (channels[displayTab - 1].mode == Random || channels[displayTab - 1].mode == Gate) && subDivs[channels[displayTab - 1].subDiv] < 0) { valueStr = F("x"); valueStr = valueStr + String(abs(subDivs[channels[displayTab - 1].subDiv])); } else if (i == 3 && channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target == 0) { //MOD @@ -183,7 +183,7 @@ void updateScreen() { valueStr = F("CV2"); } - if (i == 2 && channels[displayTab - 1].mode == 2) { //EDIT PATTERN thing + if (i == 2 && channels[displayTab - 1].mode == Sequencer) { //EDIT PATTERN thing if (menuItem == i && insideTab) { u8g2.drawBox(leftOffset + 54, ((i-1) * 11), 11, 11); } @@ -201,15 +201,15 @@ void updateScreen() { //Main Param leftOffset = 29; width = 55; - if (channels[displayTab - 1].mode == 0) { + if (channels[displayTab - 1].mode == Clock) { valueStr = F("SUBDIVISION"); - } else if (channels[displayTab - 1].mode == 1) { + } else if (channels[displayTab - 1].mode == Random) { valueStr = F("SKIP CHANCE"); - } else if (channels[displayTab - 1].mode == 2) { + } else if (channels[displayTab - 1].mode == Sequencer) { valueStr = F("PATTERN"); - } else if (channels[displayTab - 1].mode == 3) { + } else if (channels[displayTab - 1].mode == Swing) { valueStr = F("SWING"); - } else if (channels[displayTab - 1].mode == 4) { + } else if (channels[displayTab - 1].mode == Gate) { valueStr = gateLengthTime[displayTab - 1]; } @@ -219,16 +219,16 @@ void updateScreen() { u8g2.drawButtonUTF8(leftOffset, 41, U8G2_BTN_BW0|U8G2_BTN_HCENTER, width, 1, 2, valueStr.c_str() ); } - if (channels[displayTab - 1].mode == 0) { + if (channels[displayTab - 1].mode == Clock) { if (subDivs[channels[displayTab - 1].subDiv] > 0) { valueStr = F("/"); } else { valueStr = F("x"); } valueStr = valueStr + String(abs(subDivs[channels[displayTab - 1].subDiv])); - } else if (channels[displayTab - 1].mode == 1) { + } else if (channels[displayTab - 1].mode == Random) { valueStr = String(channels[displayTab - 1].random) + (channels[displayTab - 1].random == 0 ? "%" : "0%"); - } else if (channels[displayTab - 1].mode == 2) { + } else if (channels[displayTab - 1].mode == Sequencer) { if (channels[displayTab - 1].seqPattern < 8) { valueStr = F("A"); valueStr = valueStr + String(channels[displayTab - 1].seqPattern + 1); @@ -242,10 +242,10 @@ void updateScreen() { valueStr = F("D"); valueStr = valueStr + String(channels[displayTab - 1].seqPattern - 23); } - } else if (channels[displayTab - 1].mode == 3) { + } else if (channels[displayTab - 1].mode == Swing) { uint8_t swingVals[6] = {50, 58, 66, 75, 83, 92}; valueStr = String(swingVals[channels[displayTab - 1].swing]) + "%"; - } else if (channels[displayTab - 1].mode == 4) { + } else if (channels[displayTab - 1].mode == Gate) { valueStr = String(channels[displayTab - 1].gate) + "%"; } u8g2.setFont(stkL);