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() {
}
Tags:
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:
#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() {
}
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por