Fallo en el programa en los resultados

Hola, he realizado un programa que obtiene de un numero binario al azar en un array su número equivalente en decimal.
El problema, no sé porque falla en el resultado en una unidad. Es decir si el número binario es 1000 su resultado es 7 en vez de 8. Paradojicamente si el binario es 0001 da bien el resultado.
Los cálculos del bit en cuestion salen bien, el problema no se porque es al añadirlo en la variable "numbyte" al sumar cosa que no entiendo.
El programa muestra el proceso detallado a ver si alguien me puede detectar el fallo. Yo no le veo.
Ahí va el código :
Javi HS:

// Calculo de un numero decimal desde un numero binario

byte numero[4]={0,0,0,0};
byte numbyte = 0;


void setup() 
{
 Serial.begin(9600);
 randomSeed(millis());
}

void loop() 
{
 numbyte = random(16);
 for(int i=0;i<4;i++)
 {
   numero[i] = bitRead(numbyte,i);
 }

 // muestro el array binario
 Serial.println("-----------------------------------------------");
 for(int i=0;i<4;i++)
 {
   Serial.print(numero[i]);
 }Serial.println();
 Serial.println("-----------------------------------------------");

 // Calculo de binario a decimal
 numbyte = 0;
 for(int i=0;i<4;i++)
 {
   numbyte = numbyte + ((numero[i]) * ((pow(2,(3-i)))));

   Serial.println("CALCULOS");
   Serial.print("numero["); Serial.print(i); Serial.print("]= "); Serial.println(numero[i]);
   Serial.print("pow(2,"); Serial.print(3-i); Serial.print(")= "); Serial.println(pow(2,(3-i)));
   Serial.print("(numero[i]) * ((pow(2,(3-i)))))= "); Serial.println(((numero[i]) * ((pow(2,(3-i))))));
   Serial.print("numbyte = "); Serial.println(numbyte);
 }

 // Mostramos resultado
 Serial.print("El numero en decimal es: ");
 Serial.println(numbyte);

 // retrasamos un tiempo suficiente para proceder al siguiente numero
 delay(30000); // 30 seg
}

Quizá te arruine todo el esfuerzo que has puesto en la conversión ::slight_smile: , pero permiteme decirte que existen otras mejores:

print tiene un parámetro que le dice en que sistema representar el número entero. Tan simple como:

Serial.print(numero[i], BIN);

¿Conoces la recursividad? Es la forma más simplificada posible de conversión a binario.

void imprimirBinaro(unsigned long n) {
  if (n < 2) {
    Serial.print(n);
    return;
  }
  imprimirBinario(n / 2);
  Serial.print(n % 2);
}

El fundamento de esta implementación, está en la división sucesiva entre el número de la base a convertir. El digito se obtiene mediante el residuo de dicha división.

PD:

for(int i=0;i<4;i++)
{
  Serial.print(numero);
}

Esa no es la forma de iterar sobre un array; te olvidaste de especificar el índice.