I'm trying to convert the input of the GPIOs of a raspberry pi to a int. So I have five digital inputs and want to read the inputs. Once i got the values I store them in an array. The next thing would be to convert the content of the array to a int number.
So here's my code:
int a = digitalRead(PIN_16);
int b = digitalRead(PIN_18);
int c = digitalRead(PIN_22);
int d = digitalRead(PIN_24);
int e = digitalRead(PIN_26);
int array[5];
array[0]=a;
array[1]=b;
array[2]=c;
array[3]=d;
array[4]=e;
To convert the content of the array to a number I would youse if conditions to see if the first input is 1 or 0. If its 1 I a 1, else 0. And so on ... .
My question now is if there's a more elegant way to do this.
Just "shift" bits into the appropriate positions in the number:
unsigned int number = 0;
for (int i=0; i<5; i++)
{
number |= a[i] << i;
}
This will work in case digitalRead
is returning 0
or 1
only. In case it returns 0
or a non-zero
values we will need to check it against zero instead:
unsigned int number = 0;
for (int i=0; i<5; i++)
{
number |= (a[i] != 0) << i; // (a[i] != 0) will have a value of `1` for any non-zero `a[i]`
}
or even more idiomatic trick:
number |= !!a[i] << i;
This is a double logical negation. The first one will turn any non-zero into 0
, the second will turn the 0
into 1
.