El problema que tengo es que si incremento una variable cuando llega al 9 parece que se paran los números hasta que llega al 2 el cual muestra a medias. Y el tres también lo muestra a medias, los siguientes los muestra bien hasta que llega al 9 de nuevo.
Por ejemplo: comienzo desde el 40, pues cuando llega al 50, las unidades se quedan en el 9 y se incrementa las decenas. Cuando llega al 52, el dos sale sin la parte superior y el 53 también. Después el 54 sale bien hasta el 59 que vuelve a pasar lo mismo; se incrementa las decenas y el problema de las unidades se repite.
Se puede pensar que no se representa el 0, el 1 y el 2 por un fallo de programación o de montaje, pero si comienzo por el 49 el 50, 51, 52 y 53 salen bien.
Probado en Mega 2560 y un clon estilo paperduino. En ambas placas hacen lo mismo.
Os pongo el código:
int led = 13;
int dispCentenas = 2;
int dispDecenas = 3;
int dispUnidades = 4;
int A = 5;
int B = 6;
int C = 7;
int D = 8;
int number = 49;
int unidad;
int decena;
int centena;
int unidades[4]= {0,0,0,0}; //[3] mayor peso, [0] menor peso
int decenas[4]={0,0,0,0}; //[3] mayor peso, [0] menor peso
int centenas[4]={0,0,0,0}; //[3] mayor peso, [0] menor peso
void setup() {
pinMode(led, OUTPUT);
pinMode(dispCentenas, OUTPUT);
pinMode(dispDecenas, OUTPUT);
pinMode(dispUnidades, OUTPUT);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
analogReference(DEFAULT);
}
void loop() {
//number=analogRead(A3);
number=number+1;
// number=number/2;
trocear(number);
convBinario(unidad, unidades);
convBinario(decena, decenas);
convBinario(centena, centenas);
digitalWrite(led, HIGH);
digitalWrite(dispUnidades, HIGH);
digitalWrite(dispDecenas, LOW);
digitalWrite(dispCentenas, LOW);
digitalWrite(A, unidades[0]);
digitalWrite(D, unidades[3]);
digitalWrite(C, unidades[2]);
digitalWrite(B, unidades[1]);
delay(400);
digitalWrite(led, LOW);
digitalWrite(dispUnidades, LOW);
digitalWrite(dispDecenas, HIGH);
digitalWrite(dispCentenas, LOW);
digitalWrite(A, decenas[0]);
digitalWrite(B, decenas[1]);
digitalWrite(C, decenas[2]);
digitalWrite(D, decenas[3]);
delay(400);
digitalWrite(led, HIGH);
digitalWrite(dispUnidades, LOW);
digitalWrite(dispDecenas, LOW);
digitalWrite(dispCentenas, HIGH);
digitalWrite(A, centenas[0]);
digitalWrite(B, centenas[1]);
digitalWrite(C, centenas[2]);
digitalWrite(D, centenas[3]);
delay(400);
}
void trocear(int numero)
{
int cociente;
int cociente2;
int numero2;
cociente=numero/10;
numero2=cociente*10;
unidad=numero-numero2;
cociente2=cociente/10;
numero2=cociente2*10;
decena=cociente-numero2;
centena=cociente2;
}
void convBinario (int numero, int vector[4])
{
// int vector[4]={0,0,0,0};
int numero2;
int cociente;
int cociente2;
int cociente3;
if (numero != 0)
{
cociente=numero/2;
numero2=cociente*2;
vector[0]=numero-numero2;
if (cociente != 0)
{
cociente2=cociente/2;
numero2=cociente2*2;
vector[1]=cociente-numero2;
if (cociente2 !=0)
{
cociente3=cociente2/2;
numero2=cociente3*2;
vector[2]=cociente2-numero2;
vector[3]=cociente3;
// return vector[4];
}
}
}
}