#pragma once #include class UsbMidiTransport; class ExpressionPedal { public: ExpressionPedal(uint8_t adc_pin = 5); void begin(); void update(UsbMidiTransport& midi); uint8_t get_value() const { return current_value; } uint16_t get_raw() const { return current_raw; } void set_cal_min(); void set_cal_max(); uint16_t get_cal_min() const { return cal_min; } uint16_t get_cal_max() const { return cal_max; } private: uint8_t adc_pin; uint8_t current_value; uint8_t last_sent_value; uint8_t midi_channel; uint8_t midi_cc; static const uint8_t HYSTERESIS = 3; static const uint16_t READ_INTERVAL_MS = 20; uint32_t last_read_time; uint16_t current_raw; uint16_t cal_min; uint16_t cal_max; uint8_t adc_to_midi(uint16_t adc_value); };