Datalogger

Salve, mi rendo conto che il mio quesito a molti risulterà banale ma sono un ridicolo impasse dal quale non riesco a uscire per palpabile ignoranza in materia.
Sto cercando di registrare i dati di diversi sensori di spostamento sulla SD (uso tutto i Pin A dell'Arduino Nano) ma ho un problema nel mio sketch che Arduino segnala nel record dell'esplicitazione del datastring. Di seguito riporto il record incriminato: // make a string for assembling the data to log:
String dataString= "0","1","2","3","4","5","6","7"; ho provato a sostituire le , con + ma nulla non riesco a capire quale sia il mio errore.
Qualcuno può illuminarmi?

Grazie

Nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post ... Grazie.

Guglielmo

P.S.: Il tuo post è già stato spostato nell'opportuna sezione del forum "Italiano"

Quella riga non ha senso.
Posta tutto il codice, da solo quel pezzo non si capisce nulla.

Inoltre sconsiglio di usare la classe String. Tutto quello che puoi fare con String puoi anche farlo con array di char (anche chiamati stringhe), con minor uso di memoria

Per il moderatore: Chiedo scusa per la mia disattenzione. Ho aperto più pagine insieme ed ho confuso. Mi scuso per quando accaduto.

Per il primo consiglio: Riporto di seguito tutto il codice-

//SD card datalogger. SD library

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

int sensorPin0=A0;
int sensorPin1=A1;
int sensorPin2=A2;
int sensorPin3=A3;
int sensorPin4=A4;
int sensorPin5=A5;
int sensorPin6=A6;
int sensorPin7=A7;
int D11Pin=0;
int D12Pin=0;
int D13Pin=0;
const int chipSelect=10; //ArduinoNano
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);// door inizialization SD
while (!Serial)
{
; // wait for serial port to connect. Needed dor native USB port only}
Serial.print (“Initializing SD card module datalogger”);
if(!SD.begin())//verify that there are SD
{
// see if the card is presente 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”);
}

// put your main code here, to run repeatedly:
void loop()
// make a string for assembling the data to log:
String dataString= “0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”;
//read eight sensor and appened to the string:
for (int analogPin=0;analogPin <8)
{ int sensor= analogRead (analogPin);
if(analogPin < 9)
dataString+=“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”;}
{
File dataFile=SD.open(“datalog.txt”, FILE_WRITE);
if (dataFile){
dataFile.println(dataString);
dataFile.close();
Serial.println(dataString);
}
//if the file isn’t open, pop up an error:
else{
Serial.println (“error operning datalog.txt”);
}
}

Per il secondo suggerimento: vado a studiarli, grazie per la dritta!

Grazie a tutti

>RestLost: … credo che tu debba leggere con un po’ più di attenzione il REGOLAMENTO

… in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag:

[code] _il _tuo_ codice_ [/code]

così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati.

Guglielmo

  1. in questo caso String e stringhe non servono a nulla, la SD accetta una bella serie di print e println
  2. volendo fare delle letture di più pin, ed usare dei cicli for, bisogna usare dei vettori/array.
  3. nel IDE usa CTRL+T che indenta meglio il codice

Punto 2:
devi dichiarare non 8 variabili ma un array di 8 elementi

byte sensorPin[]={A0,A1,A2,A3,A4,A5,A6,A7};

Questo permette nella loop() di fare un ciclo

File dataFile=SD.open("datalog.txt", FILE_WRITE);
if (dataFile)
{ for (int i=0;i <8;i++)
  { int sensor= analogRead (sensorPin[i]);
     // cosa faccio con il valore ? Lo mando nel file
    dataFile.print(sensor); dataFile.print(";");
    // e anche su monitor seriale, se serve
    Serial.print(sensor); Serial.print(";");
  }
  dataFile.print("\n");   // mette un vai a capo
  Serial.print("\n");
  dataFile.close();
}
else   //if the file isn't open, pop up an error:
{ Serial.println ("error operning datalog.txt");
}

Tutta la tua setup() è una scopiazzatura mal riuscita, ci sono semplici esempi già scritti.
Questa una versione più corretta, non so se ti serve quel while(!Serial) si usa solo per Leonardo

const byte chipSelect = 10; //ArduinoNano
void setup() 
{ delay(1000);
  Serial.begin(9600);
  while (!Serial) ; // wait for serial port to connect. Needed for native USB port only
  Serial.println("Initializing SD card module datalogger");
  // see if the card is presente and can be initialized:
  if (! SD.begin(chipSelect)) 
  { Serial.println("Card failed, or not present");  
    while (1); // don't do anything more
  }
  Serial.println ("card initialized");
}

Grazie per avermi dedicato il vostro tempo e chiedo scusa per una risposta così tardiva. Situazioni varie non mi hanno permesso di farlo prima di oggi.
Mi sono applicata un pò di più con lo studio e anche grazie alle vostre preziose indicazioni ora funziona tutto. Grazie per la vostra cortesia e disponibilità nonostante il mio goffo incedere nel forum.
Crescono i dubbi ma anche la curiosità...
Grazie
A presto