Problema de escritura en SD

Hola a todos,

Estoy realizando un proyecto con un arduino Nano, una pantalla táctil NextionNX3224T035 y un módulo SD.

La pantalla se comunica por serial con el arduino (Tx y Rx) y el módulo SD va por SPI.

El problema que tengo es el siguiente, yo quiero que se vayan guardando datos de la pantalla en la tarjeta SD, todo ello con una alimentación externa sin depender de una conexión USB. Pero para inicializar la SD tengo que poner un Serial.begin(baudios). He probado diferentes maneras de intentar guardar datos, pero sin el Serial.begin no se me guarda nada en la SD. Adjunto el código con el que he estado probando, saludos.

#include <SD.h>

File myFile;

int primera = 1;      // variable para que se ejecute solo el primer paso del loop para guardar un encabezado
void setup()
{
  Serial.begin(115200);
  Serial.print("Iniciando SD ...");
  if (!SD.begin(4)) {
    Serial.println("No se pudo inicializar");
    return;
  }
  Serial.println("inicializacion exitosa");
  
  if(!SD.exists("LSR.txt"))
  {
      myFile = SD.open("LSR.txt", O_CREAT |O_TRUNC | O_WRITE);    
      if (myFile) {
        Serial.println("Archivo nuevo, Escribiendo encabezado(fila 1)");
        myFile.println("Tiempo(ms),Sensor1,Sensor2,Sensor3");                     // Este encabezado no me lo escribe
        myFile.close();
      } else {

        Serial.println("Error creando el archivo LSR.txt");
      }
  
}

}

void loop()
{

  if (primera == 1){
    myFile = SD.open("LSR.txt", O_CREAT |O_TRUNC | O_WRITE);                       // Condiciones para crear, sobreescribir y escribir
  }
  
  if (myFile && primera ==1 ) { 
    
        myFile.println("Tiempo(seg),Sensor1,Sensor2,Sensor3");                   // Mismo encabezado, aquí si lo escribe
        primera = 0;
        myFile.close(); //cerramos el archivo
  }

 myFile = SD.open("LSR.txt", FILE_WRITE);     //abrimos  el archivo                // Escribir el archivo 
 if (myFile && primera == 0){
        
        Serial.print("Escribiendo SD: ");
        int sensor1 = analogRead(0);
        int sensor2 = analogRead(1);
        int sensor3 = analogRead(2);
        int tiemposd = millis()/1000;
        myFile.print(tiemposd);
        myFile.print(",");
        myFile.print(sensor1);
        myFile.print(",");
        myFile.print(sensor2);
        myFile.print(",");
        myFile.println(sensor3);
        
        myFile.close(); //cerramos el archivo
        
        Serial.print("Tiempo(seg)=");                                             // Indicar que por serial si lee bien los datos sin la pantalla conectada
        Serial.print(tiemposd);
        Serial.print(",sensor1=");
        Serial.print(sensor1);
        Serial.print(",sensor2=");
        Serial.print(sensor2);
        Serial.print(",sensor3=");
        Serial.println(sensor3);       
  }      

  delay(1000);
}

Gracias por vuestra ayuda, un saludo

Deshaste de esta parte en el loop:

if (primera == 1){
    myFile = SD.open("LSR.txt", O_CREAT |O_TRUNC | O_WRITE);                       // Condiciones para crear, sobreescribir y escribir
  }
  
  if (myFile && primera ==1 ) { 
    
        myFile.println("Tiempo(seg),Sensor1,Sensor2,Sensor3");                   // Mismo encabezado, aquí si lo escribe
        primera = 0;
        myFile.close(); //cerramos el archivo
  }

La escritura del encabezado basta con que se haga en el setup

Y ya que vas a hacer ese cambio, has también este:

De:

myFile = SD.open("LSR.txt", FILE_WRITE);     //abrimos  el archivo                // Escribir el archivo 
 if (myFile && primera == 0){

A:

myFile = SD.open("LSR.txt", FILE_WRITE);     //abrimos  el archivo                // Escribir el archivo 
 if (myFile){

Lo que ocurre es que si el archivo no existía desde el comienzo, se creaba y todo bien. El detalle era que de todos modos lo mandabas a truncar (eliminar el contenido del archivo, pero sin desaparecerlo) la segunda vez.