Code to Read the Binary Inputs on Analog Buttons

Does anyone have example code on how to read the binary digits from the OIs analog inputs? According to Mike only the first 4 binary digits are used to determine buttons being pressed.

For Example:

1000 0000 = Button 1
0100 0000 = Button 2
0010 0000 = BUtton 3
0001 0000 = Button 4

The trouble is the last four digits are random and fluctuate greatly
depending on what mood the chicklet is in so sometimes

1000 0000 = Button 1
or
1000 0001 = Button 1
or
1000 0010 = Button 1

The problem is we really don’t want to make 4 cases for every button.
So we just want to ignore them.

The important thing is to use the bitwise AND function in C (&). That’s what it’s designed for.

Make a set of global variables, and a function that you call every time through the loop that sets these variables from the OI state.

Something like this should work (and I’ve gotta love any chance I have to legitimately use C’ ?: trinary operator) :


int p1_sw_5,p1_sw_6,p1_sw_7,p1_sw_8; // Virtual buttons

void Buttons(void)
{
   p1_sw_5=(p1_aux&1<<7)?0:1;
   p1_sw_6=(p1_aux&1<<6)?0:1;
   p1_sw_7=(p1_aux&1<<5)?0:1;
   p1_sw_8=(p1_aux&1<<4)?0:1;
}


Nice, never used that before :slight_smile:

now correct me if im wrong but isnt your use of the ? operator the same as the ! operator

im pretty sure that

p1_sw_5 = !(p1_aux&1<<7);
will do the same as
p1_sw_5=(p1_aux&1<<7)?0:1;

the “(statement)?true:false” syntax is like an if statement in one line
if statement, then true, else false

in this case, however, it would do the same

You are correct.