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:
+26
-8
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user