Ir ao conteúdo
  • Cadastre-se

C Converter um caractere de várias letras em uma STRING


Posts recomendados

Olá, pessoal,

 

Mexo com microcontroladores, antigamente com PIC e agora com ARM (plataforma LPCXpresso). 

Ambos utilizam a linguagem C. 

 

Meu problema é o seguinte: Preciso converter um caractere que vem da UART (porta de comunicação). No PIC havia uma função pronta para tal, no ARM não. 

 

O caractere chega assim, por exemplo: P123 (tudo junto), e eu queria separar em:

dado_recebido[]={'P', '1', '2', '3'}; 

Para poder utilizar um switch 

switch(dado_recebido[0])

{

case 'P':....

}

 

alguém tem alguma ideia de como posso fazer a conversão? 

 

Agradeço desde já. 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

A leitura é feita através de uma interrupção dentro do microcontrolador, que utiliza a função: 

void UART0_IRQHandler()
{
       unsigned char Buffer_RX;

       Buffer_RX= LPC_UART0->RBR;

    

}

o "LPC_UART0->RBR" é do microcontrolador, são os dados que são recebidos pela comunicação. 

O problema ´que eu queria acessar, por exemplo "P123" caractere por caractere. Mas ele fica fixo em uma posição só, como tentei fazer abaixo: 

void UART0_IRQHandler()
{
       unsigned char Buffer_RX[]={"  "};
       int i; 
       
       for(i=0; i<2; i++)
       {
    	   Buffer_RX [i]= LPC_UART0->RBR;
       }

   

}

Ele ta jogando toda "a mensagem" dentro da posição [0].  

 

Ele ta ficando todo como um "caractere" dentro de uma unica posição. Queria que cada caractere estivesse dentro de cada posição. 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Eduardo Cesar Lenz disse:

Ele ta jogando toda "a mensagem" dentro da posição [0]

 

Isso não é possível, não há como colocar mais de 1 caractere dentro de uma variável char... Por isso não entendemos o que quer dizer com isso.

 

Para ficar tudo na posição [0] só se for uma matriz de strings, algo do tipo:

unsigned char m[3][5] = { {  'P',  '1',  '2',  '3', '\0'},
                          { '\0', '\0', '\0', '\0', '\0' },
                          { '\0', '\0', '\0', '\0', '\0' } };

Nesse caso m[0] contém a string "P123" e usaria m[0][0] para acessar o caractere 'P'.

 

 

Se não for esse o caso, então talvez a variável poderia estar sendo usada como um tipo inteiro? E na verdade nesse caso 123 seria um número inteiro ao invés de uma string, e talvez P é um estado indicado pelo bit mais significativo estar ligado ou desligado? Nesse caso aí o que você quer é converter um inteiro para string. Mas estou apenas dando chutes aleatórios nesse ponto, pois não temos informação suficiente sobre o que quer dizer com a mensagem estar na posição [0].

Link para o comentário
Compartilhar em outros sites

O código abaixo, teoricamente, deveria funcionar assim: Recebe os dados, coloca cada caractere em uma posição, envia a primeira posição de volta na comunicação (quando funcionar eu quero fazer uma cadeia de ações por ex: Caso A faz tal coisa, Caso P faz tal coisa...)... A parte do While que envia de volta os dados, ou imprime melhor dizendo. 

void UART0_IRQHandler()
{
       unsigned char Buffer_RX[]={"  "};
       int i;

       for(i=0; i<2; i++)
       {
    	   Buffer_RX[i]= LPC_UART0->RBR;
       }

       while(!(LPC_UART0->LSR&(1<<5)));
	   LPC_UART0->THR = Buffer_RX[0];

}

O problema, que, por exemplo, quando eu envio "P1" para ele, ele ta armazenando apenas em Buffer_RX[0]. Isso que ta me dando problema. 

Na imagem eu mostro através do programa "terminal" -> Estou enviando "P1", imprimo a posição "0" e ele está me retornando P1. Teste.png.5fe499883afe8d1176ed1350c3478ad3.png

 

Link para o comentário
Compartilhar em outros sites

Não tenho qualquer experiência com LPCXpresso, mas acho que a função UART0_IRQHANDLER lê apenas um byte por vez e LPC_UART0->RBR retorna apenas o byte que está sendo lido no momento. você pode resolver se torna as variáveis globais. Veja se assim funciona. 

 

unsigned char Buffer_RX[]={"  "};
int i = 0;

void UART0_IRQHandler()
{
       
	 if (i < 3)
     {
       Buffer_RX[i] = LPC_UART0->RBR;
      
      i++;
     }
        while(!(LPC_UART0->LSR&(1<<5)));
	   LPC_UART0->THR = Buffer_RX[0];
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...