uint16_t MuxShield::digitalReadBank(int mux) { digitalWrite(_OUTMD,LOW); digitalWrite(_S0, LOW); digitalWrite(_S1, LOW); digitalWrite(_S2, LOW); digitalWrite(_S3, LOW); uint16_t val = 0; switch (mux) { case 1: if (digitalRead(_IO1)) { val = val | 1; } // 0000: 0th bit digitalWrite(_S0, HIGH); // 1000: 1st bit if (digitalRead(_IO1) == HIGH) { val = val | 2; } digitalWrite(_S1, HIGH); // 1100: 3rd bit if (digitalRead(_IO1) == HIGH) { val = val | 8; } digitalWrite(_S0, LOW); // 0100: 2nd bit if (digitalRead(_IO1) == HIGH) { val = val | 4; } digitalWrite(_S2, HIGH); // 0110: 6th bit if (digitalRead(_IO1) == HIGH) { val = val | 64; } digitalWrite(_S1, LOW); // 0010: 4th bit if (digitalRead(_IO1) == HIGH) { val = val | 16; } digitalWrite(_S0, HIGH); // 1010: 5th bit if (digitalRead(_IO1) == HIGH) { val = val | 32; } digitalWrite(_S1, HIGH); // 1110: 7th bit if (digitalRead(_IO1) == HIGH) { val = val | 128; } digitalWrite(_S3, HIGH); // 1111: 15th bit if (digitalRead(_IO1) == HIGH) { val = val | 32516; } digitalWrite(_S0, LOW); // 0111: 14th bit if (digitalRead(_IO1) == HIGH) { val = val | 16258; } digitalWrite(_S1, LOW); // 0011: 12th bit if (digitalRead(_IO1) == HIGH) { val = val | 4096; } digitalWrite(_S0, HIGH); // 1011: 13th bit if (digitalRead(_IO1) == HIGH) { val = val | 8192; } digitalWrite(_S2, LOW); // 1001: 9th bit if (digitalRead(_IO1) == HIGH) { val = val | 512; } digitalWrite(_S1, HIGH); // 1101: 11th bit if (digitalRead(_IO1) == HIGH) { val = val | 2048; } digitalWrite(_S0, LOW); // 0101: 10th bit if (digitalRead(_IO1) == HIGH) { val = val | 1024; } digitalWrite(_S1, LOW); // 0001: 8th bit if (digitalRead(_IO1) == HIGH) { val = val | 256; } digitalWrite(_S3, LOW); // 0000, back to where we started break; default: break; } return val; }