Suma binaria para calculo de entradas activas.

Hola a todos.
Me llamo Alvaro y soy nuevo en el foro.
He encontrado una solución a mi problema y la expongo aquí para compartirla por si a alguien le es de utilidad o puede ser mejorada.
Para mi proyecto necesitaba calcular que entradas de arduino estaban activas, y compararlas con una estructura para asociar a esa combinación un funcionamiento.
considerando 0 la primera entrada y 7 la ultima ( en mi proyecto uso otras para dejar libre el puerto serial) podemos hacerlo sumando 2 elevado al numero de entrada si esta esta activa, si no pues que no sume nada.
Como no funcionaba he aislado la función y he generado un pequeño bucle para comprobar que fallaba.

void setup(){
  Serial.begin(300); // comunicacion serial
}

void loop(){
unsigned int suma =0;
  for (int  a=7;  a >= 0; a--) {
      suma =(pow ((2),a));//me dice el numero que sumaria por cada pulsador 
      Serial.print(suma);//lo imprime
      Serial.print("\t");//esto es un tabulador entre valores

    }
   
   Serial.println();
   }

El resultado de esto en el serial es la primera foto adjunta

127 63 31 15 7 3 2 1

Como se ve no es la suma de numeros que esperaba.
Cambiando a Suma el tipo de numero a float obtengo el resultado deseado(segundo archivo adjunto).

128 64 32 16 8 4 2 1

No obstante agradecería que alguien me escribiera una explicación exacta y racional de por que sucede este tipo de calculo, imagino que se deberá a algún tipo de desbordamiento del tipo int, pero no lo logro entender.

Muchas gracias.

según la referencia http://arduino.cc/en/Reference/Pow debes pasar dos float como parámetros para que funcione.

un saludo

[edito]

y devuelve un double.

Si utilizas otro tipo de datos está claro que estás sesgando datos. saludos

SrDonGato

Mil gracias.

Efectivamente, ahora lo entiendo.

Hola,

Por curiosidad...¿qué es extamente lo que quieres hacer? Los pines de Arduino se engloban en puertos. Puedes ver como usarlos aquí => Arduino Reference - Arduino Reference .
Usandolo con combinación de máscaras y operaciones de bitwise,ya lo tendrías... ¿no?
O usando la función bitRead().