Boa noite pessoal, fiz várias pesquisas aqui e nenhuma me ajudou. Então tive que recorrer a criar um post sobre isso.

Estou com um problema, recebo dados via serial e gravo em uma String.

Era uma String maior, mas eu já consegui separar apenas os caracteres que eu queria, que eram 4 números e salvei em uma String chamada Dados. Preciso fazer uns cálculos com esses 4 números que salvo que dariam várias casas decimais, mas ainda não consegui fazer isso. Gostaria de saber como transformar esses 4 números em float.

Obs.: Percebi que as pessoas logo acham que colocaram char no variável, mas ela está assim: String Dados;

Vamos partir daí, já com os 4 caracteres salvos em Dados e eles não são fixos. Como ficaria a programação? A programação seria no arduino no caso.

Caso não tenha como converter direto para float, teria como converter para int e depois float?

Agradeço desde já, abraços!

Exibições: 6542

Responder esta

Respostas a este tópico

Pois é amigo, eu testei essa e não deu certo. E ainda é pra int. Não saberia como ficaria o sketch pra transformar pra float?

Veja esse exemplo:

void setup()
{
Serial.begin(9600);
}

float StrToFloat(String str)
{
     char carray[str.length() + 1]; 

     str.toCharArray(carray, sizeof(carray));

    return atof(carray);
}

void loop()
{
   String s = "1.1";
   float x = StrToFloat(s);
}

Mauro, deu certo. No começo ficou dando erro porque eu coloquei essa rotina de float dentro do void que eu tinha criado pra separar o String em várias Strings menores ai tive que colocar essa rotina fora do void que eu criei e antes do void loop(). E no void loop() no lugar de "float x = StrToFloat(s);" eu coloquei "float x = StrToFloat(dados);" e deu certo ai fiz uma continha rápida e coloquei pra aparecer e deu certo. Tudo bem, tá tudo funcionando, já consigo converter String pra float. Mas não entendi nada desse código :S

Você poderia me explicar esse código?

Claro!

// Função: converte de String para float

// Parâmetro: str - String a ser convertida

// Resultado: float correspondente

float StrToFloat(String str)
{

      // Cria uma varável char[] com comprimento igual ao comprimento de str + um caractere,

      //  que é para caber o #0 que termina uma string desse tipo.
     char carray[str.length() + 1]; 

     //  Copia o conteúdo de str para carray 

     str.toCharArray(carray, sizeof(carray));

    // Chama a função do arduino que converte char[] para float.

    return atof(carray);
}

Hum, muito obrigado. Não conhecia essa função "carray" vou pesquisar sobre ela. Outra coisa, os resultados estão só com as duas primeiras 2 casas decimais. Como faria pra aparecer as 6 primeiras casas decimais?

carray não é função. É o nome da variável char[] que eu criei. É que atof não aceita String, então eu primeiro crio carray, depois movo o conteúdo de str prá ela prá depois chamar a atof.

Qto às casas decimais, aí o problema é da função Serial.print, que é default prá 2 casas. Pesquise na net sobre essa função e veja como aumentar isso (esqueci como é).

Po amigo, muito obrigado mesmo. Fui fazer uma pesquisa no google assim: "serial.print casas decimais" nem precisei clicar nos links e já apareceu exatamente.

Eu só precisava dizer o tanto de casas decimais que eu quero assim:

"Serial.print(variável,6);"

No meu caso que queria 6 casas decimais. Muito obrigado Mauro, me ajudou muito.

Acho que já posso encerrar esse post!

Olá.

Preciso criar um programa no arduino que seja capaz de receber um valor digitado no terminal monitor do arduino, e esse valor seja capaz de mover um motor de passo exatamente o mesmo número de passos digitados.

Lembrando que o valor digitado pode ser positivo ou negativo. Isso fará o motor mover para a direita ou esquerda.

O valor também é com ponto flutuante...exemplo 9.876 passos.

Alguém pode ajudar????

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço