#pragma once #include class PixelStompMux { public: static const uint8_t NUM_INPUTS = 10; static const uint8_t NUM_OUTPUTS = 10; PixelStompMux(uint8_t dat_pin, uint8_t ld_pin, uint8_t clk_pin, uint8_t di_pin); void begin(); uint16_t read_buttons(); bool is_button_pressed(uint8_t index); void write_leds(uint16_t led_state); void set_led(uint8_t index, bool on); void clear_all(); void dump(); private: uint8_t pin_dat; uint8_t pin_ld; uint8_t pin_clk; uint8_t pin_di; uint16_t last_button_state; uint16_t current_led_state; void shift_out(uint16_t data, uint8_t bits); uint16_t shift_in(uint8_t bits); void pulse_pin(uint8_t pin, uint8_t level, uint16_t duration_us = 1); };