Erro ao ler linhas em um arquivo do cartão SD usando read()

Boa noite

Gostaria de uma ajuda quanto a ler linhas em um arquivo txt dentro de um cartão sd no Arduino.

Tenho como exemplo um arquivo "cards.txt" contendo as quatro linhas a seguir:

7100665DBDF4
7100665DBDF5
7100665DBDF6
7100665DBDF7

Abaixo, segue o fragmento de código que utilizo para fazer a leitura das linhas e adicionar a um variável, seguindo em parte o exemplo apontado pelo bubulindo.

Acontece que o arduino não lê a última linha e fica preso no while e não estou conseguindo resolver isso. Alguém pode me ajudar?

if (RfidLido.length() >= 16) {
   alowed = false;
   myFile = SD.open("cards.txt");
   
   if (myFile) {
       while (myFile.available()) {
 
         while ((c = myFile.read()) != '\n') { 
            matriz[x++] = c;
            delay(1);
         }

         matriz[x]='\0'; 
         x = 0;    
               
         codigoUsuario = matriz;
         Serial.println(matriz);
         Serial.println(codigoUsuario.length());
           
       if (RfidLido.substring(1,13).equals(codigoUsuario)) {
       alowed = true;
       }
     }
   }
   
   myFile.close();

Quem vê o fórum vai ver os posts todos… por favor não coloques a mesma dúvida em duas threads. Não vais obter uma resposta mais rápida por fazeres isso. Pode até ser uma maneira de não obteres resposta nenhuma.

Por acaso deste um enter na última linha do ficheiro cards.txt??

Repara que tu entras num ciclo while… e estás à procura de ‘\n’, ou seja enter. Se não o colocaste lá quando criaste o ficheiro, o código vai parar.

Se o ficheiro vai ser sempre assim, já pensaste em ler um determinado número de bytes em vez de procurar por \n??

Boa tarde

Já removi o post do outro tópico.

O ficheiro pode ter informações de tamanhos variados, por isso eu procuro pelo \n. Outra coisa que eu gostaria é de garantir o funcionamento do código, mesmo que a última linha venha sem o \n, visto que o ficheiro será gerado em outro local.

A minha ideia é conseguir identificar no Arduino o fim da última linha, mesmo que não tenha o \n, como se fora o fim de arquivo em C (EOF), por exemplo, mas não estou sabendo implementar isso.

Se puder me ajudar nessa solução, ficarei agradecido.

Nada como ler a documentação...

e adicionar a condição que se encontrar um \n ou um -1, o ciclo para.

while ((c = myFile.read()) != '\n' && c != -1)

Perfeito!

Muito obrigado pela ajuda.