NMEA Daten mit weiteren Sensordaten auf SD loggen

Hallo erstmal,

ich habe ein kleines Problem bei dem ich nicht weiter komme und auch keinen guten Ansatzpunkt mehr sehe.
Ich hoffe ich stelle nicht schon längst geklärte Fragen, wenn dem so ist bin ich um einen Link natürlich dankbar.
Zudem beschäftige ich mich erst seit knapp 3 Wochen mit dem Mikrocontrollerprogrammierung. Es kann also gut sein das ich Grundlegende dinge nicht bedacht habe.

Ich habe das GPS Breakout von Adafruit und mochte die NMEA Daten zusammen mit Temperaturdaten und Beschleunigungsdaten auf eine SD Karte schreiben.
Hierfür möchte ich wenn möglich meinen Arduino Uno nutzen.

Die serielle Ausgabe der NMEA Daten alleine oder das loggen des Datensatz aus Temperatur und Beschleunigungsdaten funktioniert einzeln wunderbar. Sobald ich den Sketch aber zusammenfüge bricht alles auseinander.
Heißt, es werden keine Daten mehr geloggt und der serielle Monitor gibt auch nichts mehr aus.

Im Anhang findet ihr meinen Sketch (MyLogger_v.1.0) der die Daten über den seriellen Monitor ausgibt. Sobald ich die #include <SD.h> einkommentiere funktioniert er nicht mehr.
Als Anschauungsmaterial hänge ich noch den Sketch zum Sensordaten loggen und zur NMEA Ausgabe an.

Als Wahnmeldung bekomme ich bei MyLogger_v_1.0 “Wenig Arbeitsspeicher verfügbar, es können Stabilitätsprobleme auftreten”. Ich benutzte 89% des SRAM
Aber kann dass das ganz Programm zerschießen und ist das Projekt noch mit einem UNO möglich?

Vielen Dank für eure Hilfe <3

PS. beim ersten Versuch mit dem GPS_Logger Sketch von Adafruit ist mir ähnliches passiert sobald ich einen weiteren Sensor instanziiert habe.

MyLogger_v.1.0.ino (3.01 KB)

mcp9808_LSM9DS1_Logger_v1.1.ino (3.53 KB)

GPS_test_v.2.3.ino (3.02 KB)

Hallo,
ich habe nun mein Programm abgeändert und löse es mit einem Interrupt. So passt auch alles auf den UNO. Allerdings würde ich gerne die NMEA Daten in einem c-string speichern und nicht in einem String. Oder ist ein String genauso zuverlässig in der Speichernutztun?
Speicher an sich hab ich genug nur mache ich mir Sorgen, dass das ständige String neuschreiben den Heap zunehmend fragmentieren könnte und nach längerer Laufzeit es zu Problemen kommen kann. Oder mache ich mir da unnötige Sorgen? Ich habe eigentlich keine Ahnung da ich bisher nichts mit Programmierung zu tun hatte.
Die andere Frage bezieht sich auf das beschreiben und neubeschreiben des c-strings.
Wie erweitere ich den string um ein Zeichen im Interrupt? Mir kommt die strcat() für ein Zeichen und im Interrupt als unpassend vor. Gibt es da eine elegante Lösung außer einem Index mitlaufen zu lassen und dann NMEA*=c?*

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Das kannst Du auch noch nachträglich ändern.

Das Problem mit der Fragmentierung hast Du richtig erkannt.
Was spricht gegen einen mitlaufenden Index?

Gruß Tommy

Danke für die Antwort. Mit Index läuft es gut. :slight_smile:
Und meine Zweite Frage hat sich schon erledigt.