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:
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:
¿conoces la recursividad? es la forma más simplificada posible de conversión binario.
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:
esa no es la forma de iterar sobre un array; te olvidaste de especificar el índice.

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
Post a Comment