From 1dec81e3296b5ea4fbf89446b3d5de492591c2c5 Mon Sep 17 00:00:00 2001 From: Ashley Strahle Date: Sat, 4 Jul 2026 05:15:09 +0000 Subject: [PATCH] =?UTF-8?q?Rate-limit=20exp=20pedal:=20step=20=C2=B11/upda?= =?UTF-8?q?te,=20stationary=20jitter=20ignored?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/expression_pedal.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/expression_pedal.cpp b/src/expression_pedal.cpp index ad4a6d0..1ac5e00 100644 --- a/src/expression_pedal.cpp +++ b/src/expression_pedal.cpp @@ -40,10 +40,15 @@ void ExpressionPedal::update(UsbMidiTransport& midi) { uint8_t new_value = adc_to_midi(smoothed_raw); current_value = new_value; - if (current_value != last_sent_value) { - last_sent_value = current_value; - midi.send_cc(midi_channel, midi_cc, current_value); - Serial.printf("[EXP] CC%d: %d (raw ADC: %d)\n", midi_cc, current_value, current_raw); + // Rate-limited send: step ±1 per update when value deviates >1 from last sent. + // This prevents stationary jitter (adjacent-value dither) while keeping + // movement smooth (values increment one at a time, faster than any foot). + if (current_value > last_sent_value + 1) { + last_sent_value++; + midi.send_cc(midi_channel, midi_cc, last_sent_value); + } else if (current_value < last_sent_value - 1) { + last_sent_value--; + midi.send_cc(midi_channel, midi_cc, last_sent_value); } }