Problema #include <SD.h>

Ciao a tutti,
sto usando un arduino yun e dovrei leggere e scrivere informazioni in un file di testo.
Importando però la libreria SD.h quando compilo ho il seguente errore: "D:\Programmi\Arduino\libraries\SD\src\utility\Sd2Card.cpp:507: error: 'SPI' was not declared in this scope"
Qualcuno ha già avuto lo stesso problema?

La tua domanda non ci è di aiuto per provare ad aiutarti.
Magari se pubblichi lo sketch... forse.... qualcosa in più si capisce :wink:

Anche con uno sketch nuovo ( solo setup e loop ) mi da lo stesso errore...

Se non ci metti nelle condizioni di capire cos'è che non va, possiamo stare qui fino a domattina.. "A domanda risposta" non va bene. :roll_eyes: :roll_eyes:
Inizia a dare lo sketch che usi; la versione dell'IDE in uso; il sistema operativo su cui compili; la copia del messaggio di errore che ricevi sul terminale.

Devi includere la SPI prima della SD.

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

Hai ragione Paolo, con uno sketch “vuoto” importando solo quelle due librerie compila correttamente.
Quando però importo altre librerie come la bridge.h mi da il seguente errore: D:\Programmi\Arduino\libraries\Bridge\src/FileIO.cpp:198: multiple definition of `File::openNextFile(unsigned char)’
SD\SD.cpp.o:D:\Programmi\Arduino\libraries\SD\src/SD.cpp:567: first defined here
Qui c’è il codice…

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

#include <Bridge.h>


void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

leo72:
Se non ci metti nelle condizioni di capire cos’è che non va, possiamo stare qui fino a domattina… “A domanda risposta” non va bene. :roll_eyes: :roll_eyes:
Inizia a dare lo sketch che usi; la versione dell’IDE in uso; il sistema operativo su cui compili; la copia del messaggio di errore che ricevi sul terminale.

Sistema operativo windows 7, versione IDE Arduino 1.5.6-r2 BETA.
Stavolta mi sembra di essere stato abbastanza chiaro, se non lo sono mi scuso in anticipo.

Banalmente, se metti la lib Bridge.h prima delle altre due include ? da errore uguale ?

nid69ita:
Banalmente, se metti la lib Bridge.h prima delle altre due include ? da errore uguale ?

Mi sono ricordato che non puoi accedere alla SD con la lib SD.
La SD nella YUN è connessa all’AR9331 e non al 32U4.

Usa la lib <FileIO.h>
Guarda l’esempio Datalogger del Bridge

/*
  SD card datalogger

 This example shows how to log data from three analog sensors
 to an SD card mounted on the Arduino Yún using the Bridge library.

 The circuit:
 * analog sensors on analog pins 0, 1 and 2
 * SD card attached to SD card slot of the Arduino Yún

 Prepare your SD card creating an empty folder in the SD root
 named "arduino". This will ensure that the Yún will create a link
 to the SD to the "/mnt/sd" path.

 You can remove the SD card while the Linux and the
 sketch are running but be careful not to remove it while
 the system is writing to it.

 created  24 Nov 2010
 modified 9 Apr 2012
 by Tom Igoe
 adapted to the Yún Bridge library 20 Jun 2013
 by Federico Vanzati
 modified  21 Jun 2013
 by Tom Igoe

 This example code is in the public domain.

 http://arduino.cc/en/Tutorial/YunDatalogger

 */

#include <FileIO.h>

void setup() {
  // Initialize the Bridge and the Serial
  Bridge.begin();
  Serial.begin(9600);
  FileSystem.begin();

  while (!Serial); // wait for Serial port to connect.
  Serial.println("Filesystem datalogger\n");
}


void loop () {
  // make a string that start with a timestamp for assembling the data to log:
  String dataString;
  dataString += getTimeStamp();
  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 += ",";  // separate the values with a comma
    }
  }

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  // The FileSystem card is mounted at the following "/mnt/FileSystema1"
  File dataFile = FileSystem.open("/mnt/sd/datalog.txt", FILE_APPEND);

  // 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");
  }

  delay(15000);

}

// This function return a string with the time stamp
String getTimeStamp() {
  String result;
  Process time;
  // date is a command line utility to get the date and the time
  // in different formats depending on the additional parameter
  time.begin("date");
  time.addParameter("+%D-%T");  // parameters: D for the complete date mm/dd/yy
  //             T for the time hh:mm:ss
  time.run();  // run the command

  // read the output of the command
  while (time.available() > 0) {
    char c = time.read();
    if (c != '\n')
      result += c;
  }

  return result;
}

Grazie mille Paolo!
Un’ultima cosa: se volessi leggere il contenuto del file Datalog.txt?

Presumo con il metodo read() --> http://arduino.cc/en/Reference/YunFileIORead

Grazie di nuovo! :slight_smile:

Ho seguito questo tutorial (http://arduino.cc/en/Tutorial/YunDatalogger) e anche facendo copia e incolla del codice non mi crea il file di testo sulla sd ( sulla sd è presente solo una cartella vuota chiamata "arduino" ).

Ma la Yun te la vede? Riesci ad esempio ad accederci in lettura oppure hai problemi anche con questa operazione?

Sisi i file nella cartella www me li carica senza problemi

Ho provato a chiedere nella sezione del forum internazionale e mi è stato detto di provare a scrivere touch /mnt/sd/datalog.txt nella console di linino ma non ho ben capito di che console si tratta e come posso scriverci comandi....

La console di un sistema Linux è il terminale. Ora, non so come si possa aprire un terminale sulla Yun però posso dirti che quel comando serve solo a creare un file vuoto che si chiama datalog.txt. Puoi fare la stessa cosa anche da un sistema operativo con interfaccia grafica, creando lo stesso file vuoto.

Quindi dovrei creare anche la directory /mnt/sd/datalog.txt ?
Ad esempio sulla sd io ho gia una cartella "Arduino", la cartella "mnt" dovrei metterla dentro la cartella "Arduino" o nella root della sd?

non sei pratico di Linux, vero? :wink:
/mnt/sd è la cartella all'interno della quale la distro Linino "monta" la scheda. Cioè "lega" il filesystem della card ad una cartella del filesystem del sistema. Sulla SD crea il file datalog.txt nella cartella radice della schedina, prova, non so se va bene lì. Dipende dal percorso che poiu usi nello sketch.

No

leo72:
non sei pratico di Linux, vero? :wink:
/mnt/sd è la cartella all'interno della quale la distro Linino "monta" la scheda. Cioè "lega" il filesystem della card ad una cartella del filesystem del sistema. Sulla SD crea il file datalog.txt nella cartella radice della schedina, prova, non so se va bene lì. Dipende dal percorso che poiu usi nello sketch.

per niente :cold_sweat:
Comunque avevo gia provato a creare il file di testo in diversi punti della sd, root compresa. Purtroppo non funziona....
Nello sketch uso il percorso /mnt/sd/datalog.txt