diff --git a/src/pixel_stomp_mux.cpp b/src/pixel_stomp_mux.cpp index da98215..98e3fb0 100644 --- a/src/pixel_stomp_mux.cpp +++ b/src/pixel_stomp_mux.cpp @@ -37,15 +37,25 @@ uint16_t PixelStompMux::read_buttons() { digitalWrite(pin_ld, HIGH); delayMicroseconds(BMC_MUX_74HC165_DELAY); - uint16_t data = 0; - for (int i = 15; i >= 0; i--) { - bitWrite(data, i, digitalRead(pin_di)); + uint8_t mux1 = 0; + for (int i = 7; i >= 0; i--) { + bitWrite(mux1, i, digitalRead(pin_di)); digitalWrite(pin_clk, HIGH); delayMicroseconds(BMC_MUX_74HC165_DELAY); digitalWrite(pin_clk, LOW); delayMicroseconds(BMC_MUX_74HC165_DELAY); } + uint8_t mux2 = 0; + for (int i = 7; i >= 0; i--) { + bitWrite(mux2, i, digitalRead(pin_di)); + digitalWrite(pin_clk, HIGH); + delayMicroseconds(BMC_MUX_74HC165_DELAY); + digitalWrite(pin_clk, LOW); + delayMicroseconds(BMC_MUX_74HC165_DELAY); + } + + uint16_t data = ((uint16_t)mux2 << 8) | mux1; last_button_state = data; return data; } @@ -104,16 +114,24 @@ void PixelStompMux::probe() { digitalWrite(pin_ld, HIGH); delayMicroseconds(BMC_MUX_74HC165_DELAY); - uint16_t data = 0; - for (int i = 15; i >= 0; i--) { - bool bit_val = digitalRead(pin_di); - bitWrite(data, i, bit_val); + uint8_t mux1 = 0; + uint8_t mux2 = 0; + for (int i = 7; i >= 0; i--) { + bitWrite(mux1, i, digitalRead(pin_di)); digitalWrite(pin_clk, HIGH); delayMicroseconds(BMC_MUX_74HC165_DELAY); digitalWrite(pin_clk, LOW); delayMicroseconds(BMC_MUX_74HC165_DELAY); } - Serial.printf(" Round %d: 0x%04X\n", round, data); + for (int i = 7; i >= 0; i--) { + bitWrite(mux2, i, digitalRead(pin_di)); + digitalWrite(pin_clk, HIGH); + delayMicroseconds(BMC_MUX_74HC165_DELAY); + digitalWrite(pin_clk, LOW); + delayMicroseconds(BMC_MUX_74HC165_DELAY); + } + uint16_t data = ((uint16_t)mux2 << 8) | mux1; + Serial.printf(" Round %d: 0x%04X (MUX1=0x%02X MUX2=0x%02X)\n", round, data, mux1, mux2); delay(500); }