Go Down

Topic: Digital Multiplexer and storing and comparing digital inputs (Read 1 time) previous topic - next topic


Hey everyone,

I connected a 74HC151 multiplexer to my arduino board to access a switch matrix, and I'm using a single pin for the digital input from the multiplexer output. How can i store and compare the digital readings of the input? Should I store the readings into an array? Please help. Thanks.


Feb 21, 2011, 04:44 pm Last Edit: Feb 21, 2011, 04:46 pm by Graynomad Reason: 1
Should I store the readings into an array?

That's how I'd do it, something like this.

Code: [Select]
byte vals [8];

for (i = 0; i < 8; i++) {
 setMuxAddress(i);  // does whatever is required to set the three select inputs on the MUX
 vals[i] = digitalRead(muxPin);

Rob Gray aka the GRAYnomad www.robgray.com


Thanks, Rob.

Next thing I need to know is how to compare each position in the array. Suppose I have an array of:


with the leftmost position being the first or lowest entry, and the rightmost position is the last or highest entry.

I need to select and compare the positions that has 0 binary value, so that I can transmit serially the highest position that has 0 binary value.

Using the array above as example, I need to select the positions that yielded 0 binary value, which are 000, 010 and 100. Then I need to compare them so that I can get the highest position, which is 100, and transmit it serially.



Just count down from the top until you hit a 0. Something like this...
Code: [Select]
for (int i = 8; i ; i--) {
    if (vals[i-1] == 0) {
         Serial.print (i);

Rob Gray aka the GRAYnomad www.robgray.com


hmm, i feel somewhat in the dark about your intended goal

in multiple instance similar to yours, i have simply created an array of assigned values to slots. they are binary numbers in decimal representation as well as a state. it will effectively work similar to a debounce, pressing any combination will provide you with a unique sum

Code: [Select]

int values[8] = {1,2,4,8,16,32,64,128};
int state = 0;
int current = 0;

void loop()
// reset current
current = 0;

for(int n = 0; n < 8; n++){current += digitalRead(n) == LOW ? values[n] : 0;}

if(state != current)
      do something here to execute on value change
   // set state to current
   state = current;

my two cents

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131