Sequencer editor
This commit is contained in:
@ -25,7 +25,6 @@
|
||||
#define ANALOGUE_INPUT_2_PIN A6
|
||||
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
|
||||
|
||||
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 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 *currentSeq;
|
||||
byte currentStep = 0;
|
||||
byte stepNumSelected = 0;
|
||||
bool *patternToEdit;
|
||||
|
||||
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 shiftBtnPushed = false;
|
||||
|
||||
|
||||
int a1Input = 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);
|
||||
RotaryEncoder encoder(ENC_D1_PIN, ENC_D2_PIN, RotaryEncoder::LatchMode::TWO03);
|
||||
|
||||
const uint8_t velvetscreen[416] 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:*"
|
||||
"\251\134\251$(\6jn\252\14)\7j.\61%\5+\7\333ri%\0,\5Q*\2-\5K"
|
||||
"\63\3.\5I*\1/\6d\366\261\15\60\10lv*\232I\1\61\6k\62\262\65\62\11l\66\33"
|
||||
"%\225G\0\63\11l\66\33%\215F\2\64\7l\66Q\16]\65\11l\66Co\64\22\0\66\11l"
|
||||
"v*\257\230\24\0\67\10l\66#\307:\2\70\11lv*&\25\223\2\71\11lv*\246\235\24\0"
|
||||
":\5\331*)A\10lv*\216)\3B\11l\66+\216\24\207\0C\11lv*\352\230\24\0D"
|
||||
"\10l\66+\232#\1E\10l\66C\17=\2F\10l\66C\257\234\1G\10lv#\247\231\6H"
|
||||
"\10l\66Q\216)\3I\5i*CJ\7l\366\265L\12K\11l\66Q%\231\312\0L\7l\66"
|
||||
"\271=\2M\11m:y\255\244u\0N\11m:y\252$w\0O\10lv*\232I\1P\11l"
|
||||
"\66+\216\224\63\0Q\10lv*Z\61\5R\10l\66+\216\324\14S\11lv##\215F\2T"
|
||||
"\7k\62+\266\0U\10l\66\321\231\24\0V\11m:Y\247\62\345\10W\12m:Y%\225T\27"
|
||||
"\0X\11l\66Q&\25e\0Y\12m:\71\325\31e\24\1Z\7k\62\63\225\3r\10k\62Q"
|
||||
"\15\25\1t\6m:\377\21w\11mz\253R#\247\5x\6[\62\251\3\0\0\0\4\377\377\0";
|
||||
const uint8_t velvetscreen[437] U8G2_FONT_SECTION("velvetscreen") =
|
||||
"\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"
|
||||
"R\271RI(\6\252\334T\31)\7\252\134bJ\12+\7\233\345\322J\0,\5\221T\4-\5\213"
|
||||
"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"
|
||||
"\66J*\217\0\63\11\254l\66J\32\215\4\64\10\254l\242\34\272\0\65\11\254l\206\336h$\0\66"
|
||||
"\11\254\354T^\61)\0\67\10\254lF\216u\4\70\11\254\354TL*&\5\71\11\254\354TL;"
|
||||
")\0:\6\231UR\0A\10\254\354T\34S\6B\11\254lV\34)\216\4C\11\254\354T\324\61"
|
||||
")\0D\10\254lV\64G\2E\10\254l\206\36z\4F\10\254l\206^\71\3G\11\254\354TN"
|
||||
"\63)\0H\10\254l\242\34S\6I\6\251T\206\0J\10\254\354k\231\24\0K\11\254l\242J\62"
|
||||
"\225\1L\7\254lr{\4M\11\255t\362ZI\353\0N\11\255t\362TI\356\0O\10\254\354T"
|
||||
"\64\223\2P\11\254lV\34)g\0Q\10\254\354T\264b\12R\10\254lV\34\251\31S\11\254\354"
|
||||
"FF\32\215\4T\7\253dVl\1U\10\254l\242\63)\0V\11\255t\262Ne\312\21W\12\255"
|
||||
"t\262J*\251.\0X\11\254l\242L*\312\0Y\12\255tr\252\63\312(\2Z\7\253df*"
|
||||
"\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() {
|
||||
@ -275,6 +275,7 @@ void sendTriggers() {
|
||||
|
||||
//16th notes for sequencer
|
||||
if (sixteenthPulseCount == 0) {
|
||||
bool *currentSeq;
|
||||
for (byte i = 0; i < 6; i++) {
|
||||
if (channels[i].seqPattern == 0) {
|
||||
currentSeq = seqA1;
|
||||
|
||||
@ -9,12 +9,49 @@ void checkInputs() {
|
||||
encReleasedTime = millis();
|
||||
|
||||
if (encReleasedTime - encPressedTime < 500) { // press shorter than .5s is for entering the submenu
|
||||
if (insideTab == 0) {
|
||||
if (!insideTab) {
|
||||
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();
|
||||
} 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;
|
||||
menuItem = 0;
|
||||
}
|
||||
@ -27,6 +64,7 @@ void checkInputs() {
|
||||
int encPosition = encoder.getPosition();
|
||||
if (encPositionOld != encPosition) {
|
||||
int change = encPositionOld - encPosition;
|
||||
if (displayScreen == 0) {
|
||||
if (!insideTab && !shiftBtnPushed) { //Change tab
|
||||
displayTab = displayTab + change;
|
||||
if (displayTab > 100) { //to address "negative" numbers
|
||||
@ -66,8 +104,8 @@ void checkInputs() {
|
||||
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;
|
||||
} else if (channels[displayTab - 1].seqPattern > 15) {
|
||||
channels[displayTab - 1].seqPattern = 15;
|
||||
}
|
||||
saveState();
|
||||
}
|
||||
@ -169,6 +207,14 @@ void checkInputs() {
|
||||
}
|
||||
saveState();
|
||||
}
|
||||
} else if (displayScreen == 1) {
|
||||
stepNumSelected = stepNumSelected + change;
|
||||
if (stepNumSelected > 100) {
|
||||
stepNumSelected = 15;
|
||||
} else if (stepNumSelected > 15) {
|
||||
stepNumSelected = 0;
|
||||
}
|
||||
}
|
||||
|
||||
updateScreen();
|
||||
encPositionOld = encPosition;
|
||||
@ -190,6 +236,10 @@ void checkInputs() {
|
||||
//shift button
|
||||
if (!digitalRead(SHIFT_BTN_PIN) && !shiftBtnPushed) {
|
||||
shiftBtnPushed = true;
|
||||
if (displayScreen == 1) {
|
||||
patternToEdit[stepNumSelected] = !patternToEdit[stepNumSelected];
|
||||
saveState();
|
||||
}
|
||||
updateScreen();
|
||||
} else if (digitalRead(SHIFT_BTN_PIN) && shiftBtnPushed) {
|
||||
shiftBtnPushed = false;
|
||||
|
||||
@ -258,6 +258,30 @@ void updateScreen() {
|
||||
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() );
|
||||
}
|
||||
Reference in New Issue
Block a user