Here is another way to do your comparison to the reference. It uses memcmp to compare the received array to the reference. You do not need to combine the received bits.
Since your received arrays are fixed and the reference array is known, you actually only need to identify the received array to know the difference from the reference.
const byte possibleReceivedValue[15][15] =
{
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
};
//referenceValue 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0
//matches possibleReceivedValue[6][15]
byte actualReceivedValue[15] = {};
byte matchNumber;
void setup() {
Serial.begin(115200);
}
void loop() {
//random test loop to create actualReceivedValue
Serial.println(" | ");//mark reference length
byte r = random(0, 15);//exclusive of upper bound
for (byte k = 0; k < 15; k++)
{
actualReceivedValue[k] = possibleReceivedValue[r][k];
Serial.print(actualReceivedValue[k]);
}
Serial.println();
//test for match with memcmp
for (byte i = 0; i <= 15; i++)
{
if ((memcmp(actualReceivedValue, possibleReceivedValue[i], 15)) == 0)
{
matchNumber = i;
Serial.print("receivedValue matches possibleValue = ");
Serial.println(i);
}
}
switch (matchNumber)
{
case 0:
Serial.println("+6X");
break;
case 1:
Serial.println("+5X");
break;
case 2:
Serial.println("+4X");
break;
case 3:
Serial.println("+3X");
break;
case 4:
Serial.println("+2X");
break;
case 5:
Serial.println("+1X");
break;
case 6:
Serial.println("no difference");
break;
case 7:
Serial.println("-1X");
break;
case 8:
Serial.println("-2X");
break;
case 9:
Serial.println("-3X");
break;
case 10:
Serial.println("-4X");
break;
case 11:
Serial.println("-5X");
break;
case 12:
Serial.println("-6X");
break;
case 13:
Serial.println("-7X");
break;
case 14:
Serial.println("-8X");
break;
}
delay(2000);
}