You are right the code is getting more difficult to understand but I think since we kind of developed it "together" I truly understood every step (but the map() thing )
In case I forget something I'll always be able to look it up in this thread
I included your clearTwoBits function. It will come handy as soon as I build my 20 hole final version.
Works perfectly.
//defining pins
int S0 = 8;
int S1 = 9;
int S2 = 10;
int SensorPin = A0;
int dataPin = 2;
int latchPin = 3;
int clockPin = 4;
//defining variables
int sCup[6] ;
byte LEDpattern[] = {B00000000, B00000000};
byte maskCup[] = {B00000011, B00001100, B00110000, B11000000, B00000011, B00001100};
int SOvalue[] = {0,1,0,1,0,1};
int S1value[] = {0,0,1,1,0,0};
int S2value[] = {0,0,0,0,1,1};
void setup()
{
//Configure each IO Pin
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(SensorPin, INPUT);
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop() {
//read out sensor values and store them in sCup[]
for (int i=0 ; i<6 ; i++)
{
digitalWrite (S0, SOvalue[i]);
digitalWrite (S1, S1value[i]);
digitalWrite (S2, S2value[i]);
sCup[i] = analogRead (SensorPin);
}
//adjust LED pattern to SensorValues and shift out data
for (int i = 0 ; i < 6 ; i++)
{
int value = (sCup[i] < 500) ? LOW : HIGH;
int patternValue = (i < 4) ? LOW : HIGH;
switch (value)
{
case 0:
LEDpattern[patternValue] = (LEDpattern[patternValue] | maskCup[i]);
break;
case 1:
switch (i)
{
case 0:
clearTwoBits(0, 0, 1);
break;
case 1:
clearTwoBits(0, 2, 3);
break;
case 2:
clearTwoBits(0, 4, 5);
break;
case 3:
clearTwoBits(0, 6, 7);
break;
case 4:
clearTwoBits(1, 0, 1);
break;
case 5:
clearTwoBits(1, 2, 3);
break;
}
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, LEDpattern[1]);
shiftOut(dataPin, clockPin, MSBFIRST, LEDpattern[0]);
digitalWrite(latchPin, HIGH);
}
}
//defining Function to clear two bits
void clearTwoBits(int patternNumber, int firstBit, int secondBit)
{
bitClear(LEDpattern[patternNumber] , firstBit);
bitClear(LEDpattern[patternNumber] , secondBit);
}