hello everybody,
(before hand sorry for my bad english, i am from the netherlands)
I have a problem in a program with a floatingpoint value what i want to store to a sd-card in a string.
here is the program:
// eerste versie van de versnellingslogger voor de ADXL 335.
// deze stuurt de g-kracht waardes via serial uit en slaat deze op in de sd kaart.
#include <SD.h>
#include<stdlib.h>
int x, y, z;
const int chipSelect = 8; // de chipslect pin is 8 op sparkfun micro sd shield.
#define ADC_ref 2.56
#define zero_x 1.327 // hiermee kreeg ik -1 g bij vlak op de x kant liggen.
#define zero_y 1.327 // hiermee kreeg ik -1 g bij vlak op kant liggen op y kant.
#define zero_z 1.339 // hiermee kreeg ik -1 g bij plat liggen (aarde is 1g dus klopt).
#define sensitivity_x 0.3
#define sensitivity_y 0.3
#define sensitivity_z 0.3
float xv;
float yv;
float zv;
void setup()
{
Serial.begin(9600); // serial snelheid naar 9600 zetten
pinMode(10, OUTPUT); // nodig om sd library te laten werken
// kijken of kaart geinstalleerd is en kan worden gebruikt:
if (!SD.begin(chipSelect)) {
Serial.println("SD fout, of niet aanwezig");
// niets anders meer doen:
return;
}
Serial.println("SD klaar.");
}
void loop()
{
x = analogRead(0); // lees analoge input pin0
y = analogRead(1); // lees analoge input pin1
z = analogRead(2); // lees analoge input pin2
Serial.print("analoog van x, y, z: ");
Serial.print(x, DEC); // print de acceleratie van de x as
Serial.print(" "); // print een spatie tussen de nummers
Serial.print(y, DEC); // print de acceleratie van de y as
Serial.print(" "); // print een spatie tussen de nummers
Serial.println(z, DEC); // print de acceleratie van de Z as
Serial.print(" "); // print een spatie tussen de nummers
Serial.print("g-krachten van x, y, z: ");
Serial.print (xv);
Serial.print(" g ");
Serial.print(" "); // print een spatie tussen de nummers
Serial.print (yv);
Serial.print(" g ");
Serial.print(" "); // print een spatie tussen de nummers
Serial.print (zv);
Serial.print(" g ");
xv=(x/1024.0*ADC_ref-zero_x)/sensitivity_x;
yv=(y/1024.0*ADC_ref-zero_y)/sensitivity_y;
zv=(z/1024.0*ADC_ref-zero_z)/sensitivity_z;
// hier komt het sd kaart gedeelte voor wegschrijven van de analoge waarde van de versnellingsmeter.
String analoogString = ""; //de string analoogString aanmaken
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
analoogString += String(sensor);
if (analogPin < 2) {
analoogString += ",";
}
}
File AnaloogFile = SD.open("datalog.txt", FILE_WRITE); // een bestand openen, pas op kan er maar 1 tegelijk open hebben, moet dan eerst de andere sluiten
// als het bestand er is ernaar schrijven:
if (AnaloogFile) {
AnaloogFile.println(analoogString);
AnaloogFile.close();
Serial.println(analoogString);
delay(2);
}
else {
Serial.println("fout AnaloogFile.txt"); // als het bestand niet open is dan error melding tonen.
}
// ---------------------------------------------------------------------------------------------------
// hier het gedeelte voor het opslaan van de digitale waardes van de g krachten (moet nog afmaken)
String DigiString = ""; //de string DigiString aanmaken
// hier het gedeelte code om de data in een string met de naam DigiString te zetten.
String digixgString = ""; //de string digixgString aanmaken om de g krachten op de x-as in op te slaan
String digiygString = ""; //de string digiygString aanmaken om de g krachten op de y-as in op te slaan
String digizgString = ""; //de string digizgString aanmaken om de g krachten op de z-as in op te slaan
// de variable xv in een de string digixgString zetten
digixgString += (xv); // wodt nu gerond op 10 maar moet een commagetal krijgen 1,... weet nog niet hoe!!!
// de variable yv in een de string digiygString zetten
digiygString += (yv);
// de variable zv in een de string digivgString zetten
digizgString += (zv);
DigiString = (digixgString+":"+digiygString+":"+digizgString); // hier de stringen samenvoegen
File digiFile = SD.open("digilog.txt", FILE_WRITE); // een bestand openen, pas op kan er maar 1 tegelijk open hebben, moet dan eerst de andere sluiten
// als het bestand er is ernaar schrijven:
if (digiFile) {
digiFile.println(DigiString);
digiFile.close();
Serial.println(DigiString);
delay(5);
}
else {
Serial.println("fout DigiFile.txt"); // als het bestand niet open is dan error melding tonen.
}
}
when i let the IDE check the code i get the error 'ambiguous overload for operator += in digixgString += xv'
the problem in in this part of the code:
String DigiString = ""; //de string DigiString aanmaken
String digixgString = ""; //de string digixgString aanmaken om de g krachten op de x-as in op te slaan
String digiygString = ""; //de string digiygString aanmaken om de g krachten op de y-as in op te slaan
String digizgString = ""; //de string digizgString aanmaken om de g krachten op de z-as in op te slaan
// de variable xv in een de string digixgString zetten
digixgString += (xv); // wodt nu gerond op 10 maar moet een commagetal krijgen 1,... weet nog niet hoe!!!
// de variable yv in een de string digiygString zetten
digiygString += (yv);
// de variable zv in een de string digivgString zetten
digizgString += (zv);
DigiString = (digixgString+":"+digiygString+":"+digizgString); // hier de stringen samenvoegen
then i tried to do this: digixgString += (xv,DEC); but the result on the sd-card is than 10 as result, and i want 1.142 enz......
when that did not work i found the dtostrf function but that didnt work (my fault???), i got 10:10 enz...
static char xvgoed[15];
dtostrf(xv,5,2,xvgoed);
DigiString = (xvgoed[15]+":"+digiygString+":"+digizgString);
thanks in advance.
kind regards,
LordP