diff --git a/Software/Gravity/Gravity.ino b/Software/Gravity/Gravity.ino index a60e059..069adaf 100644 --- a/Software/Gravity/Gravity.ino +++ b/Software/Gravity/Gravity.ino @@ -6,9 +6,9 @@ #include #include -#define VERSION "V:1.1.1" +#define VERSION "V:1.2A" -byte memCode = 'D'; //Change to different letter if you changed the data structure +byte memCode = 'E'; //Change to different letter if you changed the data structure #define PPQN 24 #define PULSE_LENGTH 120 //1/10ms resolution. 12ms was failing at 1ms resolution at higher bpm. 60000/200/24 = 12.5 the max pulse length at 1ms resolution for 200bpm is 11ms @@ -60,15 +60,15 @@ byte bpmModulationChannel = 200; //0 - CV1, 1 - CV2, 255 - OFF byte bpmModulationRange = 0; struct channel { - byte mode; //0 - CLK, 1 - RND, 2 - SEQ + byte mode; //0 - CLK, 1 - RND, 2 - SEQ, 3 - SWING, 4 - Gate byte subDiv; byte CV1Target; //0 - Off, 1 - Subdiv, 2 - RND, 3 - SeqPattern - byte CV1Range; byte CV2Target; - byte CV2Range; uint8_t offset; byte random; byte seqPattern; + uint8_t gate; + uint8_t swing; //some of this params can be combinde into 4+4 bits to save space }; channel channels[6] = { //array of channel settings diff --git a/Software/Gravity/Interactions.ino b/Software/Gravity/Interactions.ino index 25781ab..615311a 100644 --- a/Software/Gravity/Interactions.ino +++ b/Software/Gravity/Interactions.ino @@ -175,6 +175,30 @@ void checkInputs() { channels[displayTab - 1].seqPattern = 15; } saveState(); + } else if (((!insideTab && shiftBtnPushed) + || (insideTab && menuItem == 0 + && (menuItemSelected || shiftBtnPushed))) + && displayTab != 0 + && channels[displayTab - 1].mode == 3) { //Change SWING + channels[displayTab - 1].swing = channels[displayTab - 1].swing + change; + if (channels[displayTab - 1].swing > 100) { + channels[displayTab - 1].swing = 0; + } else if (channels[displayTab - 1].swing > 15) { + channels[displayTab - 1].swing = 15; + } + saveState(); + } else if (((!insideTab && shiftBtnPushed) + || (insideTab && menuItem == 0 + && (menuItemSelected || shiftBtnPushed))) + && displayTab != 0 + && channels[displayTab - 1].mode == 4) { //Change GATE + channels[displayTab - 1].gate = channels[displayTab - 1].gate + change; + if (channels[displayTab - 1].gate > 100) { + channels[displayTab - 1].gate = 0; + } else if (channels[displayTab - 1].gate > 15) { + channels[displayTab - 1].gate = 15; + } + saveState(); } else if (insideTab && !shiftBtnPushed && !menuItemSelected) { menuItem = menuItem + change; if (menuItem > 100) { //for "negative" values @@ -193,7 +217,7 @@ void checkInputs() { masterClockMode = masterClockMode + change; if (masterClockMode > 100) { masterClockMode = 0; - } else if (masterClockMode > 2) { //Set to 1 to hide MIDI mode + } else if (masterClockMode > 2) { masterClockMode = 2; } saveState(); @@ -244,8 +268,8 @@ void checkInputs() { 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 (channels[displayTab - 1].mode > 4) { + channels[displayTab - 1].mode = 4; } channels[displayTab - 1].CV1Target = 0; channels[displayTab - 1].CV2Target = 0; diff --git a/Software/Gravity/UI.ino b/Software/Gravity/UI.ino index fd4f9e0..68cbe67 100644 --- a/Software/Gravity/UI.ino +++ b/Software/Gravity/UI.ino @@ -126,7 +126,7 @@ void updateScreen() { valueStr = F("MODE:"); } else if (i == 2 && channels[displayTab - 1].mode == 0) { valueStr = F("OFFSET:"); - } else if (i == 2 && channels[displayTab - 1].mode == 1) { + } else if (i == 2 && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4)) { valueStr = F("SUBDIV:"); } else if (i == 2 && channels[displayTab - 1].mode == 2) { valueStr = F("EDIT PATTERN"); @@ -148,6 +148,10 @@ void updateScreen() { valueStr = F("RAND"); } else if (i == 1 && channels[displayTab - 1].mode == 2) { valueStr = F("SEQ"); + } else if (i == 1 && channels[displayTab - 1].mode == 3) { + valueStr = F("SWING"); + } else if (i == 1 && channels[displayTab - 1].mode == 4) { + valueStr = F("GATE"); } else if (i == 2 && channels[displayTab - 1].mode == 0) { //SubDiv and offset valueStr = String(channels[displayTab - 1].offset) + F("/"); int PulsesPerStep; @@ -157,10 +161,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 && subDivs[channels[displayTab - 1].subDiv] > 0) { + } else if (i == 2 && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4) && 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 && subDivs[channels[displayTab - 1].subDiv] < 0) { + } else if (i == 2 && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4) && 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 @@ -195,7 +199,12 @@ void updateScreen() { valueStr = F("SKIP CHANCE"); } else if (channels[displayTab - 1].mode == 2) { valueStr = F("PATTERN"); - } + } else if (channels[displayTab - 1].mode == 3) { + valueStr = F("SWING"); + } else if (channels[displayTab - 1].mode == 4) { + valueStr = F("GATE"); + } + if ((!insideTab && shiftBtnPushed) || (insideTab && menuItem == 0)) { u8g2.drawButtonUTF8(leftOffset, 41, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 3, valueStr.c_str() ); } else { @@ -219,6 +228,10 @@ void updateScreen() { valueStr = F("B"); valueStr = valueStr + String(channels[displayTab - 1].seqPattern - 7); } + } else if (channels[displayTab - 1].mode == 3) { + valueStr = String(channels[displayTab - 1].swing) + "%"; + } else if (channels[displayTab - 1].mode == 4) { + valueStr = String(channels[displayTab - 1].gate) + "%"; } u8g2.setFont(stkL); if ((!insideTab && shiftBtnPushed) || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) {