memória cheia?

Estou tentando fazer com que o meu UNO leia um arquivo do SD com 200 int para acionar um AR. Quando faço a primeira vez , funciona corretamete mas depois quando vou acionar outra vez ele não chega a funcionar perfeitamente, no Serial Monitor ele não printa todo o arquivo lido e simplesmente para.
Seria memória? Se sim, teria como eu esvaziar ela para eu conseguir ler uma nova linha com novos 200 ints?

#include <SD.h>
#include <IRremote.h>

File myFile;
char caracter1;
String str1 = "";
unsigned int aux[200];
IRsend irsend;

void setup(){
  Serial.begin(9600);
  Serial.println("Inicializando");

  pinMode(10, OUTPUT);
   
    if(!SD.begin(4)){
    Serial.println("Falha na incializacao");
  }
}

void lerSD(int linha){

  myFile = SD.open("AR.txt");

  if(myFile){
    unsigned long linhaEspec = 850 * linha;
    
    Serial.print("linha: ");
    Serial.println(linhaEspec);

    myFile.seek(linhaEspec);

    int laco = 0;
    
    for(int i = 0; i <= 849; i++){
      caracter1 = myFile.read();
      if(caracter1 != ','){
        str1.concat(caracter1);
      }
      else{
        Serial.print(str1 + ";");
        //int val = str1.toInt();
        aux[laco] = str1.toInt();
        //Serial.println(laco);
        laco++;
        str1 = "";
      }
    }

    myFile.flush();
    myFile.close();
  }
  irsend.sendRaw(aux,200,38);
}

void loop(){
  if(Serial.available() > 0){
    
  char opcao = Serial.read();
  
  if(opcao == 'l'){
    lerSD(0);
    Serial.println("Opcao 1");
  }
  if(opcao == 'd'){
    lerSD(1);
    Serial.println("Opcao 1");
  }
 }
 }
 
}

Ja pensaste em usar uma string em vez de String?

Sem saber o que estas a receber e um pouco dificil de saber o que se passa.

Cross-posting?

http://forum.arduino.cc/index.php?topic=247870.msg1771489

luisilva:
Cross-posting?

lendo dados do SD incompleto - Português - Arduino Forum

Isto ja e comum... Eu acho particular piada aqueles que nem se dao ao trabalho de traduzir e colocam a duvida em ingles no forum Portugues.

luisilva:
Cross-posting?

lendo dados do SD incompleto - Português - Arduino Forum

é desculpa, mas se for prestar atenção o problema é parecido mas não é o mesmo. Consigo ler uma linha por inteiro e logo depois não consigo mais, no outro post eu nem conseguia ler por inteiro a linha entao pensei em abrir outro post.

bubulindo:
Ja pensaste em usar uma string em vez de String?

Sem saber o que estas a receber e um pouco dificil de saber o que se passa.

Ainda não, e sobre o que estou a receber no primeiro eu recebo normalmente a linha:

4150,4450,250,1850,300,550,550,1700,450,1700,400,600,500,550,500,1750,400,600,500,550,500,1700,450,600,500,500,550,1750,400,1750,400,550,500,1750,400,600,500,550,500,600,500,1700,450,1750,350,1750,400,1750,400,1750,400,1750,400,1750,400,1700,400,600,500,550,550,550,500,550,550,550,500,600,500,550,500,550,550,550,500,1700,450,600,450,600,500,550,550,1700,400,1750,400,1750,400,1750,400,550,500,1750,400,1750,400,1750,400,5350,4150,4500,250,1800,350,550,500,1800,350,1750,400,550,500,550,550,1750,400,600,450,600,500,1750,400,550,500,600,500,1750,350,1800,350,600,500,1650,500,550,550,500,550,550,500,1650,500,1650,500,1650,500,1600,550,1600,550,1600,550,1600,500,1650,500,550,550,500,550,550,550,500,550,550,550,500,550,550,550,500,550,550,550,1600,550,500,550,550,550,500,550,1600,550,1600,550,1600,550,1600,500,550,550,1600,550,1600,550,1600,550

depois quando vou pedir parar ler novamente, as vezes ele le só alguns caracteres outras vezes não acontece nada

Não estou a ver nenhum problema (pelo menos óbvio). No entanto, penso que o output exemplo, não é deste programa, pelo menos desta versão, uma vez que esta versão coloca ' ; ' e não ' , ' ou então é esse mesmo o problema.
A linha:

    myFile.flush();

não faz sentido neste programa. Esta função é utilizada para "forçar" a escrita no ficheiro, mas aqui não está a ser escrito nada neste. O que faz esta instrução também é feito automaticamente quando é fechado um ficheiro, por isso não é nada coerente fazer a chamada a estas duas funções em duas linhas seguidas.

Outra coisa que não faz sentido no seu programa, mas que também não provoca o erro descrito é:

  if(opcao == 'l'){
    lerSD(0);
    Serial.println("Opcao 1");
  }

tanto para uma opção como para a outra é sempre informado que foi seleccionada a 'opção 1'. Se isso não chegasse, é dada essa informação depois de ser executada a "função principal" (lerSD). Esta função devia ser chamada depois de informar o utilizador de qual foi a opção seleccionada e deviam ser enviadas duas mensagens diferentes.

O que acontece se após a instrução:

aux[laco] = str1.toInt();

for feito:

Serial.println(aux[laco]);

o valor é escrito correctamente?

Também penso que deveria haver uma inicialização da variável str1, qualquer coisa como:

    int laco = 0;
    str1 = "";

Também penso que no final da função deveria haver qualquer coisa como:

    myFile.flush();   //eliminar esta linha!!!
    myFile.close();
  }
  Serial.println(laco);
  irsend.sendRaw(aux,laco,38);
}

NOTA: para que isto funcione, a variável laco deve estar declarada fora do primeiro if e não dentro como está agora.

[OT] Em outro canto da internet, me disseram que o arduino emburrece as pessoas, que as impede de pensar fora da caixa, Será verdade?

Nos fontes da lib RCswitch há referencia à um site que desenha a forma de onda com base em csv solta pela lib, que por coincidencia é a mesma da IRremote;
http://test.sui.li/oszi/
Aqui os dados fornecidos por você:

parece haver um padrao, vamos adicionas "1," ao começo dos dados, assim invertendo a onda:

agora sim ficou mais fácil, compare com a informação neste site:

Para fechar, aqui a implementação sem lib, do protocolo em arduinêz:

Há ainda que decodificar os dados fornecidos por você, e alterar o protocolo para que coincida com o seu sinal,
lembrando:
unsigned long = uint32_t = 32 bits
unsigned long long = uint64_t = 64 bits

No final seu uso de memoria será 0x123456789012 por comando.