Hello, I have doubts about how to use the multiplexer CD74HC4051, I need to use it to have both analog inputs to read sensors, as digital outputs to move servos and motors And incidentally also to use digital inputs. I've been looking online and I found three examples for each situation but I not understand.
void loop()
{
//This for loop is used to scroll through and store the 16 inputs on the FIRST multiplexer
for (int i=0; i<16; i++)
{
//The following 4 commands set the correct logic for the control pins to select the desired input
//See the Arduino Bitwise AND Reference: http://www.arduino.cc/en/Reference/BitwiseAnd
//See the Aruino Bitshift Reference: http://www.arduino.cc/en/Reference/Bitshift
digitalWrite(CONTROL0, (i&15)>>3);
digitalWrite(CONTROL1, (i&7)>>2);
digitalWrite(CONTROL2, (i&3)>>1);
digitalWrite(CONTROL3, (i&1));
//Read and store the input value at a location in the array
mux0array[i] = analogRead(0);
}
//This for loop is used to scroll through the SECOND multiplexer
for (int i=0; i<16; i++)
{
digitalWrite(CONTROL0, (i&15)>>3);
digitalWrite(CONTROL1, (i&7)>>2);
digitalWrite(CONTROL2, (i&3)>>1);
digitalWrite(CONTROL3, (i&1));
mux1array[i] = analogRead(1);
}
//This for loop is used to scroll through the THIRD multiplexer
for (int i=0; i<16; i++)
{
digitalWrite(CONTROL0, (i&15)>>3);
digitalWrite(CONTROL1, (i&7)>>2);
digitalWrite(CONTROL2, (i&3)>>1);
digitalWrite(CONTROL3, (i&1));
mux2array[i] = analogRead(2);
}
//The following lines are for printing out results of array0
Serial.print("mux0array: ");
for (int i=0; i<16; i++)
{
Serial.print(mux0array[i]);
Serial.print("-");
}
Serial.println(); //line feed
//The following lines are for printing out results of array1
Serial.print("mux1array: ");
for (int i=0; i<16; i++)
{
Serial.print(mux1array[i]);
Serial.print("-");
}
Serial.println();
//The following lines are for printing out results of array2
Serial.print("mux2array: ");
for (int i=0; i<16; i++)
{
Serial.print(mux2array[i]);
Serial.print("-");
}
Serial.println();
}
And
void setup()
{
//Set MUX control pins to output
pinMode(CONTROL0, OUTPUT);
pinMode(CONTROL1, OUTPUT);
pinMode(CONTROL2, OUTPUT);
pinMode(CONTROL3, OUTPUT);
}
void loop()
{
//Since all 3 multiplexers have the same control pins, the one multiplexer data line we want to
//talk to should be set to output and the other two multiplexer lines should be be 'bypassed' by
//setting the pins to input
//Turn on output to digital pin 14 (MUX 0) and turn off the other 2 multiplexer data pins
pinMode(14, OUTPUT);
pinMode(15, INPUT);
pinMode(16, INPUT);
//This for loop is used to scroll through the FIRST multiplexer
for (int i=0; i<16; i++)
{
//The following 4 commands set the correct logic for the control pins to select the desired input
//See the Arduino Bitwise AND Reference: http://www.arduino.cc/en/Reference/BitwiseAnd
//See the Aruino Bitshift Reference: http://www.arduino.cc/en/Reference/Bitshift
digitalWrite(CONTROL0, (i&15)>>3); //S3
digitalWrite(CONTROL1, (i&7)>>2); //S2
digitalWrite(CONTROL2, (i&3)>>1); //S1
digitalWrite(CONTROL3, (i&1)); //S0
digitalWrite(14, HIGH);
delay(100);
digitalWrite(14, LOW);
delay(100);
}
//Turn on output to digital pin 15 (MUX 1) and turn off the other 2 multiplexer data pins
pinMode(14, INPUT);
pinMode(15, OUTPUT);
pinMode(16, INPUT);
//This for loop is used to scroll through the SECOND multiplexer
for (int i=0; i<16; i++)
{
digitalWrite(CONTROL0, (i&15)>>3); //S3
digitalWrite(CONTROL1, (i&7)>>2); //S2
digitalWrite(CONTROL2, (i&3)>>1); //S1
digitalWrite(CONTROL3, (i&1)); //S0
digitalWrite(15, HIGH);
delay(100);
digitalWrite(15, LOW);
delay(100);
}
//Turn on output to digital pin 16 (MUX 2) and turn off the other 2 multiplexer data pins
pinMode(14, INPUT);
pinMode(15, INPUT);
pinMode(16, OUTPUT);
//This for loop is used to scroll through the THIRD multiplexer
for (int i=0; i<16; i++)
{
digitalWrite(CONTROL0, (i&15)>>3); //S3
digitalWrite(CONTROL1, (i&7)>>2); //S2
digitalWrite(CONTROL2, (i&3)>>1); //S1
digitalWrite(CONTROL3, (i&1)); //S0
digitalWrite(16, HIGH);
delay(100);
digitalWrite(16, LOW);
delay(100);
}
}
I'm a newbie and I understand some commands but many I do not understand.