Leggere input analogico e salvare sulla microsd

sto provando con questo :

void setup() {
  Serial.begin(9600);
}

void loop() {
   
  
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue, DEC);
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
  
  if (dataFile) {
    dataFile.println(sensorValue);
    dataFile.close();
    
  }  
   
}

qualcuno sa spiegarmi se sono sulla strada giusta?

nella sd trovi qualcosa?
io ho provato parecchio ma non vede l'Sd...

il codice sembra ok

ratto93:
nella sd trovi qualcosa?
io ho provato parecchio ma non vede l'Sd...

sicuro di averla formattata in fat16?

si:( ci ho perso il sonno sopra l'avevo messa da parte l' ho collegata come scritto in internet l'unica cosa di diversa è che ho preso un adattatore Micro sd-sd e ci ho saldato degli strip per non comprare uno zoccolo apposta visti i costi.....

se è > 4gb(o era 2?) usano un protocollo diverso

lesto:
se è > 4gb(o era 2?) usano un protocollo diverso

da 1Gb... ora attacco tutto.. l'errore era scritto sulla seriale sd non trovata in inglese...

che libreria usi? qual'è l'errore preciso?

non va con nessun programma degli esempi di arduino 0022

L'errore è :Card failed, or not present

mastergov:
sto provando con questo :

void setup() {

Serial.begin(9600);
}

void loop() {
   
 
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue, DEC);
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
 
  if (dataFile) {
    dataFile.println(sensorValue);
    dataFile.close();
   
  } 
   
}




qualcuno sa spiegarmi se sono sulla strada giusta?

/*
SD card datalogger

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

The circuit:

  • analog sensors on analog ins 0, 1, and 2
  • SD card attached to SPI bus as follows:
    ** MOSI - pin 11
    ** MISO - pin 12
    ** CLK - pin 13
    ** CS - pin 4

created 24 Nov 2010
updated 2 Dec 2010
by Tom Igoe

This example code is in the public domain.

*/

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

void setup()
{
Serial.begin(9600);
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");
}
}

ok, ora cerchiamo di tracciare l'errore.
Prima di tutto modifica nello skecth

#include <SD.h>

in

#include "SD/SD.h" (in linux o mac)
o
#include "SD\SD.h" (in windows)

ora vai nella cartella arduino, libraries e copia la cartella SD
incollala nella cartella sketchbook/nomedeltuoprogetto che è nella home

poi chiudi e riapri arduino IDE e prova a compilare, non dovrebbero esserci errori.

se è tutto ok (di certo non si sistemerà magicamente andando avanti con questa mini guida) apri il file SD.cpp, cerca il metodo boolean SDClass::begin(uint8_t csPin)

e cambialo da così:

boolean SDClass::begin(uint8_t csPin) {
  /*

    Performs the initialisation required by the sdfatlib library.

    Return true if initialization succeeds, false otherwise.

   */
  return card.init(SPI_HALF_SPEED, csPin) &&
         volume.init(card) &&
         root.openRoot(volume);
}

a così:

boolean SDClass::begin(uint8_t csPin) {
  /*

    Performs the initialisation required by the sdfatlib library.

    Return true if initialization succeeds, false otherwise.

   */
  boolean pass1, pass2, pass3;
  pass1 = card.init(SPI_HALF_SPEED, csPin);
  pass2 = volume.init(card);
  pass3 = root.openRoot(volume);
  Serial.print("inizializzazione SD 1:");
  Serial.println(pass1);
  Serial.print("inizializzazione SD 2:");
  Serial.println(pass2);
  Serial.print("inizializzazione SD 3:");
  Serial.println(pass3);
  return pass1 &&
         pass2 &&
         pass3;
}

a questo punto sai quale funzione fallisce. Posta o se sei in grado di andare avanti ricorsivamente da solo posta il nome della classe e la riga in cui hai problemi

grazie mille lesto ...ora finisco di studiare e provo :wink:

fatto ora mi da quest errore nel monitor seriale:
Initializing SD card...
inizializzazione SD 1:(e un quadratino)
inizializzazione SD 2:(e un quadratino)
inizializzazione SD 3:(e un quadratino)
Card failed, or not present

sorry, cambia le tre
Serial.println(pass3);
in
Serial.println(pass3, BIN);

inizializzazione SD 3:0
ed errore:(

l'hai fatto anche per
inizializzazione SD 1:
inizializzazione SD 2:
??

se è solo il 3 che risponde 0, allora il problema è in quella classe, altrimenti in una delle precedenti

edit: certo che ci vorrebbe una chat stile FB per ste cose, mannaggia...

non ho Fb xk odio i social net xò l'ho vista e si servirebbe:) ora riprovo...

boolean SDClass::begin(uint8_t csPin) {
  /*

    Performs the initialisation required by the sdfatlib library.

    Return true if initialization succeeds, false otherwise.

   */
  boolean pass1, pass2, pass3;
  pass1 = card.init(SPI_HALF_SPEED, csPin);
  pass2 = volume.init(card);
  pass3 = root.openRoot(volume);
  Serial.print("inizializzazione SD 1:");
  Serial.println(pass1, BIN);
  if (!pass1){
    Serial.print("ERRORE inizializzazione SD 1:");
    Serial.print( card.errorCode() );
    Serial.print( " " );
    Serial.println( card.errorData() );
  }

  Serial.print("inizializzazione SD 2:");
  Serial.println(pass2, BIN);
  if ( !pass2 ){
    Serial.println("Errore init 2:\nThe value one, true, is returned for success and the value zero, false, is returned for failure.  Reasons for failure include not finding a valid partition, not finding a valid FAT file system in the specified partition or an I/O error.");
  }
  Serial.print("inizializzazione SD 3:");
  Serial.println(pass3, BIN);
  if (!pass3){
    Serial.println("Errore init 3:\nReasons for failure include \a fileName contains an invalid DOS 8.3 file name, the FAT volume has not been initialized, a file is already open, the file already exists, the root directory is full or an I/O error.");
  }
  return pass1 &&
         pass2 &&
         pass3;
}

prova con questo codice, cosa ti dice?

Tutti e tre rispondono zero

prova con l'ultimo codice, che ti da numero e tipo di errore... poi lo cerchi sul forum a vedere se c'è soluzione.

ps. Fb è ottimo per organizzare le grigliate al parco :slight_smile: