Files
loopy_midi_controller/include/switch_stub.h
T
ash 07e5cd8994 Rewrite MUX: WS2812C LEDs (NeoPixel) + 74HC165 buttons
PixelStomp MUX uses:
- WS2812C LEDs: one data line via DAT (GPIO 9), NeoPixel protocol
- 74HC165 shift register: LD/CLK/DI for reading 8 button states

Changes:
- Use Adafruit NeoPixel library for LED control
- Proper 74HC165 parallel-load shift-in for buttons
- 8 switches + 8 LEDs (was incorrectly 10)
- Diagnostic commands: dump, ledtest, red, green, blue, read
2026-06-23 13:38:51 +00:00

41 lines
957 B
C++

#pragma once
#include <cstdint>
class SwitchStub {
public:
virtual ~SwitchStub() {}
virtual void begin() = 0;
virtual bool is_pressed(uint8_t switch_id) = 0;
virtual void configure_switch(uint8_t switch_id, uint8_t gpio_pin) = 0;
virtual void set_debounce_time(uint32_t time_ms) = 0;
};
struct SwitchState {
uint8_t id;
uint8_t gpio_pin;
bool current_state;
bool previous_state;
uint32_t last_change_time;
uint32_t debounce_time;
};
class PixelStompMux;
class DefaultSwitchStub : public SwitchStub {
private:
static const uint8_t NUM_SWITCHES = 8;
SwitchState switch_states[NUM_SWITCHES];
bool initialized;
public:
DefaultSwitchStub();
void begin() override;
bool is_pressed(uint8_t switch_id) override;
void configure_switch(uint8_t switch_id, uint8_t gpio_pin) override;
void set_debounce_time(uint32_t time_ms) override;
void set_mux(PixelStompMux* mux);
};