Fallo en el programa en los resultados


hola, 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 ver si alguien me puede detectar el fallo.  yo no le veo.
ahí va el código :
javi hs:
code: [select]
// 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 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 ::) , 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:
code: [select]
serial.print(numero[i], bin);

¿conoces la recursividad? es la forma más simplificada posible de conversión binario.

code: [select]
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 convertir. el digito se obtiene mediante el residuo de dicha división.


pd:
code: [select]
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.


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Fallo en el programa en los resultados


arduino

Comments

Popular posts from this blog

Flip address is out of range arduino uno r3

Arduino Uno not uploading

Indesign and MathType fonts