Sequencer editor
This commit is contained in:
@ -25,7 +25,6 @@
|
|||||||
#define ANALOGUE_INPUT_2_PIN A6
|
#define ANALOGUE_INPUT_2_PIN A6
|
||||||
const byte outsPins[6] = { 7, 8, 10, 6, 9, 11 };
|
const byte outsPins[6] = { 7, 8, 10, 6, 9, 11 };
|
||||||
|
|
||||||
|
|
||||||
const int subDivs[17] = { -24, -12, -8, -6, -4, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 16, 32 }; //positive - divide, negative - multiply, 0 - off
|
const int subDivs[17] = { -24, -12, -8, -6, -4, -3, -2, 1, 2, 3, 4, 5, 6, 7, 8, 16, 32 }; //positive - divide, negative - multiply, 0 - off
|
||||||
|
|
||||||
byte bpm = 130;
|
byte bpm = 130;
|
||||||
@ -69,8 +68,9 @@ bool seqB5[16] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0};
|
|||||||
bool seqB6[16] = {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0};
|
bool seqB6[16] = {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0};
|
||||||
bool seqB7[16] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
bool seqB7[16] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
|
||||||
bool seqB8[16] = {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0};
|
bool seqB8[16] = {1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0};
|
||||||
bool *currentSeq;
|
|
||||||
byte currentStep = 0;
|
byte currentStep = 0;
|
||||||
|
byte stepNumSelected = 0;
|
||||||
|
bool *patternToEdit;
|
||||||
|
|
||||||
byte memCode = 'a'; //Change to different letter if you changed the data structure
|
byte memCode = 'a'; //Change to different letter if you changed the data structure
|
||||||
|
|
||||||
@ -100,7 +100,6 @@ byte displayScreen = 0; //0 - main, 1 - sequencer, 2 - settings
|
|||||||
bool playBtnPushed = false;
|
bool playBtnPushed = false;
|
||||||
bool shiftBtnPushed = false;
|
bool shiftBtnPushed = false;
|
||||||
|
|
||||||
|
|
||||||
int a1Input = 0;
|
int a1Input = 0;
|
||||||
int a2Input = 0;
|
int a2Input = 0;
|
||||||
|
|
||||||
@ -114,20 +113,21 @@ bool encPressRegistered;
|
|||||||
U8G2_SSD1306_128X64_NONAME_2_HW_I2C u8g2(U8G2_R2, SCL, SDA, U8X8_PIN_NONE);
|
U8G2_SSD1306_128X64_NONAME_2_HW_I2C u8g2(U8G2_R2, SCL, SDA, U8X8_PIN_NONE);
|
||||||
RotaryEncoder encoder(ENC_D1_PIN, ENC_D2_PIN, RotaryEncoder::LatchMode::TWO03);
|
RotaryEncoder encoder(ENC_D1_PIN, ENC_D2_PIN, RotaryEncoder::LatchMode::TWO03);
|
||||||
|
|
||||||
const uint8_t velvetscreen[416] U8G2_FONT_SECTION("velvetscreen") =
|
const uint8_t velvetscreen[437] U8G2_FONT_SECTION("velvetscreen") =
|
||||||
"\62\0\2\2\3\3\1\3\4\5\5\0\0\5\0\5\0\0\216\0\0\1\203 \4@:%\11m:*"
|
"\64\0\2\2\3\3\2\3\4\5\5\0\0\5\0\5\0\0\221\0\0\1\230 \4\200\134%\11\255tT"
|
||||||
"\251\134\251$(\6jn\252\14)\7j.\61%\5+\7\333ri%\0,\5Q*\2-\5K"
|
"R\271RI(\6\252\334T\31)\7\252\134bJ\12+\7\233\345\322J\0,\5\221T\4-\5\213"
|
||||||
"\63\3.\5I*\1/\6d\366\261\15\60\10lv*\232I\1\61\6k\62\262\65\62\11l\66\33"
|
"f\6.\5\211T\2/\6\244\354c\33\60\10\254\354T\64\223\2\61\7\353\354\222\254\6\62\11\254l"
|
||||||
"%\225G\0\63\11l\66\33%\215F\2\64\7l\66Q\16]\65\11l\66Co\64\22\0\66\11l"
|
"\66J*\217\0\63\11\254l\66J\32\215\4\64\10\254l\242\34\272\0\65\11\254l\206\336h$\0\66"
|
||||||
"v*\257\230\24\0\67\10l\66#\307:\2\70\11lv*&\25\223\2\71\11lv*\246\235\24\0"
|
"\11\254\354T^\61)\0\67\10\254lF\216u\4\70\11\254\354TL*&\5\71\11\254\354TL;"
|
||||||
":\5\331*)A\10lv*\216)\3B\11l\66+\216\24\207\0C\11lv*\352\230\24\0D"
|
")\0:\6\231UR\0A\10\254\354T\34S\6B\11\254lV\34)\216\4C\11\254\354T\324\61"
|
||||||
"\10l\66+\232#\1E\10l\66C\17=\2F\10l\66C\257\234\1G\10lv#\247\231\6H"
|
")\0D\10\254lV\64G\2E\10\254l\206\36z\4F\10\254l\206^\71\3G\11\254\354TN"
|
||||||
"\10l\66Q\216)\3I\5i*CJ\7l\366\265L\12K\11l\66Q%\231\312\0L\7l\66"
|
"\63)\0H\10\254l\242\34S\6I\6\251T\206\0J\10\254\354k\231\24\0K\11\254l\242J\62"
|
||||||
"\271=\2M\11m:y\255\244u\0N\11m:y\252$w\0O\10lv*\232I\1P\11l"
|
"\225\1L\7\254lr{\4M\11\255t\362ZI\353\0N\11\255t\362TI\356\0O\10\254\354T"
|
||||||
"\66+\216\224\63\0Q\10lv*Z\61\5R\10l\66+\216\324\14S\11lv##\215F\2T"
|
"\64\223\2P\11\254lV\34)g\0Q\10\254\354T\264b\12R\10\254lV\34\251\31S\11\254\354"
|
||||||
"\7k\62+\266\0U\10l\66\321\231\24\0V\11m:Y\247\62\345\10W\12m:Y%\225T\27"
|
"FF\32\215\4T\7\253dVl\1U\10\254l\242\63)\0V\11\255t\262Ne\312\21W\12\255"
|
||||||
"\0X\11l\66Q&\25e\0Y\12m:\71\325\31e\24\1Z\7k\62\63\225\3r\10k\62Q"
|
"t\262J*\251.\0X\11\254l\242L*\312\0Y\12\255tr\252\63\312(\2Z\7\253df*"
|
||||||
"\15\25\1t\6m:\377\21w\11mz\253R#\247\5x\6[\62\251\3\0\0\0\4\377\377\0";
|
"\7p\10\255\364V\266\323\2q\7\255\364\216\257\5r\10\253d\242\32*\2t\6\255t\376#w\11"
|
||||||
|
"\255\364V\245FN\13x\6\233dR\7\0\0\0\4\377\377\0";
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
@ -275,6 +275,7 @@ void sendTriggers() {
|
|||||||
|
|
||||||
//16th notes for sequencer
|
//16th notes for sequencer
|
||||||
if (sixteenthPulseCount == 0) {
|
if (sixteenthPulseCount == 0) {
|
||||||
|
bool *currentSeq;
|
||||||
for (byte i = 0; i < 6; i++) {
|
for (byte i = 0; i < 6; i++) {
|
||||||
if (channels[i].seqPattern == 0) {
|
if (channels[i].seqPattern == 0) {
|
||||||
currentSeq = seqA1;
|
currentSeq = seqA1;
|
||||||
|
|||||||
@ -9,12 +9,49 @@ void checkInputs() {
|
|||||||
encReleasedTime = millis();
|
encReleasedTime = millis();
|
||||||
|
|
||||||
if (encReleasedTime - encPressedTime < 500) { // press shorter than .5s is for entering the submenu
|
if (encReleasedTime - encPressedTime < 500) { // press shorter than .5s is for entering the submenu
|
||||||
if (insideTab == 0) {
|
if (!insideTab) {
|
||||||
insideTab = 1;
|
insideTab = 1;
|
||||||
|
} else if (insideTab && channels[displayTab - 1].mode == 2 && menuItem == 1) { //enter the pattern editor
|
||||||
|
if (channels[displayTab - 1].seqPattern == 0) {
|
||||||
|
patternToEdit = seqA1;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 1) {
|
||||||
|
patternToEdit = seqA2;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 2) {
|
||||||
|
patternToEdit = seqA3;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 3) {
|
||||||
|
patternToEdit = seqA4;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 4) {
|
||||||
|
patternToEdit = seqA5;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 5) {
|
||||||
|
patternToEdit = seqA6;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 6) {
|
||||||
|
patternToEdit = seqA7;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 7) {
|
||||||
|
patternToEdit = seqA8;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 8) {
|
||||||
|
patternToEdit = seqB1;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 9) {
|
||||||
|
patternToEdit = seqB2;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 10) {
|
||||||
|
patternToEdit = seqB3;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 11) {
|
||||||
|
patternToEdit = seqB4;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 12) {
|
||||||
|
patternToEdit = seqB5;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 13) {
|
||||||
|
patternToEdit = seqB6;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 14) {
|
||||||
|
patternToEdit = seqB7;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern == 15) {
|
||||||
|
patternToEdit = seqB8;
|
||||||
|
}
|
||||||
|
displayScreen = 1;
|
||||||
}
|
}
|
||||||
updateScreen();
|
updateScreen();
|
||||||
} else if (encReleasedTime - encPressedTime < 2000) { // longer press (<2s) is for navigating back. longer than 2s presses are ignored
|
} else if (encReleasedTime - encPressedTime < 2000) { // longer press (<2s) is for navigating back. longer than 2s presses are ignored
|
||||||
if (insideTab == 1) {
|
if (displayScreen != 0) {
|
||||||
|
displayScreen = 0;
|
||||||
|
} else if (insideTab == 1) {
|
||||||
insideTab = 0;
|
insideTab = 0;
|
||||||
menuItem = 0;
|
menuItem = 0;
|
||||||
}
|
}
|
||||||
@ -27,147 +64,156 @@ void checkInputs() {
|
|||||||
int encPosition = encoder.getPosition();
|
int encPosition = encoder.getPosition();
|
||||||
if (encPositionOld != encPosition) {
|
if (encPositionOld != encPosition) {
|
||||||
int change = encPositionOld - encPosition;
|
int change = encPositionOld - encPosition;
|
||||||
if (!insideTab && !shiftBtnPushed) { //Change tab
|
if (displayScreen == 0) {
|
||||||
displayTab = displayTab + change;
|
if (!insideTab && !shiftBtnPushed) { //Change tab
|
||||||
if (displayTab > 100) { //to address "negative" numbers
|
displayTab = displayTab + change;
|
||||||
displayTab = 0;
|
if (displayTab > 100) { //to address "negative" numbers
|
||||||
} else if (displayTab > 6) {
|
displayTab = 0;
|
||||||
displayTab = 6;
|
} else if (displayTab > 6) {
|
||||||
|
displayTab = 6;
|
||||||
|
}
|
||||||
|
} else if (!insideTab && shiftBtnPushed && displayTab == 0 && masterClockMode == 0) { //Change BPM
|
||||||
|
bpm = bpm + change;
|
||||||
|
if (bpm > MAXBPM) {
|
||||||
|
bpm = MAXBPM;
|
||||||
|
} else if (bpm < MINBPM) {
|
||||||
|
bpm = MINBPM;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
calculateBPMTiming();
|
||||||
|
} else if (!insideTab && shiftBtnPushed && displayTab != 0 && channels[displayTab - 1].mode == 0) { //Change Subdiv
|
||||||
|
channels[displayTab - 1].subDiv = channels[displayTab - 1].subDiv - change;
|
||||||
|
if (channels[displayTab - 1].subDiv > 100) {
|
||||||
|
channels[displayTab - 1].subDiv = 0;
|
||||||
|
} if (channels[displayTab - 1].subDiv > (sizeof(subDivs) / sizeof(int)) - 1) {
|
||||||
|
channels[displayTab - 1].subDiv = (sizeof(subDivs) / sizeof(int)) - 1;
|
||||||
|
}
|
||||||
|
if (!isPlaying) {
|
||||||
|
calculateCycles();
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
} else if (!insideTab && shiftBtnPushed && displayTab != 0 && channels[displayTab - 1].mode == 1) { //Change Random
|
||||||
|
channels[displayTab - 1].random = channels[displayTab - 1].random + change;
|
||||||
|
if (channels[displayTab - 1].random > 100) {
|
||||||
|
channels[displayTab - 1].random = 0;
|
||||||
|
} else if (channels[displayTab - 1].random > 9) {
|
||||||
|
channels[displayTab - 1].random = 9;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
} else if (!insideTab && shiftBtnPushed && displayTab != 0 && channels[displayTab - 1].mode == 2) { //Change SEQ pattern
|
||||||
|
channels[displayTab - 1].seqPattern = channels[displayTab - 1].seqPattern + change;
|
||||||
|
if (channels[displayTab - 1].seqPattern > 100) {
|
||||||
|
channels[displayTab - 1].seqPattern = 0;
|
||||||
|
} else if (channels[displayTab - 1].seqPattern > 15) {
|
||||||
|
channels[displayTab - 1].seqPattern = 15;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
}
|
}
|
||||||
} else if (!insideTab && shiftBtnPushed && displayTab == 0 && masterClockMode == 0) { //Change BPM
|
else if (insideTab && !shiftBtnPushed) {
|
||||||
bpm = bpm + change;
|
menuItem = menuItem + change;
|
||||||
if (bpm > MAXBPM) {
|
if (menuItem > 100) { //for "negative" values
|
||||||
bpm = MAXBPM;
|
menuItem = 0;
|
||||||
} else if (bpm < MINBPM) {
|
} else if (menuItem > lastMenuItem) {
|
||||||
bpm = MINBPM;
|
menuItem = lastMenuItem;
|
||||||
|
}
|
||||||
|
} else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 0) { //Master Clock Mode
|
||||||
|
masterClockMode = masterClockMode + change;
|
||||||
|
if (masterClockMode > 100) {
|
||||||
|
masterClockMode = 0;
|
||||||
|
} else if (masterClockMode > 1) {
|
||||||
|
masterClockMode = 1;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
} else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 1) { //Modulation channel
|
||||||
|
bpmModulationChannel = bpmModulationChannel + change;
|
||||||
|
if (bpmModulationChannel == 0 || bpmModulationChannel == 1) {
|
||||||
|
bpmModulationRange = 1;
|
||||||
|
} else if (bpmModulationChannel > 100) {
|
||||||
|
bpmModulationRange = 0;
|
||||||
|
bpmModulationChannel = 255;
|
||||||
|
} else if (bpmModulationChannel > 1) {
|
||||||
|
bpmModulationChannel = 1;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
} else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 2) { //Modulation range
|
||||||
|
bpmModulationRange = bpmModulationRange + change;
|
||||||
|
if (bpmModulationRange == 0) {
|
||||||
|
bpmModulationRange = 1;
|
||||||
|
} else if (bpmModulationRange > 100) {
|
||||||
|
bpmModulationRange = 1;
|
||||||
|
} else if (bpmModulationRange > 5) { //50bpm
|
||||||
|
bpmModulationRange = 5;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 0) { //Channel Mode
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 1 && channels[displayTab - 1].mode == 0) { //Offset
|
||||||
|
channels[displayTab - 1].offset = channels[displayTab - 1].offset + change;
|
||||||
|
if (channels[displayTab - 1].offset > 100) {
|
||||||
|
channels[displayTab - 1].offset = 0;
|
||||||
|
} else if (channels[displayTab - 1].offset > channelPulsesPerCycle[displayTab-1]) {
|
||||||
|
channels[displayTab - 1].offset = channelPulsesPerCycle[displayTab-1];
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 1 && channels[displayTab - 1].mode == 1) { //SUBDIV for RANDOM
|
||||||
|
channels[displayTab - 1].subDiv = channels[displayTab - 1].subDiv - change;
|
||||||
|
if (channels[displayTab - 1].subDiv > 200) {
|
||||||
|
channels[displayTab - 1].subDiv = 0;
|
||||||
|
} else if (channels[displayTab - 1].subDiv > (sizeof(subDivs) / sizeof(byte)) - 1) {
|
||||||
|
channels[displayTab - 1].subDiv = (sizeof(subDivs) / sizeof(byte)) - 1;
|
||||||
|
}
|
||||||
|
if (!isPlaying) {
|
||||||
|
calculateCycles();
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 0) { //CV1 for CLK
|
||||||
|
channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change;
|
||||||
|
if (channels[displayTab - 1].CV1Target > 100) {
|
||||||
|
channels[displayTab - 1].CV1Target = 0;
|
||||||
|
} else if (channels[displayTab - 1].CV1Target > 1) {
|
||||||
|
channels[displayTab - 1].CV1Target = 1;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
}
|
}
|
||||||
saveState();
|
else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 0) { //CV2 for CLK
|
||||||
calculateBPMTiming();
|
channels[displayTab - 1].CV2Target = channels[displayTab - 1].CV2Target + change;
|
||||||
} else if (!insideTab && shiftBtnPushed && displayTab != 0 && channels[displayTab - 1].mode == 0) { //Change Subdiv
|
if (channels[displayTab - 1].CV2Target > 100) {
|
||||||
channels[displayTab - 1].subDiv = channels[displayTab - 1].subDiv - change;
|
channels[displayTab - 1].CV2Target = 0;
|
||||||
if (channels[displayTab - 1].subDiv > 100) {
|
} else if (channels[displayTab - 1].CV2Target > 1) {
|
||||||
channels[displayTab - 1].subDiv = 0;
|
channels[displayTab - 1].CV2Target = 1;
|
||||||
} if (channels[displayTab - 1].subDiv > (sizeof(subDivs) / sizeof(int)) - 1) {
|
}
|
||||||
channels[displayTab - 1].subDiv = (sizeof(subDivs) / sizeof(int)) - 1;
|
saveState();
|
||||||
|
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 1) { //CV1 for RND
|
||||||
|
channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change;
|
||||||
|
if (channels[displayTab - 1].CV1Target > 100) {
|
||||||
|
channels[displayTab - 1].CV1Target = 0;
|
||||||
|
} else if (channels[displayTab - 1].CV1Target > 2) {
|
||||||
|
channels[displayTab - 1].CV1Target = 2;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
}
|
}
|
||||||
if (!isPlaying) {
|
else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 1) { //CV2 for RND
|
||||||
calculateCycles();
|
channels[displayTab - 1].CV2Target = channels[displayTab - 1].CV2Target + change;
|
||||||
|
if (channels[displayTab - 1].CV2Target > 100) {
|
||||||
|
channels[displayTab - 1].CV2Target = 0;
|
||||||
|
} else if (channels[displayTab - 1].CV2Target > 2) {
|
||||||
|
channels[displayTab - 1].CV2Target = 2;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
}
|
}
|
||||||
saveState();
|
} else if (displayScreen == 1) {
|
||||||
} else if (!insideTab && shiftBtnPushed && displayTab != 0 && channels[displayTab - 1].mode == 1) { //Change Random
|
stepNumSelected = stepNumSelected + change;
|
||||||
channels[displayTab - 1].random = channels[displayTab - 1].random + change;
|
if (stepNumSelected > 100) {
|
||||||
if (channels[displayTab - 1].random > 100) {
|
stepNumSelected = 15;
|
||||||
channels[displayTab - 1].random = 0;
|
} else if (stepNumSelected > 15) {
|
||||||
} else if (channels[displayTab - 1].random > 9) {
|
stepNumSelected = 0;
|
||||||
channels[displayTab - 1].random = 9;
|
|
||||||
}
|
}
|
||||||
saveState();
|
|
||||||
} else if (!insideTab && shiftBtnPushed && displayTab != 0 && channels[displayTab - 1].mode == 2) { //Change SEQ pattern
|
|
||||||
channels[displayTab - 1].seqPattern = channels[displayTab - 1].seqPattern + change;
|
|
||||||
if (channels[displayTab - 1].seqPattern > 100) {
|
|
||||||
channels[displayTab - 1].seqPattern = 0;
|
|
||||||
} else if (channels[displayTab - 1].seqPattern > 16) {
|
|
||||||
channels[displayTab - 1].seqPattern = 16;
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
}
|
|
||||||
else if (insideTab && !shiftBtnPushed) {
|
|
||||||
menuItem = menuItem + change;
|
|
||||||
if (menuItem > 100) { //for "negative" values
|
|
||||||
menuItem = 0;
|
|
||||||
} else if (menuItem > lastMenuItem) {
|
|
||||||
menuItem = lastMenuItem;
|
|
||||||
}
|
|
||||||
} else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 0) { //Master Clock Mode
|
|
||||||
masterClockMode = masterClockMode + change;
|
|
||||||
if (masterClockMode > 100) {
|
|
||||||
masterClockMode = 0;
|
|
||||||
} else if (masterClockMode > 1) {
|
|
||||||
masterClockMode = 1;
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
} else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 1) { //Modulation channel
|
|
||||||
bpmModulationChannel = bpmModulationChannel + change;
|
|
||||||
if (bpmModulationChannel == 0 || bpmModulationChannel == 1) {
|
|
||||||
bpmModulationRange = 1;
|
|
||||||
} else if (bpmModulationChannel > 100) {
|
|
||||||
bpmModulationRange = 0;
|
|
||||||
bpmModulationChannel = 255;
|
|
||||||
} else if (bpmModulationChannel > 1) {
|
|
||||||
bpmModulationChannel = 1;
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
} else if (insideTab && shiftBtnPushed && displayTab == 0 && menuItem == 2) { //Modulation range
|
|
||||||
bpmModulationRange = bpmModulationRange + change;
|
|
||||||
if (bpmModulationRange == 0) {
|
|
||||||
bpmModulationRange = 1;
|
|
||||||
} else if (bpmModulationRange > 100) {
|
|
||||||
bpmModulationRange = 1;
|
|
||||||
} else if (bpmModulationRange > 5) { //50bpm
|
|
||||||
bpmModulationRange = 5;
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 0) { //Channel Mode
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 1 && channels[displayTab - 1].mode == 0) { //Offset
|
|
||||||
channels[displayTab - 1].offset = channels[displayTab - 1].offset + change;
|
|
||||||
if (channels[displayTab - 1].offset > 100) {
|
|
||||||
channels[displayTab - 1].offset = 0;
|
|
||||||
} else if (channels[displayTab - 1].offset > channelPulsesPerCycle[displayTab-1]) {
|
|
||||||
channels[displayTab - 1].offset = channelPulsesPerCycle[displayTab-1];
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 1 && channels[displayTab - 1].mode == 1) { //SUBDIV for RANDOM
|
|
||||||
channels[displayTab - 1].subDiv = channels[displayTab - 1].subDiv - change;
|
|
||||||
if (channels[displayTab - 1].subDiv > 200) {
|
|
||||||
channels[displayTab - 1].subDiv = 0;
|
|
||||||
} else if (channels[displayTab - 1].subDiv > (sizeof(subDivs) / sizeof(byte)) - 1) {
|
|
||||||
channels[displayTab - 1].subDiv = (sizeof(subDivs) / sizeof(byte)) - 1;
|
|
||||||
}
|
|
||||||
if (!isPlaying) {
|
|
||||||
calculateCycles();
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 0) { //CV1 for CLK
|
|
||||||
channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change;
|
|
||||||
if (channels[displayTab - 1].CV1Target > 100) {
|
|
||||||
channels[displayTab - 1].CV1Target = 0;
|
|
||||||
} else if (channels[displayTab - 1].CV1Target > 1) {
|
|
||||||
channels[displayTab - 1].CV1Target = 1;
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
}
|
|
||||||
else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 0) { //CV2 for CLK
|
|
||||||
channels[displayTab - 1].CV2Target = channels[displayTab - 1].CV2Target + change;
|
|
||||||
if (channels[displayTab - 1].CV2Target > 100) {
|
|
||||||
channels[displayTab - 1].CV2Target = 0;
|
|
||||||
} else if (channels[displayTab - 1].CV2Target > 1) {
|
|
||||||
channels[displayTab - 1].CV2Target = 1;
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
} else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 2 && channels[displayTab - 1].mode == 1) { //CV1 for RND
|
|
||||||
channels[displayTab - 1].CV1Target = channels[displayTab - 1].CV1Target + change;
|
|
||||||
if (channels[displayTab - 1].CV1Target > 100) {
|
|
||||||
channels[displayTab - 1].CV1Target = 0;
|
|
||||||
} else if (channels[displayTab - 1].CV1Target > 2) {
|
|
||||||
channels[displayTab - 1].CV1Target = 2;
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
}
|
|
||||||
else if (insideTab && shiftBtnPushed && displayTab != 0 && menuItem == 3 && channels[displayTab - 1].mode == 1) { //CV2 for RND
|
|
||||||
channels[displayTab - 1].CV2Target = channels[displayTab - 1].CV2Target + change;
|
|
||||||
if (channels[displayTab - 1].CV2Target > 100) {
|
|
||||||
channels[displayTab - 1].CV2Target = 0;
|
|
||||||
} else if (channels[displayTab - 1].CV2Target > 2) {
|
|
||||||
channels[displayTab - 1].CV2Target = 2;
|
|
||||||
}
|
|
||||||
saveState();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
updateScreen();
|
updateScreen();
|
||||||
@ -190,6 +236,10 @@ void checkInputs() {
|
|||||||
//shift button
|
//shift button
|
||||||
if (!digitalRead(SHIFT_BTN_PIN) && !shiftBtnPushed) {
|
if (!digitalRead(SHIFT_BTN_PIN) && !shiftBtnPushed) {
|
||||||
shiftBtnPushed = true;
|
shiftBtnPushed = true;
|
||||||
|
if (displayScreen == 1) {
|
||||||
|
patternToEdit[stepNumSelected] = !patternToEdit[stepNumSelected];
|
||||||
|
saveState();
|
||||||
|
}
|
||||||
updateScreen();
|
updateScreen();
|
||||||
} else if (digitalRead(SHIFT_BTN_PIN) && shiftBtnPushed) {
|
} else if (digitalRead(SHIFT_BTN_PIN) && shiftBtnPushed) {
|
||||||
shiftBtnPushed = false;
|
shiftBtnPushed = false;
|
||||||
|
|||||||
@ -258,6 +258,30 @@ void updateScreen() {
|
|||||||
u8g2.drawUTF8(122, yPos, "r");
|
u8g2.drawUTF8(122, yPos, "r");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Edit Pattern
|
||||||
|
else if (displayScreen == 1) {
|
||||||
|
|
||||||
|
//patternToEdit = seqA4;
|
||||||
|
for (byte i = 0; i < 8; i++) {
|
||||||
|
if (patternToEdit[i]) {
|
||||||
|
u8g2.drawUTF8(19 + i*12, 20, "q");
|
||||||
|
} else {
|
||||||
|
u8g2.drawUTF8(19 + i*12, 20, "p");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (byte i = 8; i < 16; i++) {
|
||||||
|
if (patternToEdit[i]) {
|
||||||
|
u8g2.drawUTF8(19 + (i-8)*12, 40, "q");
|
||||||
|
} else {
|
||||||
|
u8g2.drawUTF8(19 + (i-8)*12, 40, "p");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (stepNumSelected < 8 ) {
|
||||||
|
u8g2.drawFrame(16 + stepNumSelected * 12, 12, 11, 11);
|
||||||
|
} else {
|
||||||
|
u8g2.drawFrame(16 + (stepNumSelected-8) * 12, 32, 11, 11);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
} while ( u8g2.nextPage() );
|
} while ( u8g2.nextPage() );
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user