Pages: [1]   Go Down
Author Topic: Daten Logging Problem  (Read 1334 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo ich habe ein Problem beim schreiben von Daten auf eine SD-Karte.
Ich schaffe es ohne weiteres Daten (Werte von Sensoren) auf die SD-Karte als txt oder csv
Datei zu speichern nur bei der csv Datei habe ich nun ein Problem. (Zum auswerten benutzte ich Excel).
Ich schaffe es die Daten alle untereinander aufzulisten also der erste Wert in A1 der zweite in A2 usw. .
Nun möchte ich aber den ersten Wert in A1 und den zweiten in B1 haben wie sage ich das meinem Arduino ???
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Soweit ich weiß müsstest du dem Arduino nicht anweisen jeden Wert in eine neue Zeile zu schreiben sondern einfach die werte zb mit ; getrennt hintereinander.
Beim Excel sagst du dann das das Trennzeichen ein ; ist und er teilt es auf.

Wobei aber zu bedenken ist das soweit ich mich erinnern kann Excel in diese Richtung nur bis ZZ kann nach unten hin aber bis ich glaube irgendwas um 65000.

Wie viel Werte hast du?

Und ich habe mal eine Funktion in Excel gesehen die Werte die untereinander stehen umdreht und nebeneinander schreibt.
Diese Funktion habe ich letztens noch mal gesucht aber nicht gefunden.
Ich habe sie aber schon mal benutzt.

Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ja ich habe es mit ; und , versucht allerdings macht er dann in A1 Wert,Wert,Wert,Wert
in einem anderen csv Programm macht er es so wie gewollt aber ich wollte es gerne mit Excel machen
Logged

NRW
Offline Offline
Sr. Member
****
Karma: 2
Posts: 372
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das geht aber.
Ich kann dir jetzt leider nicht genau sagen worauf du achten musst weil ich kein richtiges Excel hier habe aber das geht definitiv.

Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ja geht ich habe die Lösung selber gefunden ist kein Problem von Arduino sondern von Excel
einfach alle Daten (Werte) makieren und dann Hilft dir Daten -> Text in Spalten -> Trennzeichen Semikolon -> Fertigstellen weiter
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21938
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

CSV-Dateien haben 2 "Steuerzeichen" : eines um die Inhalte der einzelnen Felder in einer Zeile zu trennen und eines um eine neue Zeile anzuzeigen. Normalerweise sind das der Beistrich und Zeilenumbruch. Excel ermöglicht aber auch, wie Du entdeckt hast, andere Sonderzeichen einzusetzen.
http://de.wikipedia.org/wiki/CSV_%28Dateiformat%29
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das mit den Werten hast du ja selbst gefunden. du kannst auch gleich den Tabulator als "Spaltentrennzeichen" angeben. ASCI-Zeichen 9, dann macht Excel automatisch spalten daraus. Wenn du's ganz sauber haben willst, fasst du deine Texte noch in Anführungszeichen ein, die Zahlen nicht. z.B. (die leerzeichen sind nur für die lesbarkeit hier)

#2012/05/28 12:00:00# TAB 1 TAB 3,4 TAB "Ventil an"
#2012/05/28 12:03:25# TAB 1 TAB 6,4 TAB "Ventil aus"

Excel erkennt dann automatisch Datumswerte (solange das englische Format benutzt wird), Zahlen (kann sein, dass du einen Punkt statt Komma übergeben musst) und Texte. Dann hast auch gleich die richtigen Zahlenformate in den Spalten. Genaueres findest du in der Hilfedatei, MSDN und Excel-Foren.

Die Anzahl der Zeilen und Spalten hängt von der Version von Excel ab. Ab 2010 hast du (glaub ich...bin zu faul zum googeln) 65000 Spalten und ein paar Millionen Zeilen. Für (fast) jeden ausreichend Platz in alle Richtungen.

cu markus
Logged

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Könnt jmd vllt den Lösungansatz mal hochladen, habe es versucht von meiner GUI drei strings von verschiedenen Textboxen am Arduino zu senden und diese in die CSV datei zu speichern. Es geht doch er speichert alle 3 strings in eine Spalte als einen Eintrag.
Könnte den ein oder anderen Tip benötigen.

Wichtiger hinweis: Bevor die 3 strings in die csv. datei geschrieben werden , werden sie in einem buffer geladen und der Bufferinhalt in die csv geschrieben
 kann mir da jmd helfen?

Anbei noch die Teilfunktion meines programmes, die für das Schreiben auf der SD zustänsig ist:
Code:
void write_SD()
{
        if (Serial.available()>0)
        {
          if (inByte ==13) //enter
          {
            Serial.print("Initializing SD Card...");
              if (!SD.begin(chipSelect))
              {
                Serial.println("Initialization failed");
                return; //tue nichts
              }//endif
              Serial.println("SD Card initialized");
 
           //Schreibzugriff
           Datei= SD.open("test91.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.println(Text);
              //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
            {
              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
            }//endif check array of overfolw
          }//end else
        }//endif serial available
}//end fu
« Last Edit: May 11, 2013, 03:53:26 pm by milito » Logged

Offline Offline
Edison Member
*
Karma: 39
Posts: 1184
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

CSV heißt ja "Comma Seperated Values".

Wenn die Werte mit Kommas getrennt sind, kann Excel die auch lesen.
Wenn man eine csv Datei mit Excel öffnet, dann erscheint üblicherweise ein Menue  in dem unter anderem auch nach dem trennenden Zeichen gefragt wird. Wie genau der Dialog aussieht, hängt von deiner Excel Version ab. Du kannst hier auch Tab (char(9)) oder ; oder andere Trennzeichen angeben, je nach dem welches Trennzeichen du in die Datei auf der SD geschrieben hast.

Das ist aber nur ein Excel Thema, kein Arduino thema.
Logged

Grüße
Gunther

Offline Offline
Sr. Member
****
Karma: 2
Posts: 272
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

HI Gunther,
danke dir smiley-grin.
Habe es jetzt so gemacht, dass ich von meiner Gui aus die ; aus mit dem String absende und er sie dann somit in die excel datei aufspaltet. Der Arduino emüfängt sie praktisch schon mit dem Semikolon und dann speichert er diese in die csv.Datei
Schau;

Code:
SerialPort_i2c.Write(txtbox_slaveadr_i2c.Text & ";") //; damit in csv datei in spalten

                SerialPort_i2c.Write(txtregister_i2c.Text & ";")
                SerialPort_i2c.Write(txtbox_i2c.Text) //durch vbr = Enter, d.h. wenn ein ganzer String wird ein enter gesendet und arduino weiß ok              gsnzer String
                SerialPort_i2c.Write(vbCr)
                MsgBox("Transfer successful")
Logged

Pages: [1]   Go Up
Jump to: