Boa noite,

Preciso de uma ajuda. o problema é o seguinte:

Estou lendo coordenadas do cartão SD, porém as coordenadas estão armazenadas da seguinte forma, por exemplo:

(latitude, longitude)

2.9999, 3.7777

1.8883, 6.7833

4.5432, 8.7849

Preciso ler as informações separadas, lendo cada linha por vez e armazenando latitude e longitude em variáveis para fazer comparações.

Como poderia executar esta operação? O código que estou usando está logo abaixo:

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {

Serial.begin(9600);
while (!Serial) {
     ;
}


     Serial.print("Inicializando cartão SD...");

     if (!SD.begin(53)) {
          Serial.println("initialization failed!");
          return;
     }

     Serial.println("SD inicializado");


     myFile = SD.open("test.txt");
     if (myFile) {
          while (myFile.available()) {
               Serial.write(myFile.read());
          }
          myFile.close();
     } else {
          Serial.println("Erro ao abrir cartão SD");
     }
}

void loop() {

}

Exibições: 2945

Responder esta

Respostas a este tópico

Dentro do loop, faça assim:

//Atribua a linha lida a uma variável String

linha = myFile.read();

//Encontre a posição da vírgula --> posVirgula é int

posVirgula = linha.indexOf(",");

//Obtenha latitude e longitude como Strings

latitude = linha.substring(0,posVirgula);

longitude = linha.substring(posVirgula+1);

Obs: Não testei, então pode dar pequenas diferenças no split dos valores. Nesse caso é só ajustar os parâmetros.

Nesse exemplo as variáveis latitude e longitude são do tipo String. Para convertê-las para int, use o método toInt():

latitudeInt = latitude.toInt();

Certo, irei testar desta forma.

Muito obrigado pela sua ajuda e atenção, José Agusto :)

Lucas, para converter os valores use toFloat. Eu havia sugerido toInt, mas percebi que os valores são decimais...

José, fiz o algoritmo printando a linha para ver se retornaria valores corretos ao escrito no arquivo texto.

Acontece que no meu arquivo .txt possui somente as informações abaixo:

2.9999, 5.66666
4.88888, 9.77777
Porém quando uso o Serial.println com a linha na leitura do arquivo, é retornado na Porta Serial o seguinte resultado:
50
46
57
57
57
57
44
32
53
46
54
54
54
54
54
13
10
52
46
56
56
56
56
56
44
32
57
46
55
55
55
55
55
O código que modifiquei ficou da seguinte forma:

#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {

     String linha;
     Serial.begin(9600);
     while (!Serial) {
          ;
     }

     Serial.print("Inicializando cartão SD...");

     if (!SD.begin(53)) {
          Serial.println("initialization failed!");
          return;
     }

     Serial.println("SD inicializado");


     myFile = SD.open("test.txt");
     if (myFile) {
          while (myFile.available()) {

               linha = myFile.read();
               Serial.println(linha);
          }
          myFile.close();
     } else {
          Serial.println("Erro ao abrir cartão SD");
     }
}

void loop() {

}

Sabe me dizer porque está retornando estes valores?
Desde já agradeço pela sua atenção.

o comando myFile.read está lendo cada caracter do arquivo e exibindo. repare que os números que aparecem são os códigos ASCII de cada um:

50 = 2

46 = .

57 = 9

Etc.

Nesse caso, você precisa montar cada número somando cada string .

Vou verificar e te respondo...

Se você precisar guardar cada valor, o ideal seria criar um array para latitude e outro para longitude. Não sei quantas linha pode ter o arquivo.

Para montar os números, será preciso concatenar cada caracter lido com o anterior até encontrar o caracter vírgula e o caracter fim de linha (13 10)

Eu estava pesquisando e achei a função "atoi", para fazer a conversão destes números.

Irei verificar se dá certo.

Ou então irei fazer um if para "," (vírgula) e outro para " " (espaço). Se não for nenhum dos dois, eu iria converter da seguinte forma: caractere_lido - 48.

Vou verificar se funciona e retorno para avisar :)

Mais uma vez, muito obrigado pela atenção e ajuda Jose.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço