From 0a4fba78705ce7e6de51f12ac9eeb3966480e5d6 Mon Sep 17 00:00:00 2001 From: Oleksiy Date: Sat, 26 Aug 2023 22:20:58 +0300 Subject: [PATCH] Some fixes related to offset --- Software/Gravity/Gravity.ino | 3 --- Software/Gravity/Interactions.ino | 12 +++++++++++- Software/Gravity/UI.ino | 8 +++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/Software/Gravity/Gravity.ino b/Software/Gravity/Gravity.ino index 8a1613b..3c77656 100644 --- a/Software/Gravity/Gravity.ino +++ b/Software/Gravity/Gravity.ino @@ -405,9 +405,6 @@ void calculateCycles() { } else if (channels[i].mode == 2) { //Sequencer plays 1/16th channelPulsesPerCycle[i] = (PPQN / 4) - 1; } - if (channels[i].offset > channelPulsesPerCycle[i]) { - channels[i].offset = channelPulsesPerCycle[i]; - } } } diff --git a/Software/Gravity/Interactions.ino b/Software/Gravity/Interactions.ino index 7e72fe2..9d95714 100644 --- a/Software/Gravity/Interactions.ino +++ b/Software/Gravity/Interactions.ino @@ -112,8 +112,18 @@ void checkInputs() { || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) && displayTab != 0 - && channels[displayTab - 1].mode == 0) { //Change Subdiv + && channels[displayTab - 1].mode == 0) { //Change Subdiv and reset offset channels[displayTab - 1].subDiv = channels[displayTab - 1].subDiv - change; + //channels[displayTab - 1].offset = 0; + int PulsesPerStep; + if (subDivs[channels[displayTab - 1].subDiv] < 0) { + PulsesPerStep = PPQN / subDivs[channels[displayTab - 1].subDiv] * -1 ; + } else { + PulsesPerStep = subDivs[channels[displayTab - 1].subDiv] * PPQN; + } + if (channels[displayTab - 1].offset >= PulsesPerStep) { + channels[displayTab - 1].offset = PulsesPerStep - 1; + } if (channels[displayTab - 1].subDiv > 100) { channels[displayTab - 1].subDiv = 0; } if (channels[displayTab - 1].subDiv > (sizeof(subDivs) / sizeof(int)) - 1) { diff --git a/Software/Gravity/UI.ino b/Software/Gravity/UI.ino index 333b095..af3aae9 100644 --- a/Software/Gravity/UI.ino +++ b/Software/Gravity/UI.ino @@ -147,7 +147,13 @@ void updateScreen() { valueStr = "SEQ"; } else if (i == 2 && channels[displayTab - 1].mode == 0) { //SubDiv and offset valueStr = String(channels[displayTab - 1].offset) + "/"; - valueStr = valueStr + String(channelPulsesPerCycle[displayTab-1]+1); + int PulsesPerStep; + if (subDivs[channels[displayTab - 1].subDiv] < 0) { + PulsesPerStep = PPQN / subDivs[channels[displayTab - 1].subDiv] * -1 ; + } else { + 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) { valueStr = "/" + String(subDivs[channels[displayTab - 1].subDiv]); } else if (i == 2 && channels[displayTab - 1].mode == 1 && subDivs[channels[displayTab - 1].subDiv] < 0) {