diff --git a/stereo_mix/drivers/leds.h b/stereo_mix/drivers/leds.h index dd7c106..6bd5b87 100644 --- a/stereo_mix/drivers/leds.h +++ b/stereo_mix/drivers/leds.h @@ -55,7 +55,7 @@ class Leds { htim1.Init.Prescaler = 1; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 1024; // 10 bit + htim1.Init.Period = 1024 - 2; // 10 bit htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim1); diff --git a/stereo_mix/ui.cc b/stereo_mix/ui.cc index 945001a..43dc1b0 100644 --- a/stereo_mix/ui.cc +++ b/stereo_mix/ui.cc @@ -60,9 +60,11 @@ void UI::Poll() } if (abs(previous_pot_values[i] - adc->value(ADC_GROUP_POT + i)) > 1900) { previous_pot_values[i] = adc->value(ADC_GROUP_POT + i); - queue.AddEvent(CONTROL_POT, i, previous_pot_values[i]); + if(pots_touched) + queue.AddEvent(CONTROL_POT, i, previous_pot_values[i]); } } + pots_touched = true; } void UI::LoadState() { @@ -112,7 +114,7 @@ void UI::OnSwitchReleased(const Event& e) mute[e.control_id] = !mute[e.control_id]; for (size_t i = 0; i < kNumChannels; i++) { - last_pan_pot_touch[i] = last_vol_pot_touch[i] = 0; + last_pan_pot_touch[i] = last_vol_pot_touch[i] = -1; } SaveState(); @@ -138,7 +140,7 @@ void UI::TaskDrawLeds() leds->set_intensity_signed(i, pan_att_pots[i] - 32767); } else { // TODO: refactor - if (system_clock.milliseconds() - last_pan_pot_touch[i] < kShowChangedValueMilliseconds) { + if (last_pan_pot_touch[i] > 0 && system_clock.milliseconds() - last_pan_pot_touch[i] < kShowChangedValueMilliseconds) { // show panning leds->set_intensity_signed(i, pan_pots[i] - 32767); } else { diff --git a/stereo_mix/ui.h b/stereo_mix/ui.h index 2fd49f8..5baefe7 100644 --- a/stereo_mix/ui.h +++ b/stereo_mix/ui.h @@ -33,6 +33,8 @@ class UI { potControllers[i].Init(&volume_pots[i], volume_hidden_params); uint16_t* pan_hidden_params[] = {&pan_att_pots[i], &pan_att_pots[i], &pan_att_pots[i], &pan_att_pots[i]}; potControllers[i + kNumChannels].Init(&pan_pots[i], pan_hidden_params); + + last_pan_pot_touch[i] = last_vol_pot_touch[i] = -1; } } @@ -72,8 +74,9 @@ class UI { uint16_t pan_att_pots[kNumChannels]; bool mute[kNumChannels]; - uint32_t last_pan_pot_touch[kNumChannels]; - uint32_t last_vol_pot_touch[kNumChannels]; + int64_t last_pan_pot_touch[kNumChannels]; + int64_t last_vol_pot_touch[kNumChannels]; + bool pots_touched; PotController potControllers[kNumChannels * 2]; // todo: count };