ja also bisher sende ich immer nur zeilen an den arduino, der sie einfach an die csv.datei dranhängt. Doch ich kann mit dem arduino den kompletten dateiinhalt der csv.datei an die gui senden.
Nun möchte ich , wie du sagtest in punkt 3 , jedesmal wenn ich den Save to SD button betätige(siehe neue skizze im anhang), den kompletten Listbox inhalt in die csv.Datei schreiben bzw. den alten Dateiinhalt mit dem neuen (aus listbox) überschreiben.
Habe jetzt in der zeit vieles versucht, och es klappt nicht.
Also dachte es mir so, ich sende zeilenweise die einträge meiner listbox an dem arduino und er schriebt sie zeilenweise in die csv.datei rein, bis nichts ankommt. falls eine csv.datei vorhanden ist, wird diese gelöscht und die datei neu erstellt(überschrieben). Also das zeilenweise senden von der GUI aus habe ich hinbekommen, doch von seitens des Arduinos komme ich nicht mehr weiter(also bzw der arduino teil mit dem empfangen der zeilen und diese verarbeiten fehlt mir bzw kriege ich nciht hin.
Das ist mein VB-Code dazu:
For Each ListItem As String In listbox_i2c_editparameter.Items
parameter = ListItem
SerialPort_i2c.Write(parameter)
SerialPort_i2c.Write(Environment.NewLine)
Next
MsgBox("Parameterlist was saved in I2C.csv")
Hier der Arduino teil, der mir aber nur eine zeile an die csv datei dranhängt, kannst du mir bitte helfen dass so umzustellen, dass ich den kompletten inhalt der Listbox in die SD karte schreibe (alte Datei überschreiben)? -> komme einfach nicht mehr weiter und weiß nicht mehr wie ich dass codemäßig umsetzen soll
Arduino code:
void write_SD()
{
if (Serial.available()>0)
{
if (inByte ==13) //enter
{
Serial.println("Initializing SD Card...");
if (!SD.begin(chipSelect))
{
Serial.println("Initialization failed");
return; //tue nichts
}//endif
Serial.println("SD Card initialized");
if (SD.exists("test2.csv"))
{
Serial.println("File exists");
}
else
{
Datei=SD.open("test2.csv", O_CREAT | O_WRITE);
Datei.println("Anz_Parameter;Adresse;Register;Data");
Datei.close();
}
//Schreibzugriff
Datei= SD.open("test2.csv", O_CREAT | O_WRITE); //Das gleiche wie FILE_WRITE. doch es beschleunigt das Schrieben auf SD
//Datei=SD.open("test2.txt", FILE_WRITE);
//falls Datei ok, schreibe
if (Datei)
{
//delay(150); //verzögerung, da schreiben auf SD karte langsamer ist
//Datei.write(Test); //ohne zeilenumbruch
//Datei.write(13); //schreibe nach jedem eintrag ein carriage return line feed, damit strings zeilenweise einetragen werden
Datei.print(Text);
Datei.println(); //Damit er in neue zeile schreibt
//inhalt von Array Text in SD schreiben(commands.txt)-> println mit zeilenumbruch
Datei.close(); //Damit änderung gespeichert werden, diese Datei schliessen
Serial.println("Data stored in SD card");
/*Nachdem enter gekommen ist und daten gespeichert wurden
setze Array wieder auf 0 und lösche inhalt*/
index=0; //index auf 0 initialisieren
memset(&Text[0], 0, sizeof(Text)); //durch memset wird Array gelöscht
Serial.println("Array initialized");
}//endif datei vorhanden?
}//endif kontroll enter
else//fals kein enter,soll weiter in array speichern
{
if (index <400)//schauen , ob array overflow hat //vorher 400
{
Text[index]=inByte; //solange kein ´Enter vom Arduino empfangen wird, schreibe in Array
index++; //und zähle position hoch -> z.b. wenn ich hallo sende-> jeder buchstabe bekommt eine position
delay(100);
}//endif check array of overfolw
}//end else
}//endif serial available
}//end fu
Anbei noch die Skizze , wie ich das realisieren möchte und danke wirklich .
michael_x:
Vermutlich verstehe ich dein Problem nicht.
( Das Bild ist jedenfalls eher verwirrend )
(1)Bisher sendest du einzelne Zeilen an den Arduino, der sie zur csv Datei hinzufügt ?
(2)Ausserdem sendet der Arduino die komplette Datei an die GUI ?
Jetzt fehlt dir noch, dass die GUI eine komplette Datei an den Arduino sendet ?
Wäre sowas möglich, und wie ?
Ja, klar
Wenn ich das oben richtig verstanden habe, musst du nur erkennen, ob das was kommt eine zusätzliche Zeile ist, oder der Beginn einer ganzen Datei.
Wie wäre es z.B. mit einem Clear - Kommando vorweg ?
Danach kommen mehrere Zeilen, die an die dann leere Datei angefügt werden, mit Methode (1)