Autor Tema: DTMF y String  (Leído 1242 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
DTMF y String
« en: 15 de Septiembre de 2015, 01:35:45 »
Saludos Alguien sabe como convierto un arreglo de byte en un string.
Estoy usando un decodificador de tonos con el integrado 8870, cuando voy recibiendo dígito a dígito (por el puerto asignado)  voy guardado en el siguiente arreglo:

suponiendo que el primer dígito sea "0001" >> 1,

                           RXDTMF=DTMFCODE;
                            i++;
Cuando ya tengo los 4 dígitos. ####
quiero usar esto para enviarlo por el puerto serial

fprintf(uart1,"ID...%s\r\n",RXDTMF);

Pero no funciona, alguien me puede echar una mano...
gracias.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: DTMF y String
« Respuesta #1 en: 15 de Septiembre de 2015, 02:36:29 »
Código: C
  1. RXDTMF=DTMFCODE;
  2.                             i++;

Suponiendo que DTMFCODE sea el nuevo digito que llega, y eso se guarde en RXDTMF, y eso se repite 4 veces, no veo que estes guardando en un array o algo por el estilo. Como

Código: C
  1. RXDTMF[i]=DTMFCODE;
  2.                             i++;

Código: C
  1. RXDTMF=Array;
  2.                            {
  3.                            *RXDTMF++=DTMFCODE;
  4.                             i++;
  5.                            }

Otra cosa mas tenes que recordar que las string tiene un caracter nulo al final, y ademas estan en ASCII
http://www.klcconsulting.net/images/ascii-full.gif

"hola" es igual a ['h','o','l','a','\0']
asi que espero que lo agregues y tengas espacio para ese ultimo caracter.

Si recibis unicamente numeros (0 a 9) entonces te queda 2 formas de hacerlo:

Sumarle 48 o 0x30, asi pasarlo a ASCII, y acordarte de ponerle el \0 al ultimo. Esto te va a permitir usar un
fprintf(uart1,"ID...%s\r\n",RXDTMF);

O usar los numeros ejemplo que recibis 1,2,3 y 4, entonces en tu variable directamente sumas esos valores. Supongamos asi:

Código: C
  1. for (j=0;j<4;j++)
  2. {
  3.   RXDTMF = DTMFCODE * 10^(3-j); // Esto i recibis primero la unidad de mil, si recibis primero las unidades   RXDTMF = DTMFCODE * 10^(j);
  4. }

Y eso te va a permitir usar un

fprintf(uart1,"ID...%d\r\n",RXDTMF);

------------

Si recibis numeros + letras en hexa ( de A a F ) entonces vas atener que preguntar el valor de cada uno de los datos que te llegaron y sumarle el valor correspondiente para transformarlo en una string.

------------

Asi que quedan muchas dudas y no te puedo dar una solucion cierta.

Que valores estan llegando, que rango?, en que formato queres guardarlo?, estan bien guardados?
« Última modificación: 15 de Septiembre de 2015, 02:39:25 por KILLERJC »

Desconectado cvargcal

  • PIC16
  • ***
  • Mensajes: 166
Re: DTMF y String
« Respuesta #2 en: 16 de Septiembre de 2015, 01:01:27 »
Muchas gracia, como siempre eres de mucha ayuda.:
Usando A0-A3, B0   como entradas a data1-data4, y el STB respectivamente.
Código: [Seleccionar]
                      While....
                  {
                         i=0
                        if (input(DTMF_STB)){         // Esperar DTMF_STB alto
                          DTMF_CMD= input(DTMF_Data1)+(2*input(DTMF_Data2))+(4*input(DTMF_Data3))+(8*input(DTMF_Data4))+0x30;
                          RX_DTMF[i]=DTMF_CMD;
                          i++;
                         }
                    
                       if (i==4){
                        i=0;
                        RX_DTMF[4]='\0';  // Reinicio contador y agrega un null
                       fprintf(uart1,"ID...%s\r\n",RXDTMF);   //Enviar al UART ####
                      }

                 }

Hasta el momento funciona como quiero, que es solo tomar 4 dígitos del ID de la llamada.
Muchas gracias.
« Última modificación: 16 de Septiembre de 2015, 01:06:25 por cvargcal »


 

anything