SD-Karte auslesen und Zeile als char* speichern

Hallo Forum

Bevor ich nun das ganze Projekt aufgebe - hier mein Hilferuf an euch:

Kurze Beschreibung:

  • ESP32 mit SD-Card-Reader on board.
  • das Auslesen der Daten auf der SD-Karte funktioniert einwandfrei mit "c=file.read();"
  • danach wird dieser ausgelesene ( einzelne) Char per while-Schleife mit Serial.print auf dem seriellen Monitor korrekt ausgegeben, bis das Datei-Ende erkannt wird.

Das funktioniert also absolut problemlos.

Das eigentliche Problem ist nun:
Wie mache ich aus den einzelnen Chars einen Char* ?
Konkret: Ich lese von der SD-Karte einen etwa 20 Zeichen langen Namen ein und dieser soll dann als char*-Variable an das Hauptprogramm uebergeben werden.

Bitte um Hilfe, vielen Dank :slight_smile:

Hallo,
schon mal in den Beispielen der Library nachgeschaut ?

Woran erkennst du das Ende des Namens?
Wie lang ist dieser maximal?

char* ist ein Zeiger auf einen Speicherbereich. Den Speicherbereich kann "das Hauptprogramm" mitliefern, oder -da es bei Arduino einfach ist und nur ein Name gleichzeitig geht- du definierst einen static Bereich, dessen Adresse die Leseroutine zurückliefern kann.
Endekennung nicht vergessen.

Hallo michael_x

Vielen Dank fuer deine schnelle Antwort.
Ich habe bereits einige deiner Beitraege studiert, muss aber leider zugeben, dass diese meinen geistigen Horizont komplett uebersteigen :slight_smile:
Ich bin ein einfacher Maschinenbau-Ingenieur und betreibe das Programmieren lediglich aus der zwingenden Not heraus.

Da ich mir sicher bin, dass du mir dabei helfen kannst, das Problem auf recht einfache Weise zu loesen:
Darf ich dich privat ansprechen und mich mit dir per Email oder Whatsapp weiter besprechen?

Vielen Dank!

Woher weißt du wo der Name beginnt und wo er endet?
Und warum muss es unbedingt ein Zeiger werden?
Wie gedenkst du die Speicherreservierung zu gestalten?

Mich nicht!
Ich mache keine individual Kurse.
Bist du wirklich so egomanisch?

Dann wirst du meine Antworten auch nicht verstehen.

Jammern hilft hier nicht.
(eher im Gegenteil)

Privatkurse widersprechen dem Grundgedanken eines Forums, in dem Themen öffentlich diskutiert werden, damit auch andere etwas daraus lernen können.

Außerdem ist es sehr sinnvoll, wenn Du die Dir gestellten Fragen beantwortest.

Gruß Tommy

Hallo Matze_1

Hier kommt was zum Lesen am Abend.

Dann solltest du auch zwingend die Hilfe annehmen.
Dazu gehört auch das Lesen von Dokumentationen und Beispielen.

Och, das wird Matze schon machen, wenn er sein Projekt nicht aufgeben will.

Da bin ich mir bei Änfängern nicht mehr sicher. Das zeigt die Erfahrung der letzten Monate.

Wir bezahlen 1.000 Euro fuer die Loesung des Problems.

Fuer jede irrelevante Antwort ziehe ich Euro 800.- ab.

Was soll der Quarsch. Du machst dich damit mehr als unglaubwürdig.

Ist doch gelöst, also erledigt. Der Rest ist Trollen.

Gruß Tommy

Darfst du natürlich, hab dir da auch schon geantwortet.

@combie musst du aushalten, und sein Standardkommentar, dass es kontraproduktiv ist, sich selbst zu bestätigen, dass man keine Ahnung hat, ist richtig.

Wenn du statt Antworten Fragen bekommst, geschieht das nicht um dich anzumachen oder dich zu vergraulen. (Wenn es diesen Effekt hat, wird das Ganze sowieso nichts)

Immerhin kennst du den weisst du dass es einen Unterschied zwischen einem char* und einem char gibt. Und es gibt auf jedem Level Informationen zu C/C++ und Texten, da musst du selber suchen, lesen, ausprobieren, im Zweifel fragen.

Dein Thread-Titel behauptet, du möchtest nicht einen Namen lesen, sondern eine Zeile.
Das denn nun?
Statt auf eine Antwort von dir zu warten, ein Tip: Eine Zeile hat (mindestens) ein Zeilenende-Zeichen, ein Name könnte eventuell schon beim Aufteten eines Leerzeichens enden, bei Dateien findet man auch andere Trennzeichen, z.B. ',' oder ';'
Wenn es deinen Horizont übersteigt, dich mit solchem Kram zu beschäftigen, solltest du dir ein anderes Hobby suchen. Wenn du dich mit solchem Gefummel nicht beschäftigen willst, besser auch.

Mit 'Malen nach Zahlen' kann man durchaus anfangen. Kunst wird es erst, wenn man darüber hinaus kommt.

Hallo Forum

Ich entschuldige mich fuer meine eventuell ( und wahrscheinlich ) falsch gewaehlten Worte.
Die waren - zumindest zum Anfang - nicht so gemeint.

Zurueck zum Thema:
Mittlerweile bin ich in der Lage, die einzelnen Zeilen der Text-Datei auf der SD-Karte erfolgreich einzulesen.
Diese Zeilen werden mit einem \n abgeschlossen und es wird danach eine neue Zeile erkannt.
Die einzelnen Zeilen speichere ich in einem Array.

Kurzum:
Alles funktioniert einwandfrei.
Aber da steckt noch irgendwo ein heimtueckischer Fehler drin.

Die einzelnen chars werden korrekt ausgelesen, korrekt zu einem Array zusammengefuegt.
Dieses Array ist der Zugang zu einem WiFi.
ssid und password werden mit array[0] und array[1] verknuepft.
Die serielle Ausgabe bestaetigt mir, dass die Daten korrekt vorliegen. Ohne vorige und ohne nachfolgende Zeichen.

Und dennoch:
Ich kann keine Verbindung mit dem WLAN aufbauen.

Gebe ich die Zugangsdaten als const char* ein, funktioniert die Verbindung auf Anhieb.

Meine Vermutung:
Der Inhalt der Array-Variablen hat noch irgendwelche Sonderzeichen oder Aehnliches integriert, was ich im seriellen Monitor nicht sehen kann.

Noch ein allerletzter Satz zu mir selbst.............weil das weiter oben angesprochen wurde:
Ich betreibe dies nicht als Hobby.
Ich bin Maschinenbauer und benoetige diese Hard- und Software fuer ein neues Produkt.

Danke :slight_smile:

Also danach doch.

Gruß Tommy

Dann solltest du dreimal darüber nachdenken, was du schreibst.

wollt ihr mir helfen oder nur sticheln?

Habe ich nicht genug gesagt, dass meine Worte falsch waren?

Wozu sagtet ihr, dass so ein Forum ist?
Um zu sticheln?........... oder um zu helfen.

Beim auslesen aus der SD-Karte die Zeichen
a) mitzählen
b) parallel als hex auf dem SerMon ausgeben.
wenn du das \n liest, darf dieses nicht mehr in das array wandern, sondern dafür muss ein '\0' den char* abschliessen

Hinweis: Kurzcode schreiben um sowas auszutesten und dann hier zur Verfügung stellen, damit man etwas hat, auf was man aufbauen kann hilft ungemein.