INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Werte aus der SD - Karte zuordnen
05.09.2015, 18:31
Beitrag #1
Werte aus der SD - Karte zuordnen
Hallo,

ich versuche die Ganze zeit werte zuzuordnen die auf der SD-Karte stehen

Code:
#include <SD.h>
#include <SPI.h>

File myFile;
float aa, ab, ac, ad, ae;

void setup()
{
// Open serial communications and wait for port to open:
  Serial.begin(9600);

   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
aa = 1;
ab = 2;
ac = 3;

  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  SD.remove("test.txt");
  myFile = SD.open("test.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test.txt...");
    myFile.println(aa);
    myFile.println(ab);
    myFile.println(ac);
    myFile.println(ad);
    myFile.println(ae);
    // close the file:
    myFile.close();
    Serial.println("done.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
//----------------- hier beginnt das problem ------------
  // re-open the file for reading:
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");
  
    // read from the file until there's nothing else in it:
    while (myFile.available())
    {
        Serial.write(myFile.read());
    }
    // close the file:
    myFile.close();
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
}

void loop()
{
  
  //geh pennen
}

ich weis hier nicht mehr weiter wie ich die Daten die richtig geschrieben sind auch so ausgegeben werden, zuordnen kann
Hat jemand einen rat ? ... wäre dankbar
Gruss Gandi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.09.2015, 18:36
Beitrag #2
RE: Werte aus der SD - Karte zuordnen
Zitat:ich versuche die Ganze zeit werte zuzuordnen die auf der SD-Karte stehen

WAS willst du machen?
ich verstehe den Sinn in deiner Frage nicht - kannst du deine Frage bzw. dein Problem einmal deutlich in richtigem Deutsch formulieren? Evtl mit einer Beispieltabelle, was wo wie steht, wie es dort hinkommt, was zugeordnet wird und was wie ausgelesen werden soll?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.09.2015, 18:45
Beitrag #3
RE: Werte aus der SD - Karte zuordnen
ich will mehrer Gesamtleistungen speichern.
Diese sollen sozusagen bei absturz oder netzausfall gespeichert werden
habe derzeit 3 Leistungs sensoren dran und will die gesammt aufnahme Zwischenspeichern so das wenn ich das System neustarte dann den Letzten wert nimmt den er hat und dann weiter zählt

Beispiel

Sensor 1 = 1.500 KW/h
Sensor 1 = 1.504 KW/h
Sensor 1 = 1.508 KW/h

absturz

Sensor 1 = 1.512 KW/h
Sensor 1 = 1.516 KW/h
usw.

Gruss Gandi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.09.2015, 19:03 (Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2015 19:08 von HaWe.)
Beitrag #4
RE: Werte aus der SD - Karte zuordnen
du willst also ZAHLEN speichern.

sind es Integer-Werte oder Float-Werte?
(Integer sind viel einfacher zu händeln als Float, es geht aber beides problemlos!)

wieviele Zahlen willst du in einem Rutsch speichern?
Immer nur 1 Zahl pro Schreibvorgang oder mehrere Zahlen auf einmal?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.09.2015, 19:19
Beitrag #5
RE: Werte aus der SD - Karte zuordnen
Hallo noch mal HaWe
Ja werden nur zahlen gespeichert.
Es sollen schon in einen rutsch immer 5 Werte werden ( Vorerst ).

Also

power1
power2
power3
power4
power5

das sind werte die immer in einen rutsch gespeichert werden sollen

also immer ein wert pro zuordnung

Im grunde kann man das mit 5 analogen Stromzähler sehen die nach dem ausfall auch an der selben stelle weiter drehen .. nur der Arduino weis ja nicht wo er weiterdrehen soll. Smile

gruss Gandi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.09.2015, 19:23
Beitrag #6
RE: Werte aus der SD - Karte zuordnen
bitte immer alles genau lesen:

sind es Integer-Werte oder Float-Werte?
(Integer sind viel einfacher zu händeln als Float, es geht aber beides problemlos!)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.09.2015, 20:24
Beitrag #7
RE: Werte aus der SD - Karte zuordnen
Nach dem ich mit dem Float und Integer nicht ganz klar gekommen bin ... muss ich die antwort Float geben da es keine ganzen zahlen sind.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.09.2015, 20:29 (Dieser Beitrag wurde zuletzt bearbeitet: 05.09.2015 20:50 von HaWe.)
Beitrag #8
RE: Werte aus der SD - Karte zuordnen
ok, dann probieren wir es mit dem testcode so:

SD file öffnen
5x floats schreiben,
SD file schließen,

dann
SD file öffnen,
5x floats lesen,
SD file schließen.

nennen wir sie
float p1, p2, p3, p4, p5;

zu Kontrolle zum Vergleichen nach dem anschließenden Auslesen:
float a1, a2, a3, a4, a5;

einverstanden?




dann kommt jetzt der Code:
ich habe es noch nicht probiert, kann es morgen erst testen.
Könnte aber durchaus funktionieren:
Code:
/*
SD card: fprintf_() und fgets_()
ver 1.01
*/


#include <SPI.h>
#include <SD.h>



// SD Card
#define SD_CSpin 38  //  <<<<<<<<<<<<<<<<<<<<<< adjust !!

File myFile;
char fname[64];

char sdata[128];
char sbuf[128];



int32_t fprintf_ ( File * stream, const char fmtstr[], ... ) {
   char      str[1024];
   va_list   args;
   int32_t   num;
  
   va_start( args, fmtstr );
   num = vsnprintf(str, sizeof(str), fmtstr, args);
   stream->print(str);
   va_end( args );

   return num;
}




char * fgets_ ( char * str, int32_t num, File * stream ) {
  int32_t i = 0;

  strcpy(str, "");
  while ( (stream->available()) && (i < num-1) ) {
    int16_t ch = stream->read();
    if (ch < 0)     // end of file
      break;
    str[i++] = ch;
    if ('\n' == ch) // end of line
      break;
  }

  if (i) {          // room in buffer for terminating null
    str[i] = 0;
    return str;
  }
  else
  // return NULL;                  // buffer too small or immediate end of file
  { strcpy(str, ""); return str; } // alternative: return ""
}





void setup()
{
  int16_t  p, i, cnt;
  float p1, p2, p3, p4, p5;
  float a1, a2, a3, a4, a5;

  char     sval[20];


  pinMode(SD_CSpin, OUTPUT);
  Serial.begin(115200);
  
  sprintf(sbuf,"#: SD Initializing... ");
  Serial.println(sbuf);

  while(!SD.begin(SD_CSpin) ) {
    sprintf(sbuf,"#: ...SD init failed ");
    Serial.println(sbuf);
    delay(1000);
  }

  sprintf(sbuf,"#: ...SD OK !      ");
  Serial.println(sbuf);
  strcpy(fname,"test.txt");

  if (SD.exists(fname) ) {
    sprintf(sbuf,"#: %s exists     ",fname);
    Serial.println(sbuf);
  
    sprintf(sbuf,"#: Removing %s      ",fname);  
    Serial.println(sbuf);
  
    SD.remove("test.txt");
    // removed: success ?
    if (SD.exists(fname) ) {
       sprintf(sbuf,"#: %s  exists     ",fname);
       Serial.println(sbuf);
    }
    else {
       sprintf(sbuf,"#: %s  N/A     ",fname);
       Serial.println(sbuf);
     }
  }
  
  // assign values:
  p1=1.1;
  p2=2.2;
  p3=3.3;
  p4=4.4;
  p5=5.5;

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
  myFile = SD.open(fname, FILE_WRITE);

  if (myFile) {
    // if the file opened okay, write to it, then close file:
    sprintf(sbuf,"#: Writing strings to %s ",fname);
    Serial.println(sbuf);
  
    //---------------------------------------------------------------------------------
    // write data to file
    fprintf_(&myFile, "%f\n%f\n%f\n%f\n%f\n", p1,p2,p3,p4,p5);  
    //---------------------------------------------------------------------------------
  
    // close the file:
    myFile.close();
    sprintf(sbuf,"#: %s closed.   ",fname);
    Serial.println(sbuf);
  }
  else {
    // if the file didn't open, print an error:
    sprintf(sbuf,"#: error opening %s   ",fname);
    Serial.println(sbuf);    
  }

  Serial.println();
  // re-open the file for reading:
  myFile = SD.open(fname);
  if (myFile) {
    sprintf(sbuf,"#: reading %s ",fname);
    Serial.println(sbuf);
  
    // read from the file until there's nothing else in it:
    i=0;
    cnt=1;  
  
    while (myFile.available()) {
      strcpy(sdata, "");
      fgets_ ( sdata, 20, &myFile );
      Serial.print(cnt);

      // als string gelesen
      Serial.print(sdata); Serial.print(" ");  

      // in floats zurück verwandelt
      if (cnt==1) {a1=atof(sdata); Serial.print("a1  ="); Serial.println(a1); }
      if (cnt==2) {a2=atof(sdata); Serial.print("a2  ="); Serial.println(a2); }
      if (cnt==3) {a3=atof(sdata); Serial.print("a3  ="); Serial.println(a3); }
      if (cnt==4) {a4=atof(sdata); Serial.print("a4  ="); Serial.println(a4); }
      if (cnt==5) {a5=atof(sdata); Serial.print("a5  ="); Serial.println(a5); }    
      ++cnt;
    }
  
    // close the file:
    myFile.close();      
    sprintf(sbuf,"#: %s closed. ",fname);
    Serial.println(sbuf);    
  }
  else
  {
    // if the file didn't open, print an error:
    sprintf(sbuf,"#: error opening %s   ",fname);    
    Serial.println(sbuf);

  }
}

void loop()
{
  // nothing happens after setup
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Se(h)Karte mit LED beleuchten manfredo 29 638 19.11.2016 16:29
Letzter Beitrag: Tommy56
  SD Karte wird nicht erkannt... Maxi290997 2 204 16.08.2016 14:36
Letzter Beitrag: Maxi290997
  Gewichteten Durchschnitt berechnen, 20 Werte in fortlaufender Variable speichern TimeMen 10 468 03.07.2016 09:00
Letzter Beitrag: Binatone
  Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht TimeMen 24 738 02.07.2016 14:18
Letzter Beitrag: hotsystems
  char* inhalt in eine Datei auf SD-Karte schreiben MartinK 0 341 30.03.2016 16:42
Letzter Beitrag: MartinK
  Problem: RFID code mit Inhalt einer Textdatei auf einer SD Karte vergleichen MartinK 6 512 29.03.2016 16:45
Letzter Beitrag: MartinK
  Werte an anderes Programm weiterleiten Typ 2 438 12.03.2016 23:28
Letzter Beitrag: Typ
  digitale Werte trotz Stromunterbrechung nicht verlieren goldfisch 63 4.234 06.01.2016 13:17
Letzter Beitrag: Bitklopfer
  werte vom MPU6050 gy521 bekommen max1798 0 463 18.12.2015 21:11
Letzter Beitrag: max1798
  SD-Karte schreiben mit Mega2560 und CTE70-Display tupper-meister 12 1.431 29.11.2015 11:57
Letzter Beitrag: tupper-meister

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste