Ir ao conteúdo
  • Cadastre-se

Arduino Como receber e desmontar strings de "floats" em C?


Posts recomendados

Olá, glra...gente, alguém sabe como faço pra receber uma string com valores de vários sensores e desmontá-la a partir de caracteres delimitadores?

 

Por exemplo estou enviando pela Serial do Arduino ao Esp01 a seguinte string:

 "#34;54;67;99*"

Onde # delimita inicio, ; separa os valores e * indica o fim da string...preciso receber os valores sempre numa mesma ordem.

Se alguém puder ajudar agradeço..

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

@WMAC   creio que você possa pegar os caracteres da string ,  que são os  caracteres ASCII , e que vão de zero até 255 ,  assim
    você desmembra a string caractere por caractere .    e para isso informe a posição da string e verifique    se é '#' ( o que está entre aspas simples é caractere)    ou '*' o fim dessa string .    ou ';' ponto_e_virgula    e então um código poderia assim :

void setup() {
  /*
    "#34;54;67;99*"
    os caracteres ASCII vão de zero até 255 ,  assim
    você desmembra a string caractere por caractere .
    e para isso informe a posição da string e verifique
    se é '#' ( o que está entre aspas simples é caractere)
    ou '*' o fum dessa string .
    ou ';' ponto_e_virgula
    e então um código poderia assim :
*/
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
/*int main()
{*/
    char string[15] = {"#34;54;67;99*"};
    char matriz[10][6];
    char aux[6];
    int nums[10];
    int j = 0, cont = 0,
        k = 0;
    do
    {
        if(string[j] == '#' )                          // inicio da string , esse caractere será ignorado
        {
            printf("cerquilha , iniciO a string\n\n"); // escreve essa msg
        }
        else                                           // senão
        {
            if(string[j] == '*')                       // chegou ao final da string ?
            {
                break;                                 // sai do loop , pois terminou a string
            }
            if(string[j] != ';')                       // então é um dígito numerico
            {
                aux[cont] = string[j];                 // armazena em aux
                cont++;                                // incrementa o contador de caracteres de aux
            }
            else                                       // senão , então é ponto_e_virgula fim desse numero
            {
                aux[cont] = '\0';                      // armazena em aux o caractere nulo finalizador de string
                cont = 0;                              // contador para usar na variavel aux
                strcpy( matriz[k] , aux );             // guarda essa string em uma matriz na pos indicada por k
                nums[k] = atoi( aux );                 // guarda o númerodo tipo inteiro em nums , também na pos indicada por k
                k += 1;                                // incrementa k para indicar a próxima pos
            }
        }
        j++;                                           // incrementa j para ler o próximo caractere da string
    }while(string[j] != '*' );
    printf("numeros em string  |   | numeros inteiros\n");
    for(j=0; j<k; j++)
    {
        printf("\t%s <----   |   | ------> %d\n",matriz[j],nums[j]);
    }
    return 0;



}

void loop() {
  // put your main code here, to run repeatedly:

}

e com float's seria a mesma coisa porém você irá fazer mais uma comparação para ver se é ponto ,  e use essa função "ftoa"  criada pelo usuário  ,

https://www.clubedohardware.com.br/forums/topic/1555128-erro-ftoa-não-definido/?tab=comments#comment-8233892

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Que tal se recebesse o pacote todo ou numa área de ram (buffer) maior que a string e avaliasse na memória e não "on line" a string?

Algo como:

apague o buffer

aguarde encher todo

veja se é caracter começador

monte até achar o separador

veja se é o finalizador

...😁

  • Curtir 1
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...