Hallo zusammen,
ich nutze einen Arduino Micro in Verbindung mit dem "Adafruit Ultimate GPS Breakout v3" und dem "Adafruit Micro-SD Breakout board+". Beide Komponenten können über die mitgelieferten Libaries problemlos angesprochen werden und erste Dateien mit Loginhalten habe ich bereits gespeichert. Nun scheitere ich aber daran, einen dynamischen Dateinamen an die SD-Klasse zu übergeben, wenn ich SD.open() verwende.
Um im empfohlenen 8.3 Dateinamen zu bleiben, möchte ich gerne folgende Dateien erstellen:
gpslg001.log
Statt 001 wird ein Zähler raufgezählt und soll bei bestimmten Breakpoints 002, 003 etc. werden. Dazu habe ich mir eine kleine Funktion geschrieben "zerofill()", die den Counter nimmt, dessen Größe prüft und ein entsprechendes Konstrukt zurückliefert.
Nun ist es so, dass beim Aufrufen der Methode SD.open() ein Compilerfehler entsteht, der wie folgt aussieht:
invalid conversion from 'char' to 'const char*'
Und ich habe keine Idee, wie ich das vernünftig lösen könnte, weil mir nicht klar ist, was 'const char*' in der Methodendefinition eigentlich ist. Vielleicht kann mir da jemand auf die Sprünge helfen? Ich bin noch so neu im Thema, dass mich die Vielzahl an Möglichkeiten bei der Definition von Variablen aktuell etwas erschlägt...
Danke im Voraus für die Anfänger-Unterstützung
Hier mal mein kompletter Sketch zum Nachlesen:
#include <SoftwareSerial.h>
#include <Adafruit_GPS.h>
#include <SPI.h>
#include <SD.h>
Sd2Card card;
SdVolume volume;
SdFile root;
const int chipSelect = 10;
File dataFile;
unsigned int rowcounter = 1;
unsigned int filenum = 1;
char fname;
char zerofill(int i) {
char output;
if(i < 10) {
output = '00';
output += i;
} else if(i >= 10 && i < 100) {
output = '0';
output += i;
} else {
output = i;
}
return output;
}
Adafruit_GPS GPS(&Serial1);
HardwareSerial mySerial = Serial1;
#define GPSECHO false
void setup() {
Serial.begin(115200);
while (!Serial); // wait for leo to be ready
GPS.begin(9600);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
GPS.sendCommand(PGCMD_ANTENNA);
delay(500);
pinMode(SS, OUTPUT);
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
while (1) ;
}
}
uint32_t timer = millis();
void loop() {
char c = GPS.read();
char buffer [20];
if (GPS.newNMEAreceived()) {
if (!GPS.parse(GPS.lastNMEA()))
return;
}
if (timer > millis()) timer = millis();
if (millis() - timer > 1000) {
timer = millis();
if (GPS.fix) {
if(rowcounter > 3600) {
rowcounter = 1;
filenum++;
}
fname = 'gpslg';
fname += zerofill(filenum);
fname += '.log';
Serial.println(fname);
dataFile = SD.open(fname, FILE_WRITE);
if (dataFile) {
// Starting JSON Object-Root
dataFile.print("{");
// Starting GPS Object
dataFile.print("\"gps\":{");
dataFile.print("\"utcD\":\"");
dataFile.print(2000 + GPS.year, DEC);
dataFile.print("-");
dataFile.print(GPS.month, DEC);
dataFile.print("-");
dataFile.print(GPS.day, DEC);
dataFile.print("\",");
dataFile.print("\"utcT\":\"");
dataFile.print(GPS.hour);
dataFile.print(":");
dataFile.print(GPS.minute);
dataFile.print(":");
dataFile.print(GPS.seconds);
dataFile.print(".");
dataFile.print(GPS.milliseconds);
dataFile.print(":\",");
dataFile.print("\"la\":\"");
dataFile.print(GPS.lat);
dataFile.print("\",");
dataFile.print("\"lat\":\"");
dataFile.print(dtostrf(GPS.latitude, 6, 4, buffer));
dataFile.print("\",");
dataFile.print("\"lo\":\"");
dataFile.print(GPS.lon);
dataFile.print("\",");
dataFile.print("\"lon\":\"");
dataFile.print(dtostrf(GPS.longitude, 6, 4, buffer));
dataFile.print("\",");
dataFile.print("\"alt\":\"");
dataFile.print(GPS.altitude);
dataFile.print("\",");
dataFile.print("\"vKno\":\"");
dataFile.print(GPS.speed);
dataFile.print("\",");
dataFile.print("\"vKmh\":\"");
dataFile.print(GPS.speed * 1.852);
dataFile.print("\",");
dataFile.print("\"sats\":\"");
dataFile.print(GPS.satellites);
dataFile.print("\",");
dataFile.print("\"fix\":\"");
dataFile.print(GPS.fix);
dataFile.print("\",");
dataFile.print("\"fixq\":\"");
dataFile.print(GPS.fixquality);
dataFile.print("\"");
// Ending GPS Object
dataFile.print("}");
// Ending JSON Object-Root
dataFile.println("}");
dataFile.close();
rowcounter++;
}
}
}
}