Perdon fue un error mio... Junte los dos codigos y mientras los escribia me olvide de cambiar algunas cosas.. Me olvide de quitar un "- '0'" al convertirlo, que ya lo habia realizado antes
Ese error hacia que la conversion no fuera correcta.
Entonces voy a escribir dos codigos... con sus ventajas y desventajas
El primero este, y explicado:
while(True){
// Se lee la tecla
k=tecla_time();
/*
* Aca reviso que si la tecla que se presiono no sea la misma que antes, como el while se repite MUCHAS veces
* mientras alguien tiene el dedo en el teclado, necesito solo discriminar una sola, si detecta en cada paso del while
* la misma tecla entonces no hace nada.
*/
if(ultimopresionado != k ){
/*
* De ser distinta la tecla entra aca... Aca me centro en si esa tecla me interesa o no....
* Si es un '\0' (ninguna tecla presionada) simplemente salgo, sino verifico si es un numero que son los que me interesan
* Si quisiera agregar una tecla de letra con otra funcionalidad podria agregarlo en un else de este if
*/
if ( k >= '0' && k<='9'){
/*
* Como es un numero lo guardo como un numero, asi es mas simple su conversion, a no ser
* que necesites explicitamente guardarlo como caracter
*/
cadena1[j]=k-'0';
// Aumento el indice para ocupar el proximo lugar del array
j++;
}
/*
* Esta es la rutina de conversion, unicamente funcionaria cuando se completó el array
* Podes observar que la condicion para que entre es que j supero el numero maximo de valores
*/
if(j==sizeof cadena1){
// Pongo a 0 mi variable asi puedo operar, por si es que habia algun valor antes
numerocadena=0;
/*
* Paso por cada digito, lo multiplico por 10 y luego lo sumo
* Esto lo verias de la siguiente forma, por ejemplo si tuviera 1,2,3,4
* Paso 1: numerocadena = 1
* Paso 2: Al multiplicarlo por 10, me queda 10 y le suma el 2, quedando 12
* Paso 3: numerocadena = 123
* Paso 4: numerocadena = 1234
*/
for(i=0;i<sizeof cadena1;i++) {
numerocadena *= 10;
numerocadena += cadena1[i];
}
// Finalmente imprimo el resultado
lcd_gotoxy(1,1);
printf(lcd_putc
,"%Lu",numerocadena
);
// Comienza de nuevo a tomar datos
j=0;
}
}
/*
* Lo ultimo que se presiono se guardo en k, por lo tanto necesito actualizar este
* valor para que la misma tecla no vuelve a entrar
*/
ultimopresionado = k;
}// while
}// main
Este posee la ventaja de que si deseas agregar alguna tecla aparte, es sencillo de realizar, por ejemplo el '#' para borrar todo y comenzar de 0.
Lo feo es que
no muestra ni convierte hasta tener los 4 valores.
Otra de las formas que uno puede hacer este código, es ir mostrando el valor que se va escribiendo ya se con los ceros o sin ellos.. Esto solo modifica la forma de imprimirlos sobre el LCD
while(1){
char k;
k = tecla_time();
if(ultimopresionado != k ){
if ( k >= '0' && k<='9'){
if(j==0){numerocadena=0;}
cadena1[j]=k-'0';
numerocadena*=10;
numerocadena += cadena1[j];
lcd_gotoxy(1,1);
printf(lcd_putc
,"%04Lu",numerocadena
); if(++j== sizeof cadena1) {j=0;}
}
}
ultimopresionado = k; // Pequeña traba para que no tome varias veces el mismo numero
}// while
Util y sencillo si vas a borrar todo con un solo boton.... Pero si pensas borrar 1 solo valor, por ejemplo pusiste 124 y era 123, donde queres borrar ese 4, entonces este codigo no te va a servir... Vas a necesitar convertir TODO el numero en cada cambio que se realice. Es donde vas a realizar un hibrido entre este codigo y el anterior.
Tambien puede ser que quieras que el numero vaya desplazandose, es decir si tenes 1234 y presionas un 5, que quede 2345.
Pero todo esto queda a tu imaginacion y en lo que buscas hacer...
------------------------------------------------------------------------------------------------------
Respecto a:
pero lo que quiero hacer mas que nada es tengo el vector y ingreso en la posición[0]=1 y en la posición[1]=2, formar un 12 y imprimirlo igual si ingreso 3 posiciones y se ingresaron 1,2,3... poder formar 123, ya que el teclado no me deja escribir esa cifra y luego guardarla. trate de buscar con puntero pero no encontré como hacer eso. no se que método se utiliza para hacer cifras de un vector estático.
Pasar de 4 numeros separados a un numero completo es simplemente algo asi:
numero = posicion[0] * 1000 + posicion[1] * 100 + posicion[2] * 10 + posicion[3]Pero esto lo podemos hacer de forma mas simple con un for y sumas, que es lo que pase:
for(i=0;i<sizeof cadena1;i++) {
numerocadena *= 10;
numerocadena += cadena1[i];
}
Y es la forma en que pasas de todos los numeros separados en 1 solo.