started adding swing and gate to UI
This commit is contained in:
@ -6,9 +6,9 @@
|
|||||||
#include <avr/wdt.h>
|
#include <avr/wdt.h>
|
||||||
#include <NeoHWSerial.h>
|
#include <NeoHWSerial.h>
|
||||||
|
|
||||||
#define VERSION "V:1.1.1"
|
#define VERSION "V:1.2A"
|
||||||
|
|
||||||
byte memCode = 'D'; //Change to different letter if you changed the data structure
|
byte memCode = 'E'; //Change to different letter if you changed the data structure
|
||||||
|
|
||||||
#define PPQN 24
|
#define PPQN 24
|
||||||
#define PULSE_LENGTH 120 //1/10ms resolution. 12ms was failing at 1ms resolution at higher bpm. 60000/200/24 = 12.5 the max pulse length at 1ms resolution for 200bpm is 11ms
|
#define PULSE_LENGTH 120 //1/10ms resolution. 12ms was failing at 1ms resolution at higher bpm. 60000/200/24 = 12.5 the max pulse length at 1ms resolution for 200bpm is 11ms
|
||||||
@ -60,15 +60,15 @@ byte bpmModulationChannel = 200; //0 - CV1, 1 - CV2, 255 - OFF
|
|||||||
byte bpmModulationRange = 0;
|
byte bpmModulationRange = 0;
|
||||||
|
|
||||||
struct channel {
|
struct channel {
|
||||||
byte mode; //0 - CLK, 1 - RND, 2 - SEQ
|
byte mode; //0 - CLK, 1 - RND, 2 - SEQ, 3 - SWING, 4 - Gate
|
||||||
byte subDiv;
|
byte subDiv;
|
||||||
byte CV1Target; //0 - Off, 1 - Subdiv, 2 - RND, 3 - SeqPattern
|
byte CV1Target; //0 - Off, 1 - Subdiv, 2 - RND, 3 - SeqPattern
|
||||||
byte CV1Range;
|
|
||||||
byte CV2Target;
|
byte CV2Target;
|
||||||
byte CV2Range;
|
|
||||||
uint8_t offset;
|
uint8_t offset;
|
||||||
byte random;
|
byte random;
|
||||||
byte seqPattern;
|
byte seqPattern;
|
||||||
|
uint8_t gate;
|
||||||
|
uint8_t swing; //some of this params can be combinde into 4+4 bits to save space
|
||||||
};
|
};
|
||||||
|
|
||||||
channel channels[6] = { //array of channel settings
|
channel channels[6] = { //array of channel settings
|
||||||
|
|||||||
@ -175,6 +175,30 @@ void checkInputs() {
|
|||||||
channels[displayTab - 1].seqPattern = 15;
|
channels[displayTab - 1].seqPattern = 15;
|
||||||
}
|
}
|
||||||
saveState();
|
saveState();
|
||||||
|
} else if (((!insideTab && shiftBtnPushed)
|
||||||
|
|| (insideTab && menuItem == 0
|
||||||
|
&& (menuItemSelected || shiftBtnPushed)))
|
||||||
|
&& displayTab != 0
|
||||||
|
&& channels[displayTab - 1].mode == 3) { //Change SWING
|
||||||
|
channels[displayTab - 1].swing = channels[displayTab - 1].swing + change;
|
||||||
|
if (channels[displayTab - 1].swing > 100) {
|
||||||
|
channels[displayTab - 1].swing = 0;
|
||||||
|
} else if (channels[displayTab - 1].swing > 15) {
|
||||||
|
channels[displayTab - 1].swing = 15;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
|
} else if (((!insideTab && shiftBtnPushed)
|
||||||
|
|| (insideTab && menuItem == 0
|
||||||
|
&& (menuItemSelected || shiftBtnPushed)))
|
||||||
|
&& displayTab != 0
|
||||||
|
&& channels[displayTab - 1].mode == 4) { //Change GATE
|
||||||
|
channels[displayTab - 1].gate = channels[displayTab - 1].gate + change;
|
||||||
|
if (channels[displayTab - 1].gate > 100) {
|
||||||
|
channels[displayTab - 1].gate = 0;
|
||||||
|
} else if (channels[displayTab - 1].gate > 15) {
|
||||||
|
channels[displayTab - 1].gate = 15;
|
||||||
|
}
|
||||||
|
saveState();
|
||||||
} else if (insideTab && !shiftBtnPushed && !menuItemSelected) {
|
} else if (insideTab && !shiftBtnPushed && !menuItemSelected) {
|
||||||
menuItem = menuItem + change;
|
menuItem = menuItem + change;
|
||||||
if (menuItem > 100) { //for "negative" values
|
if (menuItem > 100) { //for "negative" values
|
||||||
@ -193,7 +217,7 @@ void checkInputs() {
|
|||||||
masterClockMode = masterClockMode + change;
|
masterClockMode = masterClockMode + change;
|
||||||
if (masterClockMode > 100) {
|
if (masterClockMode > 100) {
|
||||||
masterClockMode = 0;
|
masterClockMode = 0;
|
||||||
} else if (masterClockMode > 2) { //Set to 1 to hide MIDI mode
|
} else if (masterClockMode > 2) {
|
||||||
masterClockMode = 2;
|
masterClockMode = 2;
|
||||||
}
|
}
|
||||||
saveState();
|
saveState();
|
||||||
@ -244,8 +268,8 @@ void checkInputs() {
|
|||||||
channels[displayTab - 1].mode = channels[displayTab - 1].mode + change;
|
channels[displayTab - 1].mode = channels[displayTab - 1].mode + change;
|
||||||
if (channels[displayTab - 1].mode > 100) {
|
if (channels[displayTab - 1].mode > 100) {
|
||||||
channels[displayTab - 1].mode = 0;
|
channels[displayTab - 1].mode = 0;
|
||||||
} else if (channels[displayTab - 1].mode > 2) {
|
} else if (channels[displayTab - 1].mode > 4) {
|
||||||
channels[displayTab - 1].mode = 2;
|
channels[displayTab - 1].mode = 4;
|
||||||
}
|
}
|
||||||
channels[displayTab - 1].CV1Target = 0;
|
channels[displayTab - 1].CV1Target = 0;
|
||||||
channels[displayTab - 1].CV2Target = 0;
|
channels[displayTab - 1].CV2Target = 0;
|
||||||
|
|||||||
@ -126,7 +126,7 @@ void updateScreen() {
|
|||||||
valueStr = F("MODE:");
|
valueStr = F("MODE:");
|
||||||
} else if (i == 2 && channels[displayTab - 1].mode == 0) {
|
} else if (i == 2 && channels[displayTab - 1].mode == 0) {
|
||||||
valueStr = F("OFFSET:");
|
valueStr = F("OFFSET:");
|
||||||
} else if (i == 2 && channels[displayTab - 1].mode == 1) {
|
} else if (i == 2 && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4)) {
|
||||||
valueStr = F("SUBDIV:");
|
valueStr = F("SUBDIV:");
|
||||||
} else if (i == 2 && channels[displayTab - 1].mode == 2) {
|
} else if (i == 2 && channels[displayTab - 1].mode == 2) {
|
||||||
valueStr = F("EDIT PATTERN");
|
valueStr = F("EDIT PATTERN");
|
||||||
@ -148,6 +148,10 @@ void updateScreen() {
|
|||||||
valueStr = F("RAND");
|
valueStr = F("RAND");
|
||||||
} else if (i == 1 && channels[displayTab - 1].mode == 2) {
|
} else if (i == 1 && channels[displayTab - 1].mode == 2) {
|
||||||
valueStr = F("SEQ");
|
valueStr = F("SEQ");
|
||||||
|
} else if (i == 1 && channels[displayTab - 1].mode == 3) {
|
||||||
|
valueStr = F("SWING");
|
||||||
|
} else if (i == 1 && channels[displayTab - 1].mode == 4) {
|
||||||
|
valueStr = F("GATE");
|
||||||
} else if (i == 2 && channels[displayTab - 1].mode == 0) { //SubDiv and offset
|
} else if (i == 2 && channels[displayTab - 1].mode == 0) { //SubDiv and offset
|
||||||
valueStr = String(channels[displayTab - 1].offset) + F("/");
|
valueStr = String(channels[displayTab - 1].offset) + F("/");
|
||||||
int PulsesPerStep;
|
int PulsesPerStep;
|
||||||
@ -157,10 +161,10 @@ void updateScreen() {
|
|||||||
PulsesPerStep = subDivs[channels[displayTab - 1].subDiv] * PPQN;
|
PulsesPerStep = subDivs[channels[displayTab - 1].subDiv] * PPQN;
|
||||||
}
|
}
|
||||||
valueStr = valueStr + String(PulsesPerStep); //(playingModes[i] * PPQN) - 1 //String(channelPulsesPerCycle[displayTab-1]+1)
|
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) {
|
} else if (i == 2 && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4) && subDivs[channels[displayTab - 1].subDiv] > 0) {
|
||||||
valueStr = F("/");
|
valueStr = F("/");
|
||||||
valueStr = valueStr + String(subDivs[channels[displayTab - 1].subDiv]);
|
valueStr = valueStr + String(subDivs[channels[displayTab - 1].subDiv]);
|
||||||
} else if (i == 2 && channels[displayTab - 1].mode == 1 && subDivs[channels[displayTab - 1].subDiv] < 0) {
|
} else if (i == 2 && (channels[displayTab - 1].mode == 1 || channels[displayTab - 1].mode == 4) && subDivs[channels[displayTab - 1].subDiv] < 0) {
|
||||||
valueStr = F("x");
|
valueStr = F("x");
|
||||||
valueStr = valueStr + String(abs(subDivs[channels[displayTab - 1].subDiv]));
|
valueStr = valueStr + String(abs(subDivs[channels[displayTab - 1].subDiv]));
|
||||||
} else if (i == 3 && channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target == 0) { //MOD
|
} else if (i == 3 && channels[displayTab - 1].CV1Target == 0 && channels[displayTab - 1].CV2Target == 0) { //MOD
|
||||||
@ -195,7 +199,12 @@ void updateScreen() {
|
|||||||
valueStr = F("SKIP CHANCE");
|
valueStr = F("SKIP CHANCE");
|
||||||
} else if (channels[displayTab - 1].mode == 2) {
|
} else if (channels[displayTab - 1].mode == 2) {
|
||||||
valueStr = F("PATTERN");
|
valueStr = F("PATTERN");
|
||||||
|
} else if (channels[displayTab - 1].mode == 3) {
|
||||||
|
valueStr = F("SWING");
|
||||||
|
} else if (channels[displayTab - 1].mode == 4) {
|
||||||
|
valueStr = F("GATE");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!insideTab && shiftBtnPushed) || (insideTab && menuItem == 0)) {
|
if ((!insideTab && shiftBtnPushed) || (insideTab && menuItem == 0)) {
|
||||||
u8g2.drawButtonUTF8(leftOffset, 41, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 3, valueStr.c_str() );
|
u8g2.drawButtonUTF8(leftOffset, 41, U8G2_BTN_BW1|U8G2_BTN_INV|U8G2_BTN_HCENTER, width, 0, 3, valueStr.c_str() );
|
||||||
} else {
|
} else {
|
||||||
@ -219,6 +228,10 @@ void updateScreen() {
|
|||||||
valueStr = F("B");
|
valueStr = F("B");
|
||||||
valueStr = valueStr + String(channels[displayTab - 1].seqPattern - 7);
|
valueStr = valueStr + String(channels[displayTab - 1].seqPattern - 7);
|
||||||
}
|
}
|
||||||
|
} else if (channels[displayTab - 1].mode == 3) {
|
||||||
|
valueStr = String(channels[displayTab - 1].swing) + "%";
|
||||||
|
} else if (channels[displayTab - 1].mode == 4) {
|
||||||
|
valueStr = String(channels[displayTab - 1].gate) + "%";
|
||||||
}
|
}
|
||||||
u8g2.setFont(stkL);
|
u8g2.setFont(stkL);
|
||||||
if ((!insideTab && shiftBtnPushed) || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) {
|
if ((!insideTab && shiftBtnPushed) || (insideTab && menuItem == 0 && (menuItemSelected || shiftBtnPushed))) {
|
||||||
|
|||||||
Reference in New Issue
Block a user