From f055bad4ac8eec87f77978aebbcd4f3b9c0b1ca0 Mon Sep 17 00:00:00 2001 From: Ashley Strahle Date: Sat, 4 Jul 2026 05:17:48 +0000 Subject: [PATCH] =?UTF-8?q?Proportional=20catch-up:=20send=20midpoint=20pe?= =?UTF-8?q?r=20update=20(fast=20convergence,=20rejects=20=C2=B11=20jitter)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/expression_pedal.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/expression_pedal.cpp b/src/expression_pedal.cpp index 1ac5e00..35e5b08 100644 --- a/src/expression_pedal.cpp +++ b/src/expression_pedal.cpp @@ -40,14 +40,14 @@ void ExpressionPedal::update(UsbMidiTransport& midi) { uint8_t new_value = adc_to_midi(smoothed_raw); current_value = new_value; - // 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). + // Proportional catch-up: send midpoint rounded up each update. + // Rejects ±1 stationary jitter but converges to exact value on movement + // (e.g., 0→127 converges in ~35ms). if (current_value > last_sent_value + 1) { - last_sent_value++; + last_sent_value = (last_sent_value + current_value + 1) / 2; midi.send_cc(midi_channel, midi_cc, last_sent_value); } else if (current_value < last_sent_value - 1) { - last_sent_value--; + last_sent_value = (last_sent_value + current_value) / 2; midi.send_cc(midi_channel, midi_cc, last_sent_value); } }