Hi, I have some IR sensors that I want to put through a single analog pin via a multiplexer 4051. I will eventually be wanting 20+ sensors so hence why I'm going down the multiplexer route.
I have some basic code to take readings through each multiplexed input but as I'm fairly new to programming I was wondering if this can be compacted down using for loops etc? I'm not sure if you can loop through different variables like the binary required to control the 4051?
int MuxPin0 = 14;
int MuxPin1 = 15;
int MuxPin2 = 16;
int TestPin = 17;
void setup() {
pinMode(MuxPin0, OUTPUT);
pinMode(MuxPin1, OUTPUT);
pinMode(MuxPin2, OUTPUT);
pinMode(TestPin, INPUT);
int ReadAnalogueSensor();
}
void loop() {
if (TestPin = HIGH)
{
ReadAnalogueSensor(5);
}
}
void ReadAnalogueSensor(int aPin) {
bool MUX01[] {LOW, LOW, LOW}; //0
bool MUX01ON;
bool MUX02[] {HIGH, LOW, LOW}; //1
bool MUX02ON;
bool MUX03[] {LOW, HIGH, LOW}; //2
bool MUX03ON;
bool MUX04[] {HIGH, HIGH, LOW}; //3
bool MUX04ON;
bool MUX05[] {LOW, LOW, HIGH}; //4
bool MUX05ON;
bool MUX06[] {HIGH, LOW, HIGH}; //5
bool MUX06ON;
bool MUX07[] {LOW, HIGH, HIGH}; //6
bool MUX07ON;
bool MUX08[] {HIGH, HIGH, HIGH}; //7
bool MUX08ON;
int AOut;
int Threshold = 500;
digitalWrite(MuxPin0, MUX01[0]);
digitalWrite(MuxPin1, MUX01[1]);
digitalWrite(MuxPin2, MUX01[2]);
AOut = analogRead(aPin);
if (AOut > Threshold)
{
MUX01ON = true;
return MUX01ON;
}
digitalWrite(MuxPin0, MUX02[0]);
digitalWrite(MuxPin1, MUX02[1]);
digitalWrite(MuxPin2, MUX02[2]);
AOut = analogRead(aPin);
if (AOut > Threshold)
{
MUX02ON = true;
return true;
}
digitalWrite(MuxPin0, MUX03[0]);
digitalWrite(MuxPin1, MUX03[1]);
digitalWrite(MuxPin2, MUX03[2]);
AOut = analogRead(aPin);
if (AOut > Threshold)
{
MUX03ON = true;
return true;
}
digitalWrite(MuxPin0, MUX04[0]);
digitalWrite(MuxPin1, MUX04[1]);
digitalWrite(MuxPin2, MUX04[2]);
AOut = analogRead(aPin);
if (AOut > Threshold)
{
MUX04ON = true;
return true;
}
digitalWrite(MuxPin0, MUX05[0]);
digitalWrite(MuxPin1, MUX05[1]);
digitalWrite(MuxPin2, MUX05[2]);
AOut = analogRead(aPin);
if (AOut > Threshold)
{
MUX05ON = true;
return true;
}
digitalWrite(MuxPin0, MUX06[0]);
digitalWrite(MuxPin1, MUX06[1]);
digitalWrite(MuxPin2, MUX06[2]);
AOut = analogRead(aPin);
if (AOut > Threshold)
{
MUX06ON = true;
return true;
}
digitalWrite(MuxPin0, MUX07[0]);
digitalWrite(MuxPin1, MUX07[1]);
digitalWrite(MuxPin2, MUX07[2]);
AOut = analogRead(aPin);
if (AOut > Threshold)
{
MUX07ON = true;
return true;
}
digitalWrite(MuxPin0, MUX08[0]);
digitalWrite(MuxPin1, MUX08[1]);
digitalWrite(MuxPin2, MUX08[2]);
AOut = analogRead(aPin);
if (AOut > Threshold)
{
MUX08ON = true;
return true;
}
}
Thanks