From d957e276bd9c9b52175cce93636940262828021f Mon Sep 17 00:00:00 2001 From: Ashley Strahle Date: Tue, 23 Jun 2026 22:49:59 +0000 Subject: [PATCH] =?UTF-8?q?Fix=20daisy-chain=20MUX=20byte=20order:=20MUX1?= =?UTF-8?q?=20(first=208=20bits)=20=E2=86=92=20low=20byte/switches=200-7,?= =?UTF-8?q?=20MUX2=20=E2=86=92=20high=20byte/switches=208-15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pixel_stomp_mux.cpp | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) 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); }