Moin moin!
Ich habe mir einen CNC-Plotter aus 2 alten Laufwerken, nem Servo und nem Arduino Nano gebaut.
Dieser empfängt Seriell(USB) von meinem Laptop 5 einzelne Parameter als Float Zahlen und arbeitet die so empfangengen Gcode Befehle ab und holt sich dann neue Parameter.(Funktioniert bestens!)
Nun habe ich mir ein kleines SDCard shield geholt und möchte, dass mein Arduino am anfang des Vorganges alle Gcode-Befehle, sprich alle Float Variablen auf eine SD Karte schreibt und sich diese dann von Zeit zu Zeit abarbeitet.
Wie kann ich nun ECHTE Floats auf die SD Karte schreiben?
Und wie kann ich Sie zu beliebieger Zeit stück für stück nacheinander Auslesen?
versucht habe ich es wie folgt(nicht der komplette sketch):
//Globale Variablen
float G_empfangen = 8; // 8=kein gültiger code Frage Gcode ab!
float X_empfangen=0;
float Y_empfangen=0;
float I_empfangen=0;
float J_empfangen=0;
//SDCard
File GcodeFile;
void setup()
{
//... andere sachen
GcodeFile = SD.open("gcode.txt", FILE_WRITE);// öffne gcode file bereit für lesen/schreiben
writeSD(); // Schreibt alle Gcode Daten auf gcode.txt
GcodeFile.close();
GcodeFile = SD.open("gcode.txt", FILE_READ);// öffne gcode file bereit für lesen
//... andere sachen
}
//SD Card beschreiben
void writeSD()
{
int i=0;
float Buffer_G = 0; //inc float
byte* Buffer_G_adr = (byte*) &Buffer_G; //adresse der float
float Buffer_X = 0; //inc float
byte* Buffer_X_adr = (byte*) &Buffer_X; //adresse der float
float Buffer_Y = 0; //inc float
byte* Buffer_Y_adr = (byte*) &Buffer_Y; //adresse der float
float Buffer_I = 0; //inc float
byte* Buffer_I_adr = (byte*) &Buffer_I; //adresse der float
float Buffer_J = 0; //inc float
byte* Buffer_J_adr = (byte*) &Buffer_J; //adresse der float
while((int)Buffer_G != 9)
{
//G
while(!Serial.available());
while(Serial.available())
{
Serial.readBytes(Buffer_G_adr, 4);
}
GcodeFile.write(Buffer_G_adr, 4); //Float schreiben
//Quittieren mit dem gleichen Wert
for(i=0; i<4; i++)
{
Serial.write(Buffer_G_adr[i]);
}
//X
while(!Serial.available());
while(Serial.available())
{
Serial.readBytes(Buffer_X_adr, 4);
}
GcodeFile.write(Buffer_X_adr, 4); //Float schreiben
//Quittieren mit dem gleichen Wert
for(i=0; i<4; i++)
{
Serial.write(Buffer_X_adr[i]);
}
//Y
while(!Serial.available());
while(Serial.available())
{
Serial.readBytes(Buffer_Y_adr, 4);
}
GcodeFile.write(Buffer_Y_adr, 4); //Float schreiben
//Quittieren mit dem gleichen Wert
for(i=0; i<4; i++)
{
Serial.write(Buffer_Y_adr[i]);
}
//I
while(!Serial.available());
while(Serial.available())
{
Serial.readBytes(Buffer_I_adr, 4);
}
GcodeFile.write(Buffer_I_adr, 4); //Float schreiben
//Quittieren mit dem gleichen Wert
for(i=0; i<4; i++)
{
Serial.write(Buffer_I_adr[i]);
}
//J
while(!Serial.available());
while(Serial.available())
{
Serial.readBytes(Buffer_J_adr, 4);
}
GcodeFile.write(Buffer_J_adr, 4); //Float schreiben
//Quittieren mit dem gleichen Wert
for(i=0; i<4; i++)
{
Serial.write(Buffer_J_adr[i]);
}
}
}
//nächsten 5 Parameter von SD Card auslesen
void Gcode()
{
byte * G_adr = (byte*) &G_empfangen;
byte * X_adr = (byte*) &X_empfangen;
byte * Y_adr = (byte*) &Y_empfangen;
byte * I_adr = (byte*) &I_empfangen;
byte * J_adr = (byte*) &J_empfangen;
//G
GcodeFile.readBytes(G_adr, 4);
//X
GcodeFile.readBytes(X_adr, 4);
//Y
GcodeFile.readBytes(Y_adr, 4);
//I
GcodeFile.readBytes(I_adr, 4);
//J
GcodeFile.readBytes(J_adr, 4);
//Enable PIN
digitalWrite(12, HIGH);
}
Ich habe alles mögliche versucht aber irgendwie keinen erfolg gehabt.
Im Setup() schließe und öffne ich die datei um wieder an den Anfang zu kommen und so nach und nach die 4Byte großen Parameter auszulesen.
es haut aber irgendwie vorne und hinten nicht hin. die erstellte datei ist leer. (0Byte groß)
Ich hoffe ihr könnt mir helfen, sitze da schon einige Tage drann.
Hinweis: Ich kann kein C++ lediglich C.
Vielen lieben dank im Vorraus!!