Reading a SD card to parse floats to an float array

I am working on an autonomous robot and want to record waypoints on an SD card and then to retrieve them into variable to drive the mission. I have most of the code sorted however I am struggling to read my SD card to be able to parse the lat and long floats that are stored on the card.

I have enclosed the waypoints that I have recorded onto the sd card. way4.txt and the code that I have been struggling with. This only represents a small amount of the overall code. When the problem is solved the aim is to integrate this code into the main program.

I am hoping to read the data on the SD card into 2 variables. An array of lats and an array of longs both to 7 decimal places.

The code opens the sd card and reads the data into a variable called aChar
aChar is then added to fileContents
I have tried to then split fileContents into the 2 arrays.

If you can give some guidance it would be appreciated as I have been on this for days


#include <SPI.h>
#include <SD.h>
char fileContents[128];
String data;
String latitude[3];
String longitude[3];
int index;
int counter = 0;

void setup()
 // Serial.print("Initializing card.");  
  pinMode(53, OUTPUT);
  if (!SD.begin(53)) 
   // Serial.println("Card failed to initialize or no card available");  
  //Serial.println("Card initialized!");

 File myfile ="way4.txt");

  if (myfile) {
    while (myfile.available()) {
    // close the file:
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening way3.txt");

  // Open the Way Point file for reading:
 myfile ="way4.txt");

  if (myfile)  //*********************************************************
     // Probably can be smaller
    byte index = 0;
   while (myfile.available()) //++++++++++++++++++++++++++++++++++++++++++
      char aChar =;
      if(aChar != '\n' && aChar != '\r')
         fileContents[index++] = aChar; 
         fileContents[index] = '\0'; // NULL terminate the array 
      else                          // the character is CR or LF
          //Parsing part of code
           data = fileContents;
          latitude[1] = (data.substring(0,10));
          longitude[1] = (data.substring(11,22));
         // Serial.print(" +");

         fileContents[0] = '\0';
         index = 0;
    } //End while (myfile available) +++++++++++++++++++++++++++++++++++++++++
    // close the file:
    } //End if (myfile) *******************************************************
    // if the file didn't open, print an error:
    Serial.println("error opening way3.txt");
      } //End else


} //End Set up

void loop()
  // nothing happens after setup

way4.txt (73 Bytes)

Read Robin's updated Serial Input Basics thread; the principles also apply to reading files. It even contains a parse example and a conversion to integer (change atoi to atof for floats).

I suggest that you make use of an array of structs.

And get rid of String (capital S).