Ler linha especifica do SD

Estou tentando fazer com que possa ler uma linha especifica do meu cartao SD, quabrar e salva-la em um array.
O problema é que ainda nao consegui fazer ensinar a funcao determinar o limite que eu quero ou axar um meio mais simples de fazer ler apenas uma linha recebendo como paramentro um valor. Pois quando seto no seek() o valor ele retorna sempre a dados da proxima linha
Como estaria o meu arquivo no SD:
1600,550,500,300,100…;
1650,450,300,100,500…;
1500,500,500,200,150…;
(cada linha possui 200 int)

#include <SD.h>

File myFile;

void setup(){
  Serial.begin(9600);  
  
  Serial.println("Inicializando");
  pinMode(10, OUTPUT); 

}

void getDados(unsigned long opcao){
  unsigned long inicio = opcao;
  unsigned long fim = inicio + 852;
  if(!SD.begin(4)){
    Serial.println("Falha na inicializacao");
  }
  
  myFile = SD.open("AR.txt");

  if(myFile){
    myFile.seek(inicio); //nao consigo passar para o seek um valor valido
    for(int i=0; i<= fim; i++){
      Serial.write(myFile.read());
    }
      myFile.close();  
  }else{
    Serial.println("Erro na leitura do arquivo");
  }


  
}

void loop(){
  if(Serial.available()){
    int opcao = Serial.read();
    if(isDigit(opcao)){ // verifica se e numerico
      getDados(opcao);
    }  
    else{
      Serial.println("Opcao nao e valida!");
    }  
  }
}

Alguem teria uma ideia de como poderia resolver isso? A parte de quebrar a linha especifica e salvar cada valor em um array acho que seria mais facil, so teria que fazer uma verificacao que quando tiver uma virgula ele quebra e adiciona na posicao do array

O teu codigo nao compila!
O que é o "aux"?

ao inves de aux eh inicio…

Em que linha estas interessado ler pra ja?
Tenta ler essa linha passando o argumento na funçao diretamente e vê se resulta

void setup(){
  Serial.begin(9600);  
  
  Serial.println("Inicializando");
  pinMode(10, OUTPUT); 
 getDados(4);//Lendo a linha 4
}

void loop()
{
}

Olhando melhor a tua questao:

Pois quando seto no seek() o valor ele retorna sempre a dados da proxima linha

Fico com duvida se queres dizer com isto que a tua funçao funciona mas nao para de ler dai para a frente ou nao lê a linha que tu queres!
Podes esclarecer melhor

acabei me expressao de maneira errada…
a ideia que vc mostrou era a que eu gostaria de fazer
mas agora nao sei como passar para o getDados() apenas o numero da linha que eu quero
Suponhamos que cada linha possui 800 caracteres (contando com as virgulas)
getDados(1); // ler a linha 1
no caso o seek vai ter que comecar em 801 (linha 1) até 1601 (final da linha 1)

a ideia que vc mostrou era a que eu gostaria de fazer

Qual idea, eu fiz uma pergunta

Fico com duvida se queres dizer com isto que a tua funçao funciona mas nao para de ler dai para a frente ou nao lê a linha que tu queres!

Afinal o que tens lê a tua linha e nao para de ler dai para a frente, ou opçao 2 nao lê nada e o teu codigo nao faz o que pretendes?

mas agora nao sei como passar para o getDados() apenas o numero da linha que eu quero

O meu objectivo para colocares o getDados(x) sem leres os dados da porta serie era para teres a certeza que o teu getDados esta a fazer o que promete, quando tiveres a certeza que ele faz entao depois podes mudar para ler o valor da porta serie.

Se eu usar:

if(myFile){
    myFile.seek(0); // comeca no primeiro caracter
    for(int i=0; i<= 800; i++){ // final da linha 1
      Serial.write(myFile.read());
    }

funciona…
Só que quando utiliza inicio e fim (var do tipo long) ele nao pega a informacao correta ele por exemplo comeca no caracter 79. Acho que é ASCII (se estiver falando bobagem me avisem :roll_eyes:) mas ainda n consegui fazer para que ele passe o numero em decimal

Só que quando utiliza inicio e fim (var do tipo long) ele nao pega a informacao correta ele por exemplo comeca no caracter 79. Acho que é ASCII (se estiver falando bobagem me avisem smiley-roll) mas ainda n consegui fazer para que ele passe o numero em decimal

Sim é normal estar a fazer isso.Terias ja descoberto isso se tivesses testado a tua funçao passando o argumento da linha que queres em vez de o tentares obter pela porta serie como te disse a uns posts atras.Vejamos:

void loop(){
if(Serial.available()){
int opcao = Serial.read();
if(isDigit(opcao)){ // verifica se e numerico
getDados(opcao);
}
else{
Serial.println("Opcao nao e valida!");
}

Tu enviaste por exemplo o numero na serie 8 , a variavel opçao fica com o valor 56! Porque?
Bom porque 8 em ascii corresponde a 56 em decimal logo mais abaixo tu passas como valor na funçao getDados(56)
Coloca assim:

if(Serial.available()){
unsigned char opcao = Serial.read();
getDados(opcao);