Bom dia pessoal, sou eu novamente, estou desenvolvendo meu projeto e estou perdido como posso ler linha a linha de um arquivo TXT e enviar cada linha para meu serviço na web que salva os dados em um banco de dados, consigo apenas ler os dados (por completo) que estão no SD pelo monitor serial, mas não consigo ler uma linha e enviar para o banco de dados depois ler outra e enviar e assim sucessivamente. Desde já agradeço pela ajuda.

Utilizo um Arduino Mega, um modulo Ethernet Shield, e um RTC DS1302

Exibições: 146

Anexos

Responder esta

Respostas a este tópico

Olá Thiago.

Qual é o microcontrolador?

Como você quer enviar os dados ao Banco de Dados?

Poderia postar o código que quer modificar?


Em geral, a leitura do SDCard é feita via uma biblioteca. Qual biblioteca você está usando?

Boa tarde, Rodrigo. Uso um Arduino Mega, com Ethernet Shield, o envio que quero é utilizando o Ethernet Shield, já tenho o serviço PHP para o envio ao banco de dados quando tenho internet, caso não o SD serve como uma contingência para meu projeto. A biblioteca que utilizo é o SD.h, mas se for necessário mudar , mudo sem problema.

Boa tarde Thiago,

Use a função do SD.h readStringUntil('\n'); para ler o fluxo de bytes até encontrar um terminador de linha (enter) que é o '\n', se assim estiver gravando seu texto no arquivo.

Exmplo de código:

  // agora vamos ler o arquivo..

  while (meuArquivo.available()) {
    String minhaLinha= meuArquivo.readStringUntil('\n');   // supoe que toda linha termina em \n
    Serial.println(minhaLinha); // mostra a linha lida na porta serial, mas poderia ser outra acao...
  }

Joia, Rodrigo, vou dar uma lida sobre essa função, ai no caso meu TXT irá ter varias linhas não posso definir a quantidade, que será data e hora. Farei um for para percorrer o arquivo ate o tamanho dele e ir printando linha por linha utilizando a readStringUntil? 

não precisa um for()

o while(meuArduivo.avaiable()) do exemplo acima percorre o arquivo até ele acabar.

Faça um teste com Serial.println() como no exemplo até você obter as linhas do jeito que precisa.

Rodrigo bom dia, desculpa estar aperriando novamente cara, coloquei como tu falou, consigo printar oque tem dentro do meu arquivo no SD, mas caso ele encontre o \n seria para parar não? ele continua ate ler tudo, consigo ler a primeira caso tenha o .close ai sim ele para porem fecha o arquivo como é pra fazer.

Bom dia Thiago,

Se você usar apena uma vez o comando

Linha1 = meuArquivo.readStringUntil('\n');

O programa vai parar no fim da primeira linha e manter um "ponteiro"/"marcador" associado à variável meuArquivo nessa posição do Arquivo. Imagine que esse "ponteiro" seja o cursor de texto dentro de um editor de texto.

Quando você rodar uma segunda vez esse comando, por exemplo assim:

Linha2 = meuArquivo.readStringUntil('\n');

O programa vai ver a segunda linha e quando rodar uma terceira vez vai ler a terceira linha e assim por diante.

as variáveis Linha1 / Linha2 são do tipo String, que é um pouco diferente de um char[].

Este código abaixo lê o arquivo do início ao fim por causa do while()

while ( meuArquivo.available() ) {
     String minhaLinha= meuArquivo.readStringUntil( '\n' );
     Serial.println( minhaLinha );
}

Mas você não precisa usar o while(), pode ler as linhas em partes diferentes do código se precisar. Apenas precisa saber quando o arquivo acabou (foi lido completamente) através de, neste exemplo, meuArquivo.available()

Entendi Rodrigo, muito obrigado. É pq como estou pensando no envio para meu serviço PHP eu me perco, pq como ele esta mostrando todo o arquivo no serial penso que ele não vai enviar uma linha ao banco salvar depois enviar a próxima e assim em diante.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço