Gravando dados duplicados em SDCARD

Olá

Eu estou estudando o uso da SDCARD no Arduino e eu preciso gravar os valores dos sensores em um arquivo .TXT, mas ele fica duplicando as informações no arquivo .TXT enquanto passa pelo laço FOR, por que será ? Estou rachando a cuca a noite inteira, mas não estou achando o erro, pode ser algo muito bobo, mas não estou localizando. Oque esta errado ?

Esta gravando assim:

Um
Dois
Um
Dois

Meu código:

 #include <SdFat.h>

 SdFat sdCard;
 SdFile meuArquivo;

 const int chipSelect = 4;

 void setup()
 {
 // nada a ser feito no setup
 Serial.begin(9600);

 // Inicializa o modulo SD
 if(!sdCard.begin(chipSelect,SPI_HALF_SPEED))sdCard.initErrorHalt();
 // Abre o arquivo TESTANDO.TXT
 if (!meuArquivo.open("testando.txt", O_RDWR | O_CREAT | O_AT_END))
 {
   sdCard.errorHalt("Erro na abertura do arquivo testando.txt!");
 } 

}

void loop()
{
   gravar();
 }

 void gravar()
 {
  for (int i=0; i <= 20; i++){

  Serial.println(i);
  delay(10);

  if(i == 1)
  {
    Serial.println("Um");
    meuArquivo.println("Um");
  }
  else if(i == 2)
  {
    Serial.println("dois");
    meuArquivo.println("Dois");
    meuArquivo.close();
    while(1){};
  }
   else
  {

  }
   delay(100);
 } 
}

Obrigado

O que faz a opção O_AT_END na linha seguinte?

 if (!meuArquivo.open("testando.txt", O_RDWR | O_CREAT | O_AT_END))

Sinceramente não sei, mas creio que não seja esse o problema, pois eu testei tambem com a library SD do arqduino e acontece a mesma coisa.

 * O_READ - Open for reading.
 *
 * O_RDONLY - Same as O_READ.
 *
 * O_WRITE - Open for writing.
 *
 * O_WRONLY - Same as O_WRITE.
 *
 * O_RDWR - Open for reading and writing.
 *
 * O_APPEND - If set, the file offset shall be set to the end of the
 * file prior to each write.
 *
 * O_AT_END - Set the initial position at the end of the file.

O teu resultaado e precisamente o que o teu codigo faz...

Tu metes um ciclo de 20 passos, mas so quando a variavel i e igual a 1 ou 2 e que ele escreve algo para o ficheiro.

Como nao tens condicao nenhuma para chamar a funcao gravar... ela continua a gravar em ciclo.

O que e que pretendes mesmo fazer?