From 7d9589bf4010333c892bd7e55b8d8e1ea7f1ce64 Mon Sep 17 00:00:00 2001 From: --global <--global> Date: Mon, 8 May 2023 01:50:59 +0300 Subject: [PATCH] added offset (still needs some work) --- software/GToE/GToE.ino | 52 ++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/software/GToE/GToE.ino b/software/GToE/GToE.ino index b3e422a..8a0c80f 100644 --- a/software/GToE/GToE.ino +++ b/software/GToE/GToE.ino @@ -32,15 +32,16 @@ struct channel { unsigned int random; bool modulationChannel; //0 - A1, 1 - A2 int modulationRange; + unsigned int offset; }; channel channels[6] = { //array of channel settings - { 8, 0, 0, 0 }, - { 8, 0, 0, 0 }, - { 8, 0, 0, 0 }, - { 8, 0, 0, 0 }, - { 8, 0, 0, 0 }, - { 8, 0, 0, 0 } + { 8, 0, 0, 0, 0 }, + { 8, 0, 0, 0, 0 }, + { 8, 0, 0, 0, 0 }, + { 8, 0, 0, 0, 0 }, + { 8, 0, 0, 0, 0 }, + { 8, 0, 0, 0, 0 } }; int channelPulseCount[6]; @@ -98,12 +99,12 @@ void setup() { //Serial.begin(9600); //check last bit in eeprom to know if settings were stored - if (EEPROM.read(1023) == 'H') { + if (EEPROM.read(1023) == 'K') { EEPROM.get(0, bpm); EEPROM.get(sizeof(int), channels); } else { saveState(); - EEPROM.write(1023, 'H'); + EEPROM.write(1023, 'K'); } pinMode(ENC_BTN_PIN, INPUT_PULLUP); @@ -116,6 +117,8 @@ void setup() { pinMode(outsPins[i], OUTPUT); } + calculateCycles(); + display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS); //Splash screen @@ -198,7 +201,7 @@ void sendTriggers() { //multiplier for (int i = 0; i<6; i++) { - if (channelPulseCount[i] == 0) { //Pulse on 0 + if (channelPulseCount[i] == channels[i].offset) { //Pulse on 0 if (channels[i].random == 0 || random(10) > channels[i].random) { //random digitalWrite(outsPins[i], HIGH); } @@ -211,6 +214,16 @@ void sendTriggers() { } } +void calculateCycles() { + for (int i = 0; i<6; i++) { + if (playingModes[i] > 0) { + channelPulsesPerCycle[i] = (playingModes[i] * PPQN) - 1; + } else { + channelPulsesPerCycle[i] = (PPQN / abs(playingModes[i])) - 1; + } + } +} + void externalClock() { externalPulseCounted = false; } @@ -220,7 +233,6 @@ void updateTiming() { pulsePeriod = 60000 / (bpm * PPQN); } else if (masterClockMode == 2) { //for external beat clock pulsePeriod = (newExtPulseTime - lastExtPulseTime) / PPQN; - //Serial.println("pulsePeriod"); } } @@ -253,7 +265,7 @@ void checkInputs() { if (displayTab>6) { displayTab = 0; } - } else if (insideTab < 2) { + } else if (insideTab < 3) { insideTab ++; } else { insideTab = 1; @@ -308,7 +320,14 @@ void checkInputs() { channels[displayTab-1].modulationChannel = !channels[displayTab-1].modulationChannel; channels[displayTab-1].modulationRange = 0; } - } + } else if (displayTab != 0 && insideTab == 3) { //offset + channels[displayTab-1].offset = channels[displayTab-1].offset + change; + if (channels[displayTab-1].offset >= channelPulsesPerCycle[displayTab-1]) { + channels[displayTab-1].offset = channelPulsesPerCycle[displayTab-1]; + } else if (channels[displayTab-1].offset <= 0 ) { + channels[displayTab-1].offset = 0; + } + } updateScreen(); encPositionOld = encPosition; } @@ -434,6 +453,15 @@ void updateScreen() { } else { display.print(F("Off ")); } + if (insideTab == 3) { + display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); + } else { + display.setTextColor(SSD1306_WHITE); + } + display.setCursor(58,44); + display.print(F(" OFT:")); + display.print(channels[displayTab-1].offset); + display.print(F(" ")); } display.display();