Using SD card with default example code [SOLVED]

I am trying to get an SD card to work with an Uno and a standard adafruit datalogger shield. The SD card is brand new and has a FAT 32 format. I’m fairly new at Arduino and am not extremely good at debugging, but this is literally an example from the library and it comes up with the message: “Initializing SD card…Card failed, or not present.” I’ve made sure the card has a good fit and isn’t damaged and I’ve even turned the board off and on again! Any wisdom or supreme knowledge would be most welcome. If I’m missing something, feel free to let me know. Thanks!

Here’s the code:

SD card datalogger

This example shows how to log data from three analog sensors
to an SD card using the SD library.

The circuit:

  • SD card attached to SPI bus as follows:
    ** UNO: MOSI - pin 11, MISO - pin 12, CLK - pin 13, CS - pin 4 (CS pin can be changed)
    and pin #10 (SS) must be an output
    ** Mega: MOSI - pin 51, MISO - pin 50, CLK - pin 52, CS - pin 4 (CS pin can be changed)
    and pin #52 (SS) must be an output
    ** Leonardo: Connect to hardware SPI via the ICSP header
    Pin 4 used here for consistency with other Arduino examples

created 24 Nov 2010
modified 9 Apr 2012 by Tom Igoe

This example code is in the public domain.


#include <SPI.h>
#include <SD.h>

// On the Ethernet Shield, CS is pin 4. Note that even if it’s not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 4;

File dataFile;

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

Serial.print(“Initializing SD card…”);
// make sure that the default chip select pin is set to
// output, even if you don’t use it:
pinMode(SS, OUTPUT);

// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println(“Card failed, or not present”);
// don’t do anything more:
while (1) ;
Serial.println(“card initialized.”);

// Open up the file we’re going to log to!
dataFile =“datalog.txt”, FILE_WRITE);
if (! dataFile) {
Serial.println(“error opening datalog.txt”);
// Wait forever since we cant write data
while (1) ;

void loop()
// make a string for assembling the data to log:
String dataString = “”;

// read three sensors and append to the string:
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += “,”;


// print to the serial port too:

// The following line will ‘save’ the file to the SD card after every
// line of data - this will use more power and slow down how much data
// you can read but it’s safer!
// If you want to speed up the system, remove the call to flush() and it
// will save the file only every 512 bytes - every time a sector on the
// SD card is filled with data.

// Take 1 measurement every 500 milliseconds

And are you following the instructions on the Adafruit website? (they messed the URL name up there methinks).

That code uses chip select pin 4 - the Adafruit site (if you'd bothered to read it) says to use pin 10.

I missed that somehow, thanks for pointing it out! That seemed to be the issue.