SD.begin breaks function

Being a noob to Arduino’s I was combinig some examples I found and ran across something I don’t understand. In this sketch the first SD.begin call breaks the ledBlink function or renders it non functional. Can some one explain to me why this happens and what I need to do to fix it?

#include <SD.h>

#define LEDBLINK_PIN 13 // I/O pin connected to the LED.
#define LEDBLINK_MS 1000 // Blink rate (in milliseconds).

File myFile;

void setup()
{
// For ledBlink(), set LEDBLINK_PIN to output.
pinMode(LEDBLINK_PIN, OUTPUT);

// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}

Serial.print(“Initializing SD card…”);
// On the Ethernet Shield, CS is pin 4. It’s set as an output by default.
// Note that even if it’s not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.
pinMode(10, OUTPUT);

// For some reason the following if statement breaks the ledBlink function
if (!SD.begin(4)) {
Serial.println(“initialization failed!”);
return;
}

Serial.println(“initialization done.”);

// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
myFile = SD.open(“test.txt”, FILE_WRITE);

// if the file opened okay, write to it:
if (myFile) {
Serial.print(“Writing to test.txt…”);
myFile.println(“testing 1, 2, 3.”);
// close the file:
myFile.close();
Serial.println(“done.”);
} else {
// if the file didn’t open, print an error:
Serial.println(“error opening test.txt”);
}

// re-open the file for reading:
myFile = SD.open(“test.txt”);
if (myFile) {
Serial.println(“test.txt:”);

// read from the file until there’s nothing else in it:
while (myFile.available()) {
Serial.write(myFile.read());
}
// close the file:
myFile.close();
} else {
// if the file didn’t open, print an error:
Serial.println(“error opening test.txt”);
}

SD.remove(“test.txt”);
}

void loop()
{
// Blink the LED to let the user know we are still alive.
ledBlink();

// Do something.

}

//
// LED Heartbeat routine by Allen C. Huffman (www.appleause.com)
//
void ledBlink()
{
static unsigned int ledStatus = LOW; // Last set LED mode.
static unsigned long ledBlinkTime = 0; // LED blink time.

// LED blinking heartbeat. Yes, we are alive.
// For explanation, see:
// http://playground.arduino.cc/Code/TimingRollover
if ( (long)(millis()-ledBlinkTime) >= 0 )
{
// Toggle LED.
ledStatus = (ledStatus==HIGH ? LOW : HIGH);

// Set LED pin status.
digitalWrite(LEDBLINK_PIN, ledStatus);

// Reset “next time to toggle” time.
ledBlinkTime = millis()+LEDBLINK_MS;
}
} // End of ledBlink()

heartbeat_sdcard.ino (2.63 KB)

SD.begin() begins use of the SPI bus which uses pins 11, 12 and 13 on most Arduino boards, so pin 13 cannot be used as an output when SPI is in use.

Thanks, that makes sense.