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
}