Pitch slider modification

Arduino sends now LSB / MSB to have 14 bit resolution for the pitch slider. Mapping modified. We have now tempo increments of 0,01%.
This commit is contained in:
Marc Monka
2025-11-19 12:36:34 +01:00
parent 3a9a0a2c18
commit 2308bfdeab
3 changed files with 83 additions and 10 deletions
+35 -3
View File
@@ -41,15 +41,25 @@ elapsedMillis debounceTime_browse; // Temps per filtrar rebots browse¡
Encoder browse(browseA_pin, browseB_pin); Encoder browse(browseA_pin, browseB_pin);
long lastPosition_browse = 0; // Última posició llegida long lastPosition_browse = 0; // Última posició llegida
//Pitch slider old elapsedMillis msec = 0;
/* Pitch slider old
const int pitch_pin = A0; const int pitch_pin = A0;
const int channel_pitch = 3; const int channel_pitch = 3;
const int controllerA0 = 7; const int controllerA0 = 7;
int previousA0 = -1; int previousA0 = -1;
elapsedMillis msec = 0;
ResponsiveAnalogRead analog(pitch_pin, true); ResponsiveAnalogRead analog(pitch_pin, true);
*/
//Pitch new
const int pitchPin = A0;
ResponsiveAnalogRead analog(pitchPin, true);
int lastMSB = -1;
int lastLSB = -1;
// MIDI OUT - Leds // MIDI OUT - Leds
@@ -375,7 +385,7 @@ long newPosition_browse = browse.read();
} }
} }
//Pitch /* Pitch old
if (msec >= 100){ if (msec >= 100){
msec = 0; msec = 0;
int n0 = analogRead(A0) / 8; int n0 = analogRead(A0) / 8;
@@ -385,6 +395,28 @@ if (msec >= 100){
previousA0 = n0; previousA0 = n0;
} }
} }
*/
//Pitch 14 bits
analog.update();
int raw = analog.getValue(); // valor ja suavitzat
int value14 = map(raw, 0, 1023, 0, 16383);
byte msb = (value14 >> 7) & 0x7F;
byte lsb = value14 & 0x7F;
if (msb != lastMSB) {
usbMIDI.sendControlChange(0, msb, 1);
lastMSB = msb;
}
if (lsb != lastLSB) {
usbMIDI.sendControlChange(32, lsb, 1);
lastLSB = lsb;
}
+30 -2
View File
@@ -324,8 +324,8 @@ XDJ100SX.cue = function (channel, control, value, status, group){
} }
/*
//Pitch Slider //Pitch Slider old
XDJ100SX.pitchLast = 0; XDJ100SX.pitchLast = 0;
@@ -350,6 +350,34 @@ XDJ100SX.pitch = function (channel, control, value, status, group) {
engine.setValue(group, "rate", normalized); engine.setValue(group, "rate", normalized);
} }
}; };
*/
// Pitch slider new
XDJ100SX.pitchMSB = 0;
XDJ100SX.pitchLSB = 0;
XDJ100SX.pitch = function (channel, control, value, status, group) {
if (control === 0) { // MSB
XDJ100SX.pitchMSB = value;
} else if (control === 32) { // LSB
XDJ100SX.pitchLSB = value;
}
// Combinar MSB + LSB
var full = (XDJ100SX.pitchMSB << 7) | XDJ100SX.pitchLSB; // 016383
// Convertir a rang de Mixxx (-1.0 .. +1.0)
var normalized = - (full - 8192) / 8192;
engine.setValue(group, "rate", normalized);
};
//Browse Encoder (scroll + canviar vista) //Browse Encoder (scroll + canviar vista)
+16 -3
View File
@@ -10,15 +10,28 @@
<controls> <controls>
<control> <control>
<description>PITCH MSB</description>
<group>[Channel1]</group> <group>[Channel1]</group>
<key>XDJ100SX.pitch</key> <key>XDJ100SX.pitch</key>
<description>PITCH</description> <status>0xB0</status>
<status>0xB2</status> <midino>0x00</midino>
<midino>0x07</midino>
<options> <options>
<script-binding/> <script-binding/>
</options> </options>
</control> </control>
<control>
<group>[Channel1]</group>
<key>XDJ100SX.pitch</key>
<description>PITCH LSB</description>
<status>0xB0</status>
<midino>0x20</midino>
<options>
<script-binding/>
</options>
</control>
<control> <control>
<group>[Channel1]</group> <group>[Channel1]</group>
<key>play</key> <key>play</key>