Right Now I'm now I'm trying to get an LED blinking on on of the MUX's pins. I have been able to use the example code to do so but I'm lost on how to select any one pin or set of pins.
This code is what I got from the example code. (http://mayhewlabs.com/code/Mux_Shield_DigitalOut_Example.pde)
#define CONTROL0 5 //MUX control pin 0 (S3 is connected to Arduino pin 2)
#define CONTROL1 4
#define CONTROL2 3
#define CONTROL3 2
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
int i=14;
{
//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);
}
}
Here is the code I'm trying to get working.
//Give convenient names to the control pins
#define CONTROL0 5 //MUX control pin 0 (S3 is connected to Arduino pin 2)
#define CONTROL1 4
#define CONTROL2 3
#define CONTROL3 2
void setup()
{
//Set MUX control pins to output
pinMode(CONTROL0, OUTPUT);
pinMode(CONTROL1, OUTPUT);
pinMode(CONTROL2, OUTPUT);
pinMode(CONTROL3, OUTPUT);
}
void loop() {
pinMode(1, OUTPUT);
pinMode(7, INPUT);
pinMode(0, INPUT);
int i=1;
{
//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(1, HIGH);
delay(400);
digitalWrite(1, LOW);
delay(200);
}
}
If I input in the right pin number for pin 14 M0 it works. I have found with the code from the example code 0, 16, and 8 are interchangeable. I have a feeling that these three lines have something to do with it.
digitalWrite(CONTROL0, (i&15)>>3); //S3
digitalWrite(CONTROL1, (i&7)>>2); //S2
digitalWrite(CONTROL2, (i&3)>>1); //S1
digitalWrite(CONTROL3, (i&1)); //S0
But I can't find the relation. How does one pick which pin from with group to use as I/O etc?