Convert byte to Bits to display status on web page

Hi

I am trying to convert a byte returned from a ADG2188 analogue cross point switch, so i have the byte 0x10 this represents closed switches between input and output.

this chip is a 8 x 8 matrix of switches and i wish to represent this matrix on a web page.

if i switched on y2 and y3 to x0 then when i queried the status of x0 i would receive back the byte 0x10 representing the binary number 00001100, which if i could use this binary number this would represent nicely the x0 line 8 x 8 matrix connections.

would anyone be able to tell me how i might go about achieving this?

thanks

Simon

have you tried bitRead()?

You could come up with a simple function in your program that does that. It could, for example, receive a byte value, look up the equivalent bits in a switch statement, and do the conversion. This is especially useful if you are using relatively small values.

well i have had a look at bitRead but am a bit lost can i do the below?

// Arrays
byte myCPArray[8] = {0x34, 0x3C, 0x74, 0x7C, 0x35, 0x3D, 0x75, 0x7D};
byte mySwitchStatus [8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
int myXOPArray[8][8];
//////////////////////

void loop() {

for (int k = 0; k < 8; k++);
          {
             for (int l = 0; l < 8; l++);
             {
            
               myXOPArray[k][ bitRead(myCPArray[k],l)];
             }
          }
}

i am getting the below compile errors

sketch_dec01a.ino: In function 'void loop()':
sketch_dec01a.ino:211:25: error: name lookup of 'k' changed for ISO 'for' scoping [-fpermissive]
sketch_dec01a.ino:211:25: note: (if you use '-fpermissive' G++ will accept your code)
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI/SPI.h:16:0,
                 from sketch_dec01a.ino:14:
sketch_dec01a.ino:211:50: error: name lookup of 'l' changed for ISO 'for' scoping [-fpermissive]
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:103:43: note: in definition of macro 'bitRead'
 #define bitRead(value, bit) (((value) >> (bit)) & 0x01)
                                           ^
Error compiling.

thanks for any help you can give

One thing that would help is not having the semicolons on the end of the for lines....

Lol, isn't it amazing, i just could not see those for looking!! i was pulling my hair out trying to find that issue

thank you so much

Simon

Now you just have to make the program do what you intended.
myXOPArray[k][ bitRead(myCPArray[k],l)];may be syntactically correct but does it actually do anything ?

Nope it does not!! so i added some debug

for (int k = 0; k < 8; k++)
          {
            for (int l = 0; l < 8; l++)
            {
              Serial.print ("Output X");
              Serial.print (k);
              Serial.print (" ");
              Serial.print ("Position ");
              Serial.print (l);
              Serial.print (" ");
              Serial.print ("Data in Array ");
              myXOPArray[k][ bitRead(myCPArray[k], l)];
              Serial.print (myXOPArray[k][l]);
              Serial.print ("\n");
            }
            //Serial.print ("\n");
          }

the output is this

Display the readback address 52
Output X0 = 0

Display the readback address 60
Output X1 = 0

Display the readback address 116
Output X2 = 4

Display the readback address 124
Output X3 = 8

Display the readback address 53
Output X4 = 0

Display the readback address 61
Output X5 = 0

Display the readback address 117
Output X6 = 0

Display the readback address 125
Output X7 = 0
Output X0 Position 0 Data in Array 0
 Output X0 Position 1 Data in Array 0
 Output X0 Position 2 Data in Array 0
 Output X0 Position 3 Data in Array 0
 Output X0 Position 4 Data in Array 0
 Output X0 Position 5 Data in Array 0
 Output X0 Position 6 Data in Array 0
 Output X0 Position 7 Data in Array 0
 Output X1 Position 0 Data in Array 0
 Output X1 Position 1 Data in Array 0
 Output X1 Position 2 Data in Array 0
 Output X1 Position 3 Data in Array 0
 Output X1 Position 4 Data in Array 0
 Output X1 Position 5 Data in Array 0
 Output X1 Position 6 Data in Array 0
 Output X1 Position 7 Data in Array 0
 Output X2 Position 0 Data in Array 0
 Output X2 Position 1 Data in Array 0
 Output X2 Position 2 Data in Array 0
 Output X2 Position 3 Data in Array 0
 Output X2 Position 4 Data in Array 0
 Output X2 Position 5 Data in Array 0
 Output X2 Position 6 Data in Array 0
 Output X2 Position 7 Data in Array 0
 Output X3 Position 0 Data in Array 0
 Output X3 Position 1 Data in Array 0
 Output X3 Position 2 Data in Array 0
 Output X3 Position 3 Data in Array 0
 Output X3 Position 4 Data in Array 0
 Output X3 Position 5 Data in Array 0
 Output X3 Position 6 Data in Array 0
 Output X3 Position 7 Data in Array 0
 Output X4 Position 0 Data in Array 0
 Output X4 Position 1 Data in Array 0
 Output X4 Position 2 Data in Array 0
 Output X4 Position 3 Data in Array 0
 Output X4 Position 4 Data in Array 0
 Output X4 Position 5 Data in Array 0
 Output X4 Position 6 Data in Array 0
 Output X4 Position 7 Data in Array 0
 Output X5 Position 0 Data in Array 0
 Output X5 Position 1 Data in Array 0
 Output X5 Position 2 Data in Array 0
 Output X5 Position 3 Data in Array 0
 Output X5 Position 4 Data in Array 0
 Output X5 Position 5 Data in Array 0
 Output X5 Position 6 Data in Array 0
 Output X5 Position 7 Data in Array 0
 Output X6 Position 0 Data in Array 0
 Output X6 Position 1 Data in Array 0
 Output X6 Position 2 Data in Array 0
 Output X6 Position 3 Data in Array 0
 Output X6 Position 4 Data in Array 0
 Output X6 Position 5 Data in Array 0
 Output X6 Position 6 Data in Array 0
 Output X6 Position 7 Data in Array 0
 Output X7 Position 0 Data in Array 0
 Output X7 Position 1 Data in Array 0
 Output X7 Position 2 Data in Array 0
 Output X7 Position 3 Data in Array 0
 Output X7 Position 4 Data in Array 0
 Output X7 Position 5 Data in Array 0
 Output X7 Position 6 Data in Array 0
 Output X7 Position 7 Data in Array 0

but i would have expected Output X2 Position 2 Data in Array 0 to read Output X2 Position 2 Data in Array 1 and Output X3 Position 3 Data in Array 0 to read Output X3 Position 3 Data in Array 1

what am i doing wrong?

I had a idea!!! i know dangerous right? anyway i changed the bitReader line from

myXOPArray[k][ bitRead(myCPArray[k], l)];

to

myXOPArray[k][l] = bitRead(myCPArray[k],l);

so it now looks like this

for (int k = 0; k < 8; k++)
          {
            for (int l = 0; l < 8; l++)
            {
              Serial.print ("Output X");
              Serial.print (k);
              Serial.print (" ");
              Serial.print ("Position ");
              Serial.print (l);
              Serial.print (" ");
              Serial.print ("Data in Array ");
              myXOPArray[k][l] = bitRead(myCPArray[k],l);
              Serial.print (myXOPArray[k][l]);
              Serial.print ("\n");
            }
            //Serial.print ("\n");
          }

however it now produces data in the array but its not correct. clearly i am missing something!! output now looks like this

Display the readback address 52
Output X0 = 0

Display the readback address 60
Output X1 = 0

Display the readback address 116
Output X2 = 4

Display the readback address 124
Output X3 = 8

Display the readback address 53
Output X4 = 0

Display the readback address 61
Output X5 = 0

Display the readback address 117
Output X6 = 0

Display the readback address 125
Output X7 = 0
Output X0 Position 0 Data in Array 0
Output X0 Position 1 Data in Array 0
Output X0 Position 2 Data in Array 1
Output X0 Position 3 Data in Array 0
Output X0 Position 4 Data in Array 1
Output X0 Position 5 Data in Array 1
Output X0 Position 6 Data in Array 0
Output X0 Position 7 Data in Array 0
Output X1 Position 0 Data in Array 0
Output X1 Position 1 Data in Array 0
Output X1 Position 2 Data in Array 1
Output X1 Position 3 Data in Array 1
Output X1 Position 4 Data in Array 1
Output X1 Position 5 Data in Array 1
Output X1 Position 6 Data in Array 0
Output X1 Position 7 Data in Array 0
Output X2 Position 0 Data in Array 0
Output X2 Position 1 Data in Array 0
Output X2 Position 2 Data in Array 1
Output X2 Position 3 Data in Array 0
Output X2 Position 4 Data in Array 1
Output X2 Position 5 Data in Array 1
Output X2 Position 6 Data in Array 1
Output X2 Position 7 Data in Array 0
Output X3 Position 0 Data in Array 0
Output X3 Position 1 Data in Array 0
Output X3 Position 2 Data in Array 1
Output X3 Position 3 Data in Array 1
Output X3 Position 4 Data in Array 1
Output X3 Position 5 Data in Array 1
Output X3 Position 6 Data in Array 1
Output X3 Position 7 Data in Array 0
Output X4 Position 0 Data in Array 1
Output X4 Position 1 Data in Array 0
Output X4 Position 2 Data in Array 1
Output X4 Position 3 Data in Array 0
Output X4 Position 4 Data in Array 1
Output X4 Position 5 Data in Array 1
Output X4 Position 6 Data in Array 0
Output X4 Position 7 Data in Array 0
Output X5 Position 0 Data in Array 1
Output X5 Position 1 Data in Array 0
Output X5 Position 2 Data in Array 1
Output X5 Position 3 Data in Array 1
Output X5 Position 4 Data in Array 1
Output X5 Position 5 Data in Array 1
Output X5 Position 6 Data in Array 0
Output X5 Position 7 Data in Array 0
Output X6 Position 0 Data in Array 1
Output X6 Position 1 Data in Array 0
Output X6 Position 2 Data in Array 1
Output X6 Position 3 Data in Array 0
Output X6 Position 4 Data in Array 1
Output X6 Position 5 Data in Array 1
Output X6 Position 6 Data in Array 1
Output X6 Position 7 Data in Array 0
Output X7 Position 0 Data in Array 1
Output X7 Position 1 Data in Array 0
Output X7 Position 2 Data in Array 1
Output X7 Position 3 Data in Array 1
Output X7 Position 4 Data in Array 1
Output X7 Position 5 Data in Array 1
Output X7 Position 6 Data in Array 1
Output X7 Position 7 Data in Array 0

as ever all help gratefully welcomed

thanks

Simon

Finally. A line of code using bitRead() that does something !
I have not looked at the code in detail, but bitRead() works from the least significant bit to the most significant bit, ie right to left. Could that be your problem ?

I don't think so, as that is what i was expecting, in the current test sequences i am only setting x2 to y2 and x3 to y3. I would only expect 0x04 and 0x08 back from x2 and x3 .

so the data i am getting back is useless to me. so clearly i am doing something wrong. i just cant for the life of me figure out what is going on.

Simon