Go Down

Topic: Grundsatzfragen SD lesen und Werte zuordnen. (Read 3770 times) previous topic - next topic

ElEspanol

Ich nehm das normalerweise gar nicht, lag halt gerade hier so rum und hörte sich gut an  :smiley-mr-green:

MaHa76

:) Vielen Dank schon mal an alle- gebt mir mal etwas Zeit damit zu basteln - hab heute früh noch ne andere Baustelle aufgemacht (nur mal eben ne Torte einblenden, wenn heute jemand Geburtstag hat :) ) - die Suppe muss ich grad mal auslöffeln :)

ElEspanol

Hier mit readByresUntil und ein paar Kommentaren zum besseren Verständnis. Wenn du das mit dem struct intus hast, sollte es hiermit für dich recht einfach sein, weiterzumachen.

Code: [Select]

// 07,23, 1,1,1,1,1,1,1, 1,1,1, Wecker1
// Stunde, Minute, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag, Feiertag, Brückentag, aktiviert, Wecker gesetzt

#include <SPI.h>
#include <SD.h>
#include <Streaming.h>
char buffer[100];
File myFile;
const char* datei = "Wecker.txt";

uint16_t zeilenanzahl;  // Anzahl der Datensätze. Es sollten keine Leerzeilen am Schluss des Files stehen
struct Daten  // hier bauen wir unsere Datenstruktur
{
  byte Stunde;
  byte Minute;
  bool Montag;
  bool Dienstag;
  bool Mittwoch;
  bool Donnerstag;
  bool Freitag;
  bool Samstag;
  bool Sonntag;
  bool Feiertag;
  bool Brueckentag;
  bool aktiviert;
  bool gesetzt;
};
Daten Wecker[20];  // hier wäre eine dynamische Dimensionierung schön

uint16_t arraySize = sizeof(Wecker) / sizeof(Wecker[0]); // wird später bei dynamischer Dimensionierung gebraucht

void setup() {
  Serial.begin(115200);
  Serial << "Struct Array Size: " << arraySize << endl;


  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  myFile = SD.open(datei);
  if (myFile) {   // hier muss noch bessere Fehlerbehandlung rein
    Serial.println(datei);

    // read from the file until there's nothing else in it:
    while (myFile.available()) {   // mit dieser Schleife füllen wir das struct array mit den Daten aus der Datei

      memset(buffer, 0, sizeof(buffer));  // Puffer leeren
      myFile.readBytesUntil('\n', buffer, sizeof(buffer) - 1);
      Serial << zeilenanzahl + 1 << ". Zeile:\t" << buffer << endl; // Inhalt der Datei wird zur Kontrolle ausgegeben
      // struct array wird gefüllt
      Wecker[zeilenanzahl].Stunde = atoi(strtok(buffer, ","));
      Wecker[zeilenanzahl].Minute = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].Montag = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].Dienstag = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].Mittwoch = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].Donnerstag = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].Freitag = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].Samstag = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].Sonntag = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].Feiertag = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].Brueckentag = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].aktiviert = atoi(strtok(NULL, ","));
      Wecker[zeilenanzahl].gesetzt = atoi(strtok(NULL, ","));
      zeilenanzahl++;
    }
    // close the file:
    myFile.close();

  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening Wecker1.txt");
  }

  for (uint16_t index = 0; index < zeilenanzahl; index++) {  // struct array Inhalt  wird zur Kontrolle ausgegeben
    Serial << Wecker[index].Stunde << ":" << Wecker[index].Minute << "  " << Wecker[index].Montag  << Wecker[index].Dienstag << Wecker[index].Mittwoch;
    Serial << Wecker[index].Donnerstag << Wecker[index].Freitag << Wecker[index].Samstag << Wecker[index].Sonntag << "  "  << Wecker[index].Feiertag;
    Serial << Wecker[index].Brueckentag << "  " << Wecker[index].aktiviert << Wecker[index].gesetzt << endl;
  }

}

void loop() {
  // put your main code here, to run repeatedly:

}

Go Up