Problem with strings when writing to SD card AND the serial monitor

I've encountered a problem that I can't wrap my mind around. I have a sketch that takes some data and a timestamp string, put's it all into one output string and then writes that to a SD card and also to the serial monitor.

When I have this:

     card_detect = digitalRead(8); 
     write_protect = digitalRead(9); 
     //Serial.println(card_detect);
     //Serial.println(write_protect);  

     if (card_detect == 0 && write_protect == 0) {
        Serial.println(str_SDlog);       
        myFile = SD.open("datalog.csv", FILE_WRITE); if (myFile) { myFile.println(str_SDlog); myFile.close(); }    }
     //if (card_detect == 1) {Serial.println("Error: SD Card is not present!");}
     //if (card_detect == 0 && write_protect == 1) {Serial.println("Error: SD Card is write protected!");}

I get this:

but if I uncomment one or both of the if statements at the bottom:

     card_detect = digitalRead(8); 
     write_protect = digitalRead(9); 
     //Serial.println(card_detect);
     //Serial.println(write_protect);  

     if (card_detect == 0 && write_protect == 0) {
        Serial.println(str_SDlog);       
        myFile = SD.open("datalog.csv", FILE_WRITE); if (myFile) { myFile.println(str_SDlog); myFile.close(); }    }
     if (card_detect == 1) {Serial.println("Error: SD Card is not present!");}
     if (card_detect == 0 && write_protect == 1) {Serial.println("Error: SD Card is write protected!");}

I get this - No info in the serial monitor nor does and data get saved to the card:

What is going on? Am I missing something?

Here is the entire sketch:

//======================================================================================================================================================================
//======================================================================================================================================================================
//======================================================================================================================================================================

// Libraries and Initializations
#include <SPI.h>
#include <SD.h>
#include "Adafruit_SHT4x.h"
#include "RTClib.h"
Adafruit_SHT4x sht4 = Adafruit_SHT4x();
RTC_PCF8523 rtc;
File myFile;

//======================================================================================================================================================================
//======================================================================================================================================================================
//======================================================================================================================================================================

// Timers
unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
unsigned long previousMillis3 = 0;
const long interval = 5000;
unsigned long logging_interval = 60000;  //ms

// Local Variables
float indoor_temp;                 
float indoor_humidity;
String str_timestamp;
String str_SDlog;
bool card_detect; 
bool write_protect; 



//Floats and Strings removed for now. They are still in the 02 version if I need them back. (data received from main station).
float outdoor_temp = -11;
float outdoor_humidity = 40;

//======================================================================================================================================================================
//======================================================================================================================================================================
//======================================================================================================================================================================

void setup() {
// Serial Monitor Initialization
  Serial.begin(115200); while (!Serial) delay(10);

// Temperature Sensor Initialization
  if (! sht4.begin()) {Serial.println("Couldn't find SHT4x"); while (1) delay(1);}
  Serial.print("Found SHT4x sensor!  -  "); Serial.print("Serial number: "); Serial.print(sht4.readSerial(), DEC);
  sht4.setHeater(SHT4X_NO_HEATER); sht4.setPrecision(SHT4X_HIGH_PRECISION); Serial.print("  -  High precision,"); Serial.println("  No heater.");  

// Real Time Clock Initialization
  if (! rtc.begin()) {Serial.println("Couldn't find RTC"); Serial.flush(); while (1) delay(10);}
  if (! rtc.initialized() || rtc.lostPower()) {Serial.println("RTC is NOT initialized, let's set the time!"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); } rtc.start();

// SD Card Initialization
  Serial.print("Initializing SD card..."); if (!SD.begin(10)) {Serial.println("initialization failed!");while (1);} Serial.println("initialization done.");

pinMode (8, INPUT_PULLUP); 
pinMode (9, INPUT_PULLUP); 

}

//======================================================================================================================================================================
//======================================================================================================================================================================
//======================================================================================================================================================================

void loop() {

  unsigned long currentMillis3 = millis();
  if (currentMillis3 - previousMillis3 >= (10000)) {
     previousMillis3 = currentMillis3;
     get_data();
     get_indoor_temp_and_humidity();
     get_timestamp();
     str_SDlog = str_timestamp + "," + outdoor_temp + "," + outdoor_humidity + "," + indoor_temp + "," + indoor_humidity;
     write_to_card();
      
   }
}

//======================================================================================================================================================================
//======================================================================================================================================================================
//======================================================================================================================================================================

void get_timestamp(){   
    DateTime now = rtc.now();
    String str_YY; String str_MM; String str_MM1; String str_DD; String str_DD1; String str_hh; String str_hh1; String str_mm; String str_mm1; String str_ss; String str_ss1;
    int Month; int Day; int Hour; int Minute; int Second;
    str_YY = String(now.year(), DEC); 
    str_MM = String(now.month(), DEC); Month = (now.month()); if (Month < 10)(str_MM1 = "0" + str_MM); else str_MM1 = str_MM;  
    str_DD = String(now.day(), DEC); Day = (now.day()); if (Day < 10)(str_DD1 = "0" + str_DD); else str_DD1 = str_DD;          
    str_hh = String(now.hour(), DEC); Hour = (now.hour()); if (Hour < 10)(str_hh1 = "0" + str_hh); else str_hh1 = str_hh;      
    str_mm = String(now.minute(), DEC); Minute = (now.minute()); if (Minute < 10)(str_mm1 = "0" + str_mm); else str_mm1 = str_mm;           
    str_ss = String(now.second(), DEC); Second = (now.second()); if (Second < 10)(str_ss1 = "0" + str_ss); else str_ss1 = str_ss;     
    str_timestamp = str_YY + "-" + str_MM1 + "-" + str_DD1 + " " + str_hh1 + ":" + str_mm1 + ":" + str_ss1;                           // Form timestamp STRING:
    //Serial.println(str_timestamp);  
}

//======================================================================================================================================================================

void get_indoor_temp_and_humidity() {
    unsigned long currentMillis2 = millis();
    if (currentMillis2 - previousMillis2 >= (interval*1)) {
      previousMillis2 = currentMillis2;
      sensors_event_t humidity, temp; sht4.getEvent(&humidity, &temp); indoor_temp = temp.temperature; indoor_humidity = humidity.relative_humidity;
     //Serial.print("Indoor Temperature: "); Serial.print(indoor_temp); Serial.print("   Indoor Humidity: "); Serial.println(indoor_humidity);
    }
}

//======================================================================================================================================================================

void get_data() {
    unsigned long currentMillis1 = millis();
    if (currentMillis1 - previousMillis1 >= (interval*2)) {
      previousMillis1 = currentMillis1;
    outdoor_temp++; if (outdoor_temp > 10) {outdoor_temp = -10;}
    outdoor_humidity++; if (outdoor_humidity > 60) {outdoor_humidity = 40;}
    //Serial.print("Outdoor Temperature: "); Serial.print(outdoor_temp); Serial.print("   Outdoor Humidity: "); Serial.println(outdoor_humidity);      
    }
}

//======================================================================================================================================================================

void write_to_card() {

     card_detect = digitalRead(8); 
     write_protect = digitalRead(9); 
     //Serial.println(card_detect);
     //Serial.println(write_protect);  

     if (card_detect == 0 && write_protect == 0) {
        Serial.println(str_SDlog);       
        myFile = SD.open("datalog.csv", FILE_WRITE); if (myFile) { myFile.println(str_SDlog); myFile.close(); }    }
     if (card_detect == 1) {Serial.println("Error: SD Card is not present!");}
     if (card_detect == 0 && write_protect == 1) {Serial.println("Error: SD Card is write protected!");}
}

//======================================================================================================================================================================
//======================================================================================================================================================================
//======================================================================================================================================================================

You really need to get rid of all those String objects. The RTCLib has a function that will generate a timestamp for you (look at the .toString() method)

Here is a code-version of your code that puts all constant strings into flash-memory through the use of the "F-macro"

reduces the number of strings
and uses the SafeString-library instead of variable-type String

Your code-version has 558 bytes of RAM left for local variables but you use variable-tyte String
These String will eat up ALL RAM-memory pretty quick

So I put the longer strings into flash and uses the SafeStrings
SafeStrings do not eat up RAM-memory. They show at compiletime how much memory will be used 432 bytes of RAM left.

Then I optimised your time-stamp function to use less variables

638 bytes left for local variables

The formatting is the opposite to your formatting: each function-call in its own line

// Libraries and Initializations
#include <SPI.h>
#include <SD.h>
#include "Adafruit_SHT4x.h"
#include "RTClib.h"
#include <SafeString.h>


Adafruit_SHT4x sht4 = Adafruit_SHT4x();
RTC_PCF8523 rtc;
//RTC_DS3231 rtc;

File myFile;

// Timers
unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
unsigned long previousMillis3 = 0;
const long interval = 5000;
unsigned long logging_interval = 60000;  //ms

// Local Variables
float indoor_temp;
float indoor_humidity;
//String str_timestamp;
cSF(str_timestamp, 24);
//String str_SDlog;
cSF(str_SDlog, 26);

/*
cSF(str_YY  , 4);
cSF(str_MM1 , 2);
cSF(str_DD1 , 2);
cSF(str_hh1 , 2);
cSF(str_mm1 , 2);
cSF(str_ss1 , 2);
*/
bool card_detect;
bool write_protect;


//Floats and Strings removed for now. They are still in the 02 version if I need them back. (data received from main station).
float outdoor_temp = -11;
float outdoor_humidity = 40;


void setup() {
  // Serial Monitor Initialization
  Serial.begin(115200);
  while (!Serial)
    delay(10);

  // Temperature Sensor Initialization
  if (! sht4.begin()) {
    Serial.println( F("Couldn't find SHT4x") );
    while (1)
      delay(1);
  }

  Serial.print( F("Found SHT4x sensor!  -  ") );
  Serial.print( F("Serial number: ") );
  Serial.print(sht4.readSerial(), DEC);
  sht4.setHeater(SHT4X_NO_HEATER);
  sht4.setPrecision(SHT4X_HIGH_PRECISION);
  Serial.print( F("  -  High precision,") );
  Serial.println( F("  No heater.") );

  // Real Time Clock Initialization
  if (! rtc.begin()) {
    Serial.println( F("Couldn't find RTC") );
    Serial.flush();
    while (1) delay(10);
  }

  if (! rtc.initialized() || rtc.lostPower()) {
    Serial.println( F("RTC is NOT initialized, let's set the time!") );
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
  rtc.start();

  // SD Card Initialization
  Serial.print(F("Initializing SD card...") );

  if (!SD.begin(10)) {
    Serial.println(F("initialization failed!") );
    while (1);
  } Serial.println( F("initialization done.") );

  pinMode (8, INPUT_PULLUP);
  pinMode (9, INPUT_PULLUP);
}


void loop() {

  unsigned long currentMillis3 = millis();
  if (currentMillis3 - previousMillis3 >= (10000)) {
    previousMillis3 = currentMillis3;
    get_data();
    get_indoor_temp_and_humidity();
    get_timestamp();
    str_SDlog  = str_timestamp;
    str_SDlog += F(",");
    str_SDlog += outdoor_temp;
    str_SDlog += F(",");
    str_SDlog += outdoor_humidity;
    str_SDlog += F(",");
    str_SDlog += indoor_temp;
    str_SDlog += F(",");
    str_SDlog += indoor_humidity;
    write_to_card();
  }
}


void get_timestamp() {
  DateTime now = rtc.now();

/*
  int Month;
  int Day;
  int Hour;
  int Minute;
  int Second;
*/
  str_timestamp = "";
  //str_YY  = "";
  str_timestamp += now.year();

  //str_MM1 = "";
  if (now.month() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.month();

  //str_DD1  = "";
  if (now.day() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.day();

  //str_hh1  = "";
  if (now.hour() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.hour();

  //str_mm1  = "";
  if (now.minute() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.minute();

  //str_ss1  = "";
  if (now.second() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.second();

/*
  str_timestamp  = "";
  str_timestamp += str_YY;
  str_timestamp += F("-");
  str_timestamp += str_MM1;
  str_timestamp += F("-");
  str_timestamp += str_DD1;
  str_timestamp += F(" ");
  str_timestamp += str_hh1;
  str_timestamp += F(":");
  str_timestamp += str_mm1;
  str_timestamp += F(":");
  str_timestamp += str_ss1;                           // Form timestamp STRING:
*/  
  //Serial.println(str_timestamp);
}


void get_indoor_temp_and_humidity() {
  unsigned long currentMillis2 = millis();

  if (currentMillis2 - previousMillis2 >= (interval * 1)) {
    previousMillis2 = currentMillis2;
    sensors_event_t humidity, temp;
    sht4.getEvent(&humidity, &temp);
    indoor_temp = temp.temperature;
    indoor_humidity = humidity.relative_humidity;
    //Serial.print("Indoor Temperature: ");
    //Serial.print(indoor_temp);
    //Serial.print("   Indoor Humidity: ");
    // Serial.println(indoor_humidity);
  }
}


void get_data() {
  unsigned long currentMillis1 = millis();

  if (currentMillis1 - previousMillis1 >= (interval * 2)) {
    previousMillis1 = currentMillis1;
    outdoor_temp++;

    if (outdoor_temp > 10) {
      outdoor_temp = -10;
    }
    outdoor_humidity++;

    if (outdoor_humidity > 60) {
      outdoor_humidity = 40;
    }
    //Serial.print("Outdoor Temperature: ");
    //Serial.print(outdoor_temp);
    // Serial.print("   Outdoor Humidity: ");
    // Serial.println(outdoor_humidity);
  }
}


void write_to_card() {

  card_detect = digitalRead(8);
  write_protect = digitalRead(9);
  //Serial.println(card_detect);
  //Serial.println(write_protect);

  if (card_detect == 0 && write_protect == 0) {
    Serial.println(str_SDlog);
    myFile = SD.open("datalog.csv", FILE_WRITE);

    if (myFile) {
      myFile.println(str_SDlog.c_str() );
      myFile.close();
    }
  }

  if (card_detect == 1) {
    Serial.println( F("Error: SD Card is not present!") );
  }

  if (card_detect == 0 && write_protect == 1) {
    Serial.println( F("Error: SD Card is write protected!") );
  }
}

Give it a try

best regards Stefan

#include "RTClib.h"
RTC_DS3231 rtc;

void setup () {
  Serial.begin(115200);
  if ( !rtc.begin() ) {
    Serial.println(F("Couldn't find RTC"));
    Serial.flush();
    while (true);
  }
}

void loop () {
  printFormat1();
  printFormat2();
  delay(1000);
}

void printFormat1() {
  DateTime now = rtc.now();
  
  char buffer[30];
  sprintf(buffer, "%02d.%02d.%02d %02d:%02d:%02d\r\n", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
  for (byte d = 0; d < sizeof(buffer); d++)Serial.print(buffer[d]);
}

void printFormat2() {
  DateTime dateTime(F(__DATE__), F(__TIME__));
  char buffer[50] {"DDD, DD MMM YYYY hh:mm:ss"};
  Serial.println(dateTime.toString(buffer));
}

Thank you @Delta_G , @blh64 , @StefanL38 and @kolaha for your feedback. I'll be the first to admit that I'm not very good at programming and this is the first time I've actually had to deal with strings and it's quite obvious that I still have a lot to learn!

Delta- yes, unfortunately I'm using an UNO right now because that's the only board I had laying around. The final project will use something more powerful and it didn't occur to me that the this may be pushing the little guy too hard.

Stefan - I tried your code it and it works for the most part. I did have to increase the length of "str_SDlog" but that wasn't a big deal. The bigger issue is that although it appears that it writes to the SD card, not data is actually written. I didn't have much time to investigate why yesterday but hopefully I'll get to the bottom of it today.

Again, thank you all, I truly appreciate it!

To narrow down this problem
Here is a code-version with additional debug-printing to the serial monitor

// MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START * MACRO-START *
// a detailed explanation how these macros work is given in this tutorial
// https://forum.arduino.cc/t/comfortable-serial-debug-output-short-to-write-fixed-text-name-and-content-of-any-variable-code-example/888298

#define dbg(myFixedText, variableName) \
  Serial.print( F(#myFixedText " "  #variableName"=") ); \
  Serial.println(variableName);

#define dbgi(myFixedText, variableName,timeInterval) \
  { \
    static unsigned long intervalStartTime; \
    if ( millis() - intervalStartTime >= timeInterval ){ \
      intervalStartTime = millis(); \
      Serial.print( F(#myFixedText " "  #variableName"=") ); \
      Serial.println(variableName); \
    } \
  }

#define dbgc(myFixedText, variableName) \
  { \
    static long lastState; \
    if ( lastState != variableName ){ \
      Serial.print( F(#myFixedText " "  #variableName" changed from ") ); \
      Serial.print(lastState); \
      Serial.print( F(" to ") ); \
      Serial.println(variableName); \
      lastState = variableName; \
    } \
  }

#define dbgcf(myFixedText, variableName) \
  { \
    static float lastState; \
    if ( lastState != variableName ){ \
      Serial.print( F(#myFixedText " "  #variableName" changed from ") ); \
      Serial.print(lastState); \
      Serial.print( F(" to ") ); \
      Serial.println(variableName); \
      lastState = variableName; \
    } \
  }
// MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END * MACRO-END *


// Libraries and Initializations
#include <SPI.h>
#include <SD.h>
#include "Adafruit_SHT4x.h"
#include "RTClib.h"
#include <SafeString.h>


Adafruit_SHT4x sht4 = Adafruit_SHT4x();
RTC_PCF8523 rtc;
//RTC_DS3231 rtc;

File myFile;

// Timers
unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
unsigned long previousMillis3 = 0;
const long interval = 5000;
unsigned long logging_interval = 60000;  //ms

const byte cardDetectPin    =  8;
const byte writeProtectPin  =  9;
const byte SD_ChipSelectPin = 10;

// Local Variables
float indoor_temp;
float indoor_humidity;
//String str_timestamp;
cSF(str_timestamp, 24);
//String str_SDlog;
cSF(str_SDlog, 48);

/*
cSF(str_YY  , 4);
cSF(str_MM1 , 2);
cSF(str_DD1 , 2);
cSF(str_hh1 , 2);
cSF(str_mm1 , 2);
cSF(str_ss1 , 2);
*/
bool card_detect;
bool write_protect;


//Floats and Strings removed for now. They are still in the 02 version if I need them back. (data received from main station).
float outdoor_temp = -11;
float outdoor_humidity = 40;


void setup() {
  // Serial Monitor Initialization
  Serial.begin(115200);
  while (!Serial)
    delay(10);

  // Temperature Sensor Initialization
  if (! sht4.begin()) {
    Serial.println( F("Couldn't find SHT4x") );
    while (1)
      delay(1);
  }

  Serial.print( F("Found SHT4x sensor!  -  ") );
  Serial.print( F("Serial number: ") );
  Serial.print(sht4.readSerial(), DEC);
  sht4.setHeater(SHT4X_NO_HEATER);
  sht4.setPrecision(SHT4X_HIGH_PRECISION);
  Serial.print( F("  -  High precision,") );
  Serial.println( F("  No heater.") );

  // Real Time Clock Initialization
  if (! rtc.begin()) {
    Serial.println( F("Couldn't find RTC") );
    Serial.flush();
    while (1) delay(10);
  }

  if (! rtc.initialized() || rtc.lostPower()) {
    Serial.println( F("RTC is NOT initialized, let's set the time!") );
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
  rtc.start();

  // SD Card Initialization
  Serial.print(F("Initializing SD card...") );

  if (!SD.begin(SD_ChipSelectPin)) {
    Serial.println(F("initialization failed!") );
    while (1);
  } Serial.println( F("initialization done.") );

  pinMode (cardDetectPin, INPUT_PULLUP);
  pinMode (writeProtectPin, INPUT_PULLUP);
}


void loop() {

  unsigned long currentMillis3 = millis();
  if (currentMillis3 - previousMillis3 >= (10000)) {
    previousMillis3 = currentMillis3;
    get_data();
    get_indoor_temp_and_humidity();
    get_timestamp();
    str_SDlog  = str_timestamp;
    str_SDlog += F(",");
    str_SDlog += outdoor_temp;
    str_SDlog += F(",");
    str_SDlog += outdoor_humidity;
    str_SDlog += F(",");
    str_SDlog += indoor_temp;
    str_SDlog += F(",");
    str_SDlog += indoor_humidity;
    write_to_card();
  }
}


void get_timestamp() {
  DateTime now = rtc.now();

/*
  int Month;
  int Day;
  int Hour;
  int Minute;
  int Second;
*/
  str_timestamp = "";
  //str_YY  = "";
  str_timestamp += now.year();

  //str_MM1 = "";
  if (now.month() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.month();

  //str_DD1  = "";
  if (now.day() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.day();

  //str_hh1  = "";
  if (now.hour() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.hour();

  //str_mm1  = "";
  if (now.minute() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.minute();

  //str_ss1  = "";
  if (now.second() < 10) {
    str_timestamp += F("0");
  }
  str_timestamp += now.second();

/*
  str_timestamp  = "";
  str_timestamp += str_YY;
  str_timestamp += F("-");
  str_timestamp += str_MM1;
  str_timestamp += F("-");
  str_timestamp += str_DD1;
  str_timestamp += F(" ");
  str_timestamp += str_hh1;
  str_timestamp += F(":");
  str_timestamp += str_mm1;
  str_timestamp += F(":");
  str_timestamp += str_ss1;                           // Form timestamp STRING:
*/  
  //Serial.println(str_timestamp);
}


void get_indoor_temp_and_humidity() {
  unsigned long currentMillis2 = millis();

  if (currentMillis2 - previousMillis2 >= (interval * 1)) {
    previousMillis2 = currentMillis2;
    sensors_event_t humidity, temp;
    sht4.getEvent(&humidity, &temp);
    indoor_temp = temp.temperature;
    indoor_humidity = humidity.relative_humidity;
    //Serial.print("Indoor Temperature: ");
    //Serial.print(indoor_temp);
    //Serial.print("   Indoor Humidity: ");
    // Serial.println(indoor_humidity);
  }
}


void get_data() {
  unsigned long currentMillis1 = millis();

  if (currentMillis1 - previousMillis1 >= (interval * 2)) {
    previousMillis1 = currentMillis1;
    outdoor_temp++;

    if (outdoor_temp > 10) {
      outdoor_temp = -10;
    }
    outdoor_humidity++;

    if (outdoor_humidity > 60) {
      outdoor_humidity = 40;
    }
    //Serial.print("Outdoor Temperature: ");
    //Serial.print(outdoor_temp);
    // Serial.print("   Outdoor Humidity: ");
    // Serial.println(outdoor_humidity);
  }
}


void write_to_card() {

  card_detect = digitalRead(cardDetectPin);
  dbg("write_to_card",card_detect);
  
  write_protect = digitalRead(writeProtectPin);
  dbg("write_to_card",write_protect);
  //Serial.println(card_detect);
  //Serial.println(write_protect);

  dbg("write_to_card",str_SDlog);
  if (card_detect == 0 && write_protect == 0) {
    Serial.println(str_SDlog);
    myFile = SD.open("datalog.csv", FILE_WRITE);

    if (myFile) {
      dbg("if (myFile)",str_SDlog.c_str() );
      myFile.println(str_SDlog.c_str() );
      myFile.close();
    }
    Serial.println( F("FALSE ! myFile = SD.open(datalog.csv, FILE_WRITE);") );
  }

  if (card_detect == 1) {
    Serial.println( F("Error: SD Card is not present!") );
  }

  if (card_detect == 0 && write_protect == 1) {
    Serial.println( F("Error: SD Card is write protected!") );
  }
}
1 Like

Thank you again Stefan!

I managed to get it working... The problem was with the csv file on the sd card. I created a new file and now it works just fine. :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.