Hallo,
ich nutzen einen Arduino UNO, ein SD Karten Modul, ein CRIUS GPS Modul und folgenden Code:
#include <SoftwareSerial.h>
#include <SD.h>
SoftwareSerial gpsSerial(8, 9); // RX, TX (TX not used)
const int sentenceSize = 80;
const int chipSelect = 10;
unsigned long delaytime = 7000;
char sentence[sentenceSize];
char Str1[35];
int LATcheck1;
int LATcheck2;
int LONcheck1;
int LONcheck2;
char* FileName = "Log1.txt";
void setup()
{
Serial.begin(9600);
gpsSerial.begin(9600);
Serial.print("SD card: ");
pinMode(10, OUTPUT);
//pinMode(7, OUTPUT);
//digitalWrite(7, HIGH);
if (!SD.begin(chipSelect)) {
Serial.println("SD Fail");
delay(999999);
}
Serial.println("SD Okay");
if (SD.exists(FileName)) {
FileName = "Log2.txt";
}
if (SD.exists(FileName)) {
FileName = "Log3.txt";
}
if (SD.exists(FileName)) {
FileName = "Log4.txt";
}
if (SD.exists(FileName)) {
FileName = "Log5.txt";
}
if (SD.exists(FileName)) {
FileName = "Log6.txt";
}
if (SD.exists(FileName)) {
FileName = "Log7.txt";
}
if (SD.exists(FileName)) {
FileName = "Log8.txt";
}
if (SD.exists(FileName)) {
FileName = "Log9.txt";
}
if (SD.exists(FileName)) {
FileName = "Log10.txt";
}
if (SD.exists(FileName)) {
FileName = "Log11.txt";
}
if (SD.exists(FileName)) {
FileName = "Log12.txt";
}
if (SD.exists(FileName)) {
FileName = "Log13.txt";
}
if (SD.exists(FileName)) {
FileName = "Log14.txt";
}
if (SD.exists(FileName)) {
FileName = "Log15.txt";
}
if (SD.exists(FileName)) {
FileName = "LogX.txt";
}
Serial.print("File Name: ");
Serial.println(FileName);
Serial.print("Delay Time (ms): ");
Serial.println(delaytime);
//digitalWrite(7, LOW);
}
void loop()
{
static int i = 0;
if (gpsSerial.available())
{
char ch = gpsSerial.read();
if (ch != '\n' && i < sentenceSize)
{
sentence[i] = ch;
i++;
}
else
{
sentence[i] = '\0';
i = 0;
displayGPS();
}
}
}
void displayGPS()
{
char FailCheck[20];
char field[20];
char Lfield[20];
char LATfield2[20]="0000.00000";
char Bfield[20];
char LONfield2[20]="0000.00000";
getField(field, 0);
if (strcmp(field, "$GPRMC") == 0)
{
getField(LATfield2, 3); // number
getField(Lfield, 4); // N/S
getField(LONfield2, 5); // number
getField(Bfield, 6); // E/W
getField(FailCheck, 2);
Serial.println(FailCheck);
char LATfield1[]="00"; // Zuweisung von irgendwas mit 2 Zeichen und abschließendem Nullzeichen
char LONfield1[]="000";
strncpy(LATfield1,LATfield2,2); // Umkopieren der ersten 2 Zeichen
strncpy(LONfield1,LONfield2,3); // Umkopieren der ersten 3 Zeichen
char LATfield3[]="000000";
char LONfield3[]="000000";
strncpy(LATfield3,&LATfield2[2],6); // Umkopieren der ersten 6 Zeichen ab 2 Zeichen nach dem Anfang
strncpy(LONfield3,&LONfield2[3],6); // Umkopieren der ersten 6 Zeichen ab 3 Zeichen nach dem Anfang
File dataFile = SD.open(FileName, FILE_WRITE);
if (dataFile)
{
if(strcmp (FailCheck, "V") == 0)
{
//digitalWrite(7, HIGH);
dataFile.println("No GPS Fix!");
}
else
{
//digitalWrite(7, LOW);
dataFile.print(Lfield);
dataFile.print(LATfield1);
dataFile.print(" ");
dataFile.print(LATfield3);
dataFile.print(", ");
dataFile.print(Bfield);
dataFile.print(LONfield1);
dataFile.print(" ");
dataFile.println(LONfield3);
}
dataFile.close();
}
else
{
Serial.println("File Open Error");
}
if(strcmp (FailCheck, "V") == 0)
{
//digitalWrite(7, HIGH);
Serial.println("No GPS Fix!");
}
else
{
//digitalWrite(7, LOW);
Serial.print(Lfield);
Serial.print(LATfield1);
Serial.print(" ");
Serial.print(LATfield3);
Serial.print(", ");
Serial.print(Bfield);
Serial.print(LONfield1);
Serial.print(" ");
Serial.println(LONfield3);
}
delay(delaytime);
}
}
void getField(char* buffer, int index)
{
int sentencePos = 0;
int fieldPos = 0;
int commaCount = 0;
while (sentencePos < sentenceSize)
{
if (sentence[sentencePos] == ',')
{
commaCount ++;
sentencePos ++;
}
if (commaCount == index)
{
buffer[fieldPos] = sentence[sentencePos];
fieldPos ++;
}
sentencePos ++;
}
buffer[fieldPos] = '\0';
}
Wenn ich den Serial Monitor aufrufe sollte ich bei vorhandenem GPS Fix die Koodrinaten erhalten, wenn nicht, sollte "No GPS Fix!" erscheinen.
Ab und zu erscheint auch "No GPS Fix!", doch manchmal auch
,
,, 00.000, ,N*53
, 0.0000
.
Gestern hat alles wunderbar funktioniert.
Habt ihr eine Idee, warum es jetzt nichtmehr geht?
Danke und Gruß