SdFat library with I2C and SoftwareSerial

I simply took out all calls to Serial.print() since i am using an LCD to display all the data. Now it works fine. Thanks for your help. The constant rebooting was caused by sending too many characters at a time. Here is the final version:

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <stdio.h>

//Add the SdFat Libraries
#include <SdFat.h>
#include <SdFatUtil.h> 
#include <ctype.h>

// ==================================
#define I2C_Address 0x27
#define I2C_NumChar 20
#define I2C_NumLines 4
#define LED 9
#define BUTTON 7
#define SDCARD 10
#define PRINT_DATA 0
#define DONT_PRINT_DATA 1
#define error(s) sd.errorHalt_P(PSTR(s))

//static const int RXPin = 2, TXPin = 3;
//static const uint32_t GPSBaud = 9600;

// 4 line, 20 character/line LCD Display
LiquidCrystal_I2C lcd(I2C_Address,I2C_NumChar,I2C_NumLines); 
// The TinyGPS++ object
TinyGPSPlus gps;

// MicroSD Card
//Create the variables to be used by SdFat Library
char fileName[] = "GPS01.txt";//Create an array that contains the name of our file.   
SdFat sd;
SdFile myFile;
const uint8_t chipSelect = 8; // CS = 8 on Sparkfun Card

// Global variables
bool haveData=true;
bool firstPass = true;
float homeLat, homeLong, currentLat, currentLong;
unsigned long last = 0UL;
char Latitude[20],Longitude[20],CurrentTime[20],Status[22],CurrentShortTime[20],LatShort[20],LongShort[20];
int lastDistance=0,numSaved=0;
unsigned long dist;  
static int lastChecksum=0,currentChecksum=0;

void setup()
{
  bool result;
  int err;
  
  Serial.begin(9600);

//  Serial.println(F("SD Test.ino"));
//  Serial.println(F("Testing saving data to SD Card"));
//  Serial.println(F("by Evan Westermann"));
//  Serial.println();
  
  pinMode(LED,OUTPUT);
  pinMode(BUTTON,INPUT);
  pinMode(SDCARD, OUTPUT);
  pinMode(chipSelect, OUTPUT);
//  Serial.println("Pin Modes have been set");
  
//  Serial.println("Attempting to initialize SD Card");
  err = sd.begin(chipSelect, SPI_HALF_SPEED);
  if (!err) 
    sd.errorHalt("Unable to initialize SD Card.");
  else
//    Serial.println("SD Card Initialized successfully");
  
  digitalWrite(chipSelect,HIGH);
  
//  Serial.println("Attempting to Open file on SD Card");
  err = myFile.open(fileName, O_RDWR | O_CREAT | O_APPEND);
  if (!err) 
    sd.errorHalt("Opening file for write failed");
  else
    {
//    Serial.println("Open successful");
    myFile.close();
    }

  lcd.init(); 
  lcd.backlight();
  sprintf(LatShort,"%4d.%5d",0,0);
  sprintf(LongShort,"%4d.%5d",0,0);
  sprintf(CurrentShortTime, "%02d:%02d:%02d  ", 0, 0,0);
  sprintf(Status, "Initializing");
  LCD_Print();
}

// This custom version of delay() ensures that the gps object
// is being "fed".
static void smartDelay(unsigned long ms)
{
  bool homeSet=false;
 
  unsigned long start = millis();
  do 
  {
    while (Serial.available())
      gps.encode(Serial.read());
//   if(digitalRead(BUTTON) == HIGH && !homeSet)
//      {
//      digitalWrite(LED,HIGH);
//      homeLat = currentLat;
//      homeLong = currentLong;
//      Serial.println("Home Position set");
//      homeSet = true;
//      }
  } while (millis() - start < ms);
//  digitalWrite(LED,LOW);
}

void SPrintLatitude()
{
  currentLat = gps.location.lat();
  // Location parameters have 5 decimal places
  int dec = (float)(currentLat - (int)currentLat)*100000;
  int num = currentLat;

  sprintf(LatShort,"%4d.%5d",num,dec);
  sprintf(Latitude,"Lat: %s St%02d",LatShort,gps.GetSatellites());
//  smartDelay(0);
}

void SPrintLongitude()
{
  currentLong = gps.location.lng();
  // Location parameters have 5 decimal places
  int dec = abs((float)(currentLong - (int)currentLong)*100000);
  int num = currentLong;

  sprintf(LongShort,"%4d.%05d",num,dec);
  sprintf(Longitude,"Long: %s",LongShort);
//  smartDelay(0);
}

void SPrintTime(TinyGPSTime &t)
{
  int hours;
  
  if (!t.isValid())
    sprintf(CurrentTime,"Time: %02d:%02d:%02d  ",0,0,0);
  else
   {
    // -4 hours to get to EST
    hours = t.hour() - 4;
    if(hours < 0)
       hours += 24;
    sprintf(CurrentTime, "Time: %02d:%02d:%02d  ", hours, t.minute(), t.second());
    sprintf(CurrentShortTime, "%02d:%02d:%02d  ", hours, t.minute(), t.second());
   }
//  smartDelay(0);
}

void LCD_Print()
{
  if(haveData)
    {
    lcd.setCursor(0, 0);
    lcd.print(Latitude);
    lcd.setCursor(0, 1);
    lcd.print(Longitude);
    lcd.setCursor(0, 2);
    lcd.print(CurrentTime);
    lcd.setCursor(0, 3);
    lcd.print(Status);
    }
  smartDelay(0);
}

void loop()
{
  char outData[30];
  int err,numSat=0;
  float theLatitude,theLongitude;
    
  lastChecksum = currentChecksum;
  currentChecksum = gps.failedChecksum();
  numSat = abs(gps.GetSatellites());
  theLatitude = gps.location.lat();
  theLongitude = gps.location.lng();
  
  SPrintLatitude();
  SPrintLongitude();
  SPrintTime(gps.time);
     
  sprintf(outData,"%0d5,%05d",numSat,currentChecksum-lastChecksum);
  
  err = myFile.open(fileName, O_RDWR | O_CREAT | O_APPEND);
  if (!err) 
    {
    sprintf(Status,"Opening file for write failed");
    LCD_Print();
    sd.errorHalt("Opening file for write failed");
    }
    
  myFile.print(CurrentShortTime);
  myFile.print(",");
  myFile.print(LatShort);
  myFile.print(",");
  myFile.print(LongShort);
  myFile.print(",");
  myFile.println(outData);

  // close the file:
  myFile.close();
  
  ++numSaved;
  sprintf(Status,"Number Saved = %d",numSaved);

  LCD_Print();
  
  smartDelay(1000);
}