firmware update
This commit is contained in:
@@ -47,29 +47,68 @@ static const uint8_t bumpLUT[256] PROGMEM = {
|
|||||||
50, 47, 44, 41, 38, 35, 32, 29, 25, 22, 19, 16, 13, 10, 7, 4
|
50, 47, 44, 41, 38, 35, 32, 29, 25, 22, 19, 16, 13, 10, 7, 4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Rate Modifier Ranges
|
||||||
|
/* 0
|
||||||
|
* 114
|
||||||
|
* 228
|
||||||
|
* 341
|
||||||
|
* 512
|
||||||
|
* 683
|
||||||
|
* 796
|
||||||
|
* 910
|
||||||
|
* 1024
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define RM_NOTCHES_WIDTH 48
|
||||||
|
|
||||||
|
#define RM_N0_MID 0
|
||||||
|
#define RM_N1_MID 128
|
||||||
|
#define RM_N2_MID 256
|
||||||
|
#define RM_N3_MID 384
|
||||||
|
#define RM_N4_MID 512
|
||||||
|
#define RM_N5_MID 640
|
||||||
|
#define RM_N6_MID 768
|
||||||
|
#define RM_N7_MID 896
|
||||||
|
#define RM_N8_MID 1024
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Waveform Constants
|
//Waveform Constants
|
||||||
#define WF_SAW 1
|
#define WF_SAW 1
|
||||||
#define WF_SINE 2
|
#define WF_SINE 2
|
||||||
#define WF_SQUARE 4
|
#define WF_SQUARE 4
|
||||||
|
|
||||||
|
#define TS_TAP 0
|
||||||
|
#define TS_POT 1
|
||||||
|
|
||||||
int depth = 0;
|
int depth = 0;
|
||||||
unsigned long delayTime = 1;
|
unsigned long delayTime = 4000;
|
||||||
|
unsigned long delayTimeOUT = 4000;
|
||||||
uint8_t waveform = WF_SINE;
|
uint8_t waveform = WF_SINE;
|
||||||
|
uint8_t tempoSource = TS_TAP;
|
||||||
uint8_t symetry = 127;
|
uint8_t symetry = 127;
|
||||||
|
double modifier = 4;
|
||||||
uint16_t wfStep = 0;
|
uint16_t wfStep = 0;
|
||||||
|
int potTempoLast = 0;
|
||||||
|
|
||||||
unsigned long lastStep = millis();
|
|
||||||
unsigned long lastTest = millis();
|
|
||||||
|
double bpm = 60;
|
||||||
|
|
||||||
|
unsigned long lastStep = lmicros();
|
||||||
|
unsigned long lastTest = lmicros();
|
||||||
|
|
||||||
|
unsigned long lastTap = 0;
|
||||||
|
|
||||||
//IO Pin Definition
|
//IO Pin Definition
|
||||||
#define PIN_A_RATE A1 //Pot Rate
|
#define PIN_A_RATE A0 //Pot Rate
|
||||||
#define PIN_A_DEPTH A2 //Pot Depth
|
#define PIN_A_DEPTH A1 //Pot Depth
|
||||||
#define PIN_A_SHAPE A0 //Pot Shape
|
#define PIN_A_SHAPE A2 //Pot Shape
|
||||||
#define PIN_A_MUL A3 //Pot Clock-Modifier
|
#define PIN_A_MUL A3 //Pot Clock-Modifier
|
||||||
|
|
||||||
#define PIN_D_WF1 7 //Waveform Switch Pole 1
|
#define PIN_D_WF1 10 //Waveform Switch Pole 1
|
||||||
#define PIN_D_WF2 10 //Waveform Switch Pole 2
|
#define PIN_D_WF2 7 //Waveform Switch Pole 2
|
||||||
#define PIN_D_TAP 9 //Tap Tempo Push button
|
#define PIN_D_TAP 9 //Tap Tempo Push button
|
||||||
#define PIN_D_MOD 8 //Tempo Modulation Switch
|
#define PIN_D_MOD 8 //Tempo Modulation Switch
|
||||||
|
|
||||||
@@ -87,33 +126,98 @@ void setup() {
|
|||||||
pinMode(PIN_D_WF2, INPUT_PULLUP);
|
pinMode(PIN_D_WF2, INPUT_PULLUP);
|
||||||
pinMode(PIN_D_TAP, INPUT_PULLUP);
|
pinMode(PIN_D_TAP, INPUT_PULLUP);
|
||||||
pinMode(PIN_D_MOD, INPUT_PULLUP);
|
pinMode(PIN_D_MOD, INPUT_PULLUP);
|
||||||
|
|
||||||
|
//enable pin change interrupt
|
||||||
|
GIMSK = 0b00100000;
|
||||||
|
PCMSK1 = 0b00000010;
|
||||||
|
MCUCR &= 0b00000011;
|
||||||
|
MCUCR |= 0b00000010;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t pstate = 0;
|
||||||
|
|
||||||
|
ISR(PCINT1_vect) {
|
||||||
|
if (lastTap > lmicros() - 800000 ){ //debounce
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (pstate == 0){
|
||||||
|
pstate = 1;
|
||||||
|
}else{
|
||||||
|
pstate = 0;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//delayTime = 500;
|
||||||
|
if (lastTap == 0){
|
||||||
|
lastTap = lmicros();
|
||||||
|
}else{
|
||||||
|
delayTime = (lmicros() - lastTap)/256;
|
||||||
|
lastTap = lmicros();
|
||||||
|
wfStep = 0;
|
||||||
|
tempoSource = TS_TAP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//Read pots and switch state
|
//Read pots and switch state
|
||||||
void getInput() {
|
void getInput() {
|
||||||
depth = analogRead(PIN_A_DEPTH) / 4;
|
depth = 255 - (analogRead(PIN_A_DEPTH) / 4);
|
||||||
//delayTime = map(analogRead(A1),0,1023,5000,20000);
|
//delayTime = map(analogRead(A1),0,1023,5000,20000);
|
||||||
delayTime = map(analogRead(PIN_A_RATE), 0, 1023, 0, 40000); ;
|
int raw = analogRead(PIN_A_RATE);
|
||||||
|
if (tempoSource == TS_POT){
|
||||||
|
delayTime = map(raw, 0, 1023, 0, 40000) * 8;
|
||||||
|
|
||||||
|
potTempoLast = raw;
|
||||||
|
}else{
|
||||||
|
if (potTempoLast < (raw - 16)) {tempoSource = TS_POT;}
|
||||||
|
if (potTempoLast > (raw + 16)) {tempoSource = TS_POT;}
|
||||||
|
}
|
||||||
symetry = map(analogRead(PIN_A_SHAPE), 0, 1023, 4, 251); ;
|
symetry = map(analogRead(PIN_A_SHAPE), 0, 1023, 4, 251); ;
|
||||||
|
|
||||||
waveform = WF_SINE;
|
//float secFracion = 1/((float)bpm*256);
|
||||||
|
//delayTime = secFracion*10000000;
|
||||||
|
|
||||||
|
waveform = WF_SAW;
|
||||||
if (digitalRead(PIN_D_WF1) == LOW) {
|
if (digitalRead(PIN_D_WF1) == LOW) {
|
||||||
waveform = WF_SQUARE;
|
waveform = WF_SQUARE;
|
||||||
}
|
}
|
||||||
if (digitalRead(PIN_D_WF2) == LOW) {
|
if (digitalRead(PIN_D_WF2) == LOW) {
|
||||||
waveform = WF_SAW;
|
waveform = WF_SINE;
|
||||||
|
}
|
||||||
|
|
||||||
|
//rate modifier
|
||||||
|
raw = analogRead(PIN_A_MUL);
|
||||||
|
if (raw >= 0 && raw <= RM_N0_MID + RM_NOTCHES_WIDTH) {modifier = 16;}
|
||||||
|
if (raw >= RM_N1_MID - RM_NOTCHES_WIDTH && raw <= RM_N1_MID + RM_NOTCHES_WIDTH) {modifier = 8;}
|
||||||
|
if (raw >= RM_N2_MID - RM_NOTCHES_WIDTH && raw <= RM_N2_MID + RM_NOTCHES_WIDTH) {modifier = 4;}
|
||||||
|
if (raw >= RM_N3_MID - RM_NOTCHES_WIDTH && raw <= RM_N3_MID + RM_NOTCHES_WIDTH) {modifier = 2;}
|
||||||
|
if (raw >= RM_N4_MID - RM_NOTCHES_WIDTH && raw <= RM_N4_MID + RM_NOTCHES_WIDTH) {modifier = 1;}
|
||||||
|
if (raw >= RM_N5_MID - RM_NOTCHES_WIDTH && raw <= RM_N5_MID + RM_NOTCHES_WIDTH) {modifier = 0.5;}
|
||||||
|
if (raw >= RM_N6_MID - RM_NOTCHES_WIDTH && raw <= RM_N6_MID + RM_NOTCHES_WIDTH) {modifier = 0.25;}
|
||||||
|
if (raw >= RM_N7_MID - RM_NOTCHES_WIDTH && raw <= RM_N7_MID + RM_NOTCHES_WIDTH) {modifier = 0.125;}
|
||||||
|
if (raw >= RM_N8_MID && raw <= 1024) {modifier = 0.0625;}
|
||||||
|
|
||||||
|
applySppedMod();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void applySppedMod(){
|
||||||
|
if (digitalRead(PIN_D_MOD) == HIGH) {
|
||||||
|
delayTimeOUT = delayTime*modifier;
|
||||||
|
}else{
|
||||||
|
delayTimeOUT = delayTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
unsigned long millisNow = lmicros() / 8; //Timestamp NOW
|
unsigned long millisNow = lmicros() ; //Timestamp NOW
|
||||||
|
|
||||||
if (lastTest + 100 < millisNow) { //Get panel state every 100ms
|
if (lastTest < millisNow - 800) { //Get panel state every 100ms
|
||||||
lastTest = millisNow;
|
lastTest = millisNow;
|
||||||
getInput();
|
getInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastStep < millisNow - delayTime) { //do waveform stuff
|
if (lastStep < millisNow - delayTimeOUT) { //do waveform stuff
|
||||||
wfStep ++;
|
wfStep ++;
|
||||||
if (wfStep > 255) wfStep = 0;
|
if (wfStep > 255) wfStep = 0;
|
||||||
lastStep = millisNow;
|
lastStep = millisNow;
|
||||||
|
|||||||
Reference in New Issue
Block a user