From 74acd4efe154e7111a8844d7bdd718ef4d9e0207 Mon Sep 17 00:00:00 2001 From: Oleksiy Date: Tue, 7 Feb 2023 01:07:29 +0200 Subject: [PATCH] chennel settings now stored in objects --- software/GToE/GToE.ino | 113 ++++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 53 deletions(-) diff --git a/software/GToE/GToE.ino b/software/GToE/GToE.ino index 51ce440..aaaed6d 100644 --- a/software/GToE/GToE.ino +++ b/software/GToE/GToE.ino @@ -8,7 +8,7 @@ #define SCREEN_ADDRESS 0x3C #define PPQN 24 -#define PULSE_LENGTH 5 +#define PULSE_LENGTH 5 //ms #define MAXBPM 250 //250 at 24ppqn with 5ms pulse will be 50/50 square wave #define MINBPM 20 @@ -23,21 +23,33 @@ const int outsPins[6] = {5, 6, 7, 8, 9, 10}; -const int outsModes[18] = {-24, -16, -12, -8, -6, -4, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 16, 32}; //positive - divide, negative - multiply, 0 - off -int outsModeIndex[6] = {8, 9, 10, 7, 2, 6}; //8 - 1 -bool outsRandom[6] = {0,0,0,0,0,1}; -bool outsMod[6] = {0,0,0,0,1,1}; //0 - A1, 1 - A2 -int outsModRange[6] = {0,0,0,0,4,-4}; -int outsPeriods[6]; -int outsClocksCounts[6]; -int outsModesPlay[6]; //actual channel modes array updated from outsModeIndex each beat - -bool clockMode; -bool clockModeOld; -int inputMode; //clock, reset, start/stop -int clockCount = 0; +const int clockModes[18] = {-24, -16, -12, -8, -6, -4, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 16, 32}; //positive - divide, negative - multiply, 0 - off int bpm = 130; + +struct channel { + unsigned int mode; + bool random; + bool modulationChannel; //0 - A1, 1 - A2 + int modulationRange; +}; + +channel channels[6] = { //array of channel settings + { 8, 0, 0, 0 }, + { 9, 0, 0, 0 }, + {10, 0, 0, 0 }, + { 7, 1, 0, 0 }, + { 2, 0, 1, 4 }, + { 6, 1, 1,-4 }, +}; + +int outsClocksCounts[6]; +int playingModes[6]; //actual channel modes array updated from channels each beat + +bool clockMode; //internal/external. needs to be renamed +bool clockModeOld; +int clockCount = 0; + int pulseClockCount = 0; int pulseCount = 0; int pulsePeriod; @@ -54,8 +66,6 @@ bool playBtnPushed = false; int a1Input = 0; int a2Input = 0; -bool changesSaved; - int encPositionOld = 0; unsigned long encPressedTime; unsigned long encReleasedTime; @@ -66,6 +76,8 @@ RotaryEncoder encoder(ENC_D1_PIN, ENC_D2_PIN, RotaryEncoder::LatchMode::TWO03); void setup() { Serial.begin(9600); + channels[2].mode = 5; + Serial.println(channels[2].mode); pinMode(INPUT_CONNECTED_PIN, INPUT_PULLUP); pinMode(ENC_BTN_PIN, INPUT_PULLUP); @@ -99,29 +111,26 @@ void internalClock() { //modulation for (int i = 0; i<6; i++) { int mod; - if (!outsMod[i]) { + if (!channels[i].modulationChannel) { mod = a1Input; } else { mod = a2Input; } - mod = map (mod, 0, 1023, 0, outsModRange[i]); - outsModesPlay[i] = outsModes[outsModeIndex[i] - mod]; //subtrackting because the innitiall array is backwards + mod = map (mod, 0, 1023, 0, channels[i].modulationRange); + playingModes[i] = clockModes[channels[i].mode - mod]; //subtrackting because the innitiall array is backwards } //divider if (pulseCount == 0 && !beatCounted) { for (int i = 0; i<6; i++) { - outsModesPlay[i] = outsModes[outsModeIndex[i]]; //updated here to prevent sync problems for multipliers - /*if (a1Input != 0 && i == 5) { //TESTING THE MODULATION ON 6th CHANNEL - outsModesPlay[i] = outsModes[outsModeIndex[i] - a1Input]; - }*/ - if (outsModesPlay[i] > 0) { + playingModes[i] = clockModes[channels[i].mode]; //updated here to prevent sync problems for multipliers + if (playingModes[i] > 0) { if (outsClocksCounts[i] == 0) { //Pulse on 0 - if (outsRandom[i] == 0 || (outsRandom[i] == 1 && random(2))) { //random + if (channels[i].random == 0 || (channels[i].random == 1 && random(2))) { //random digitalWrite(outsPins[i], HIGH); } } - if (outsClocksCounts[i] < (outsModesPlay[i] - 1)) { + if (outsClocksCounts[i] < (playingModes[i] - 1)) { outsClocksCounts[i]++; } else { outsClocksCounts[i] = 0; @@ -133,13 +142,13 @@ void internalClock() { //multiplier for (int i = 0; i<6; i++) { - if (outsModesPlay[i] < 0) { + if (playingModes[i] < 0) { if (outsClocksCounts[i] == 0) { //Pulse on 0 - if (outsRandom[i] == 0 || (outsRandom[i] == 1 && random(2))) { //random + if (channels[i].random == 0 || (channels[i].random == 1 && random(2))) { //random digitalWrite(outsPins[i], HIGH); } } - if (outsClocksCounts[i] < (PPQN / abs(outsModesPlay[i])) - 1) { + if (outsClocksCounts[i] < (PPQN / abs(playingModes[i])) - 1) { outsClocksCounts[i]++; } else { outsClocksCounts[i] = 0; @@ -200,7 +209,7 @@ void checkInputs() { } else if (digitalRead(ENC_BTN_PIN) && encPressRegistered) { encPressRegistered = false; encReleasedTime = millis(); - Serial.println(encReleasedTime - encPressedTime); + //Serial.println(encReleasedTime - encPressedTime); if (encReleasedTime - encPressedTime < 500) { // press shorter than .5s switches tabs if (insideTab == 0) { @@ -221,8 +230,6 @@ void checkInputs() { } else { insideTab = 0; } - - //outsRandom[displayTab-1] = !outsRandom[displayTab-1]; updateScreen(); } } @@ -241,20 +248,20 @@ void checkInputs() { } updateTiming(); } else if (displayTab != 0 && insideTab == 0) { - outsModeIndex[displayTab-1] = outsModeIndex[displayTab-1] - change; - if (outsModeIndex[displayTab-1] < 0) { - outsModeIndex[displayTab-1] = 0; - } else if (outsModeIndex[displayTab-1] > (sizeof(outsModes)/sizeof(int)) - 1) { - outsModeIndex[displayTab-1] = (sizeof(outsModes)/sizeof(int)) - 1; + channels[displayTab-1].mode = channels[displayTab-1].mode - change; + if (channels[displayTab-1].mode < 0) { + channels[displayTab-1].mode = 0; + } else if (channels[displayTab-1].mode > (sizeof(clockModes)/sizeof(int)) - 1) { + channels[displayTab-1].mode = (sizeof(clockModes)/sizeof(int)) - 1; } needToResetChannel = displayTab-1; } else if (displayTab != 0 && insideTab == 1) { //random - outsRandom[displayTab-1] = !outsRandom[displayTab-1]; + channels[displayTab-1].random = !channels[displayTab-1].random; } else if (displayTab != 0 && insideTab == 2) { //modulation - outsModRange[displayTab-1] = outsModRange[displayTab-1] + change; - if (outsModRange[displayTab-1] > 6 || outsModRange[displayTab-1] < -6) { - outsMod[displayTab-1] = !outsMod[displayTab-1]; - outsModRange[displayTab-1] = 0; + channels[displayTab-1].modulationRange = channels[displayTab-1].modulationRange + change; + if (channels[displayTab-1].modulationRange > 6 || channels[displayTab-1].modulationRange < -6) { + channels[displayTab-1].modulationChannel = !channels[displayTab-1].modulationChannel; + channels[displayTab-1].modulationRange = 0; } } updateScreen(); @@ -321,14 +328,14 @@ void updateScreen() { display.print(bpm); display.println(F("bpm")); } else { - if (outsModes[outsModeIndex[displayTab-1]] == 0) { + if (clockModes[channels[displayTab-1].mode] == 0) { display.print(F(" OFF")); - } else if (outsModes[outsModeIndex[displayTab-1]]>0) { + } else if (clockModes[channels[displayTab-1].mode]>0) { display.print(F(" /")); - display.print(abs(outsModes[outsModeIndex[displayTab-1]])); + display.print(abs(clockModes[channels[displayTab-1].mode])); } else { display.print(F(" x")); - display.print(abs(outsModes[outsModeIndex[displayTab-1]])); + display.print(abs(clockModes[channels[displayTab-1].mode])); } } display.println(); @@ -344,7 +351,7 @@ void updateScreen() { display.setTextColor(SSD1306_WHITE); } display.print(F(" RND:")); - if (outsRandom[displayTab-1]) { + if (channels[displayTab-1].random) { display.print(F("On ")); } else { display.print(F("Off ")); @@ -356,19 +363,19 @@ void updateScreen() { display.setTextColor(SSD1306_WHITE); } display.print(F(" MOD:")); - if (outsMod[displayTab-1] && outsModRange[displayTab-1] != 0) { + if (channels[displayTab-1].modulationChannel && channels[displayTab-1].modulationRange != 0) { display.print(F("A2 ")); - if (outsModRange[displayTab-1] > 0) { + if (channels[displayTab-1].modulationRange > 0) { display.print(F("+")); } - display.print(outsModRange[displayTab-1]); + display.print(channels[displayTab-1].modulationRange); display.print(F(" ")); - } else if (!outsMod[displayTab-1] && outsModRange[displayTab-1] != 0) { + } else if (!channels[displayTab-1].modulationChannel && channels[displayTab-1].modulationRange != 0) { display.print(F("A1 ")); - if (outsModRange[displayTab-1] > 0) { + if (channels[displayTab-1].modulationRange > 0) { display.print(F("+")); } - display.print(outsModRange[displayTab-1]); + display.print(channels[displayTab-1].modulationRange); display.print(F(" ")); } else { display.print(F("Off "));