Problema datalogger con SD shield

Ciao a tutti,

volevo esporvi il mio problema, sperando che si tratti di una cosa semplice e rapida.

E' da qualche giorno che sto cercando di utilizzare una SD shield (http://www.cooking-hacks.com/shop/arduino/shields/microsd-2gb-module-for-arduino) e ho qualche problema. Provo a usare lo sketch di prova Datalogger dell'IDE di arduino e funziona ma a tratti e ogni tanto mi siche che non riesce ad aprire il file (vedi foto). Sto usando una scheda da 8 GB formattata FAT32 perché non riesco a formattare in FAT16 le scheda da 2 GB che mi hanno spedito con la shield stessa. Per le schede non ci sono grandi problemi, posso prenderne altre o usare quella da 8 GB, ma come posso fare a registrare i dati senza che ci siano problemi con l'apertura del file?

Alimento la scheda dal pin 8 e il chip select dovrebbe essere il 10.

Vi posto anche il codice modificato, nel caso ci fosse qualche errore :roll_eyes:.

#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 = 10;

void setup()
{
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  digitalWrite(8, HIGH);
  
   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(10, 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:
    return;
  }
  Serial.println("card initialized.");
}

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 += ","; 
    }
  }

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    // print to the serial port too:
    Serial.println(dataString);
  }  
  // if the file isn't open, pop up an error:
  else {
    Serial.println("error opening datalog.txt");
  } 
}

Grazie mille per i sempre preziosi aiuti,

Giacomo

cosa vuol dire che alimenti la scheda dal pin8 ?
Lo stai forse usando collegato al Vin della board SD ?

Vietato il cross-posting.
Adesso dove ti rispondiamo?
Qui o di la ?
http://forum.arduino.cc/index.php?topic=239876.0

Si, alimento la scheda mettendo il pin 8 su HIGH. Ho letto che bisogna alimentare la scheda a 3.3V, ma sulla scheda c'è un jumper con cui selezionare la tensione di alimentazione (5 V o 3,3V). Spero che ci sia un partitore interno :~.

Ma perchè lo alimenti da un pin pilotato da te, invece che alimentarlo sempre da 5V o 3,3V ?

Chiedo scusa per la il cross-posting fatto per errore :roll_eyes:

Ho seguito lo schema fornito dal costruttore e perché i pin combaciano, così da non usare una breadboard.

Provo invece a alimentarlo in modo autonomo. Ti faccio spere subito.

Grazie mille,

Giacomo.

Ho provato ad alimentare la SD shield direttamente dal pin 3.3V e a spostare di conseguenza il jumper di alimentazione sul 3.3V.

Funziona perfettamente, era proprio un problema di alimentazione. In pochi minuti mi avete risolto un problema che cercavo di risolvere da giorni. Spero che questo posto possa aiutare altri che hanno lo stesso problema.

Vi ringrazio per il rapidissimo ed efficiente aiuto.

Giacomo