TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: JANDAL en 14 de Marzo de 2014, 20:16:52

Título: Convertir vector a entero en CCS
Publicado por: JANDAL en 14 de Marzo de 2014, 20:16:52
Hola, ante todo un saludo a todos y felicitarlos por este espacio. Estuve leyendo aqui pero encontré específicamente lo que necesito. Agradezco la ayuda.
Estoy haciendo un programa en ccs para configurar un DS1307, leo datos con un teclado con k=kbd_getc() y armo un arreglo de 3 datos, asi: unsigned char array[3],
pero necesito pasar este vector a un numero entero. No se como hacerlo, he hecho de todo, atoi(), etc y etc, estaría enormemente agradecido por la ayuda. Como paso
este vector a un entero??? les dejo el codigo que hice en esa parte

   while(a<=1){                //Para dos datos
      k=kbd_getc();            //Lee el teclado
      x=k-48;
      if (k!=0)                //Si se ha pulsado alguna tecla
         {array[a]=x;           //se guarda en la posición correspondiente
          a++;             
           }     
         }
         Ensayohoy.dia=atoi(array); //no me funciona
         printf(lcd_putc,"\f DIA %2u ",Ensayohoy.dia);  //siempre muestra cero
         delay_ms( 500 );
Título: Re: Convertir vector a entero en CCS
Publicado por: BrunoF en 14 de Marzo de 2014, 22:02:05
Hola,

falta información. Qué es lo que querés hacer? Explícalo y detállalo lo mejor posible. Qué tipo de variable es Ensayohoy.dia?
La comprobación de k!= 0, debe hacerse antes de restarle el valor 48 al leído. Sino si presionas el 0 no te va a funcionar. Pero hasta no saber bien cuál es el comportamiento que deseas lograr, dificil ayudarte.

Saludos
Título: Re: Convertir vector a entero en CCS
Publicado por: jfh900 en 15 de Marzo de 2014, 08:36:51
La cadena debe de terminar en cero:

array[a]='\0';

Un saludo
Título: Re: Convertir vector a entero en CCS
Publicado por: JANDAL en 17 de Marzo de 2014, 03:19:30
Hola bruno gracias por le interes de ayudarme.
Es decir necesito convertir la vector array[3]={2,5} a un entero 25
Título: Re: Convertir vector a entero en CCS
Publicado por: rivale en 18 de Marzo de 2014, 11:30:38
Hola bruno gracias por le interes de ayudarme.
Es decir necesito convertir la vector array[3]={2,5} a un entero 25


Como te comenta jfh900 tu cadena debe terminar en 0
si ya tienes un vector con los datos v[0]='2' y v[1]='5'  al siguiente elemento de la cadena v[2]=0 y puedes usar la función atoi, toma en cuenta que tus elementos a converir deben ser ascii, y el elemento final es un 0 en decimal  0 != '0'.

Saludos
Título: Re: Convertir vector a entero en CCS
Publicado por: MerLiNz en 18 de Marzo de 2014, 11:51:52
no es igual '2' que un 2 a secas, el primero da el codigo de ascii y el segundo es un numero.

Si sabes el numero determinado del array siempre puedes usar el metodo de decenas, centenas...

numero=array[2]*100+array[1]*10+array[0];
Título: Re: Convertir vector a entero en CCS
Publicado por: rivale en 18 de Marzo de 2014, 11:59:13
no es igual '2' que un 2 a secas, el primero da el codigo de ascii y el segundo es un numero.

Si sabes el numero determinado del array siempre puedes usar el metodo de decenas, centenas...

numero=array[2]*100+array[1]*10+array[0];

exacto!

'2' =0x32
y
2=0x02


Tendría que revisar si la libreria de kbd regresa el valor en ascii o en entero, nunca la he usado, pero por el kbd_getc yo diría que es ascii
Título: Re: Convertir vector a entero en CCS
Publicado por: jfh900 en 18 de Marzo de 2014, 13:23:39
No te funciona tampoco por que estas convirtiendo caracteres en números => x-48 <=. Elimina esta línea y añade un cero al final de la cadena con lo que funcionará "atoi".

Un saludo
Título: Re: Convertir vector a entero en CCS
Publicado por: BrunoF en 18 de Marzo de 2014, 14:56:56

   while(a<2){                //Para dos datos
      k = kbd_getc();            //Lee el teclado
      if (k != 0)                //Si se ha pulsado alguna tecla
         array[a++] = k - 0x30;           //se guarda en la posición correspondiente   
   }
         Ensayohoy.dia= array[0] * 10 + array[1];
         printf(lcd_putc,"\f DIA %2u ",Ensayohoy.dia);  //siempre muestra cero
         delay_ms( 500 );