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?
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"
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!
>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.
in questo caso String e stringhe non servono a nulla, la SD accetta una bella serie di print e println
volendo fare delle letture di più pin, ed usare dei cicli for, bisogna usare dei vettori/array.
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