Fix daisy-chain MUX byte order: MUX1 (first 8 bits) → low byte/switches 0-7, MUX2 → high byte/switches 8-15

This commit is contained in:
2026-06-23 22:49:59 +00:00
parent 9a56591453
commit d957e276bd
+26 -8
View File
@@ -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);
}