|
#include <NewSoftSerial.h>
#include <SdFat.h>
#include <SdFatUtil.h>
#include <ctype.h>
#include <EEPROM.h>
Sd2Card SDKARTE;
SdVolume SPEICHER;
SdFile VERZEICHNIS;
SdFile DATEI;
int LED_ROT=7;
int LED_GRUEN=6;
int LED_BLAU=5;
NewSoftSerial NSS(3,2);
char PUFFER[150];
char AV;
int INDEX_PUFFER;
int MERK;
int OK;
int X,Y;
int KOMMA,VK,NK,Z,KMH1,KMH2,KMH3,KMH4,KMH5,KMH;
char MEILEN[7];
char SATELLITEN[3];
int ANZSAT;
int TEMPO;
// Dateihandling
char DATEINAME1[13];
char DATEINAME2[13];
int ADRESSE;
int UB,LB,FERTIG;
int DATEINUMMER;
String string1,string2,string3;
String string4,string5,string6;
String string7;
//*********************************
void setup()
{
//Serial.begin(9600);
NSS.begin(4800);
pinMode(LED_ROT,OUTPUT);
pinMode(LED_GRUEN,OUTPUT);
pinMode(LED_BLAU,OUTPUT);
INDEX_PUFFER=0;
OK=0;
// Dateihandling
pinMode(10, OUTPUT); //Pin 10 ist reserviert fuer Kommunikation
SDKARTE.init(); //Initialisieren SD und I/O pins.
SPEICHER.init(SDKARTE); //Initialisiert Laufwerk .
VERZEICHNIS.openRoot(SPEICHER); //Oeffnet Directory.
delay(500);
ADRESSE=100;
//EEPROM
EEPROM_LESEN();
//Datei 1
string1=String("GPS");
string2=String(DATEINUMMER);
string3=String (".TXT");
string4=string1+string2+"A"+string3;
if(DATEINUMMER<100){string4=string1+"0"+string2+"A"+string3;}
if(DATEINUMMER<10){string4=string1+"00"+string2+"A"+string3;}
string4.toCharArray(DATEINAME1,13);
//Datei 2
string5=String("GPS");
string6=string5+string2+"B"+string3;
if(DATEINUMMER<100){string6=string5+"0"+string2+"B"+string3;}
if(DATEINUMMER<10){string6=string5+"00"+string2+"B"+string3;}
string6.toCharArray(DATEINAME2,13);
DATEINUMMER++;
EEPROM_SCHREIBEN();
delay(1000);
digitalWrite(LED_BLAU,HIGH);
digitalWrite(LED_GRUEN,HIGH);
digitalWrite(LED_ROT,HIGH);
}
//*********************************
void loop()
{
while (true)
{
if (NSS.available())
{
char c = NSS.read();
PUFFER[INDEX_PUFFER]=c;
INDEX_PUFFER++;
MERK=0;
if (c == '\n'){MERK=1;}
if (INDEX_PUFFER==sizeof(PUFFER)-1){MERK=1;}
OK=0;
if(MERK==1)
{
PUFFER[INDEX_PUFFER]='\0';
INDEX_PUFFER=0;
if(PUFFER[0]!='$')//{MERK=0;}
//if(MERK==0)
{
//Serial.print("$");Serial.println(PUFFER[0]);
digitalWrite(LED_ROT,LOW);
digitalWrite(LED_GRUEN,HIGH);
break;
}
digitalWrite(LED_ROT,HIGH);
digitalWrite(LED_GRUEN,LOW);
if(PUFFER[0]=='$' && OK==0){OK=1;}
if(PUFFER[1]=='G' && OK==1){OK=2;}
if(PUFFER[2]=='P' && OK==2){OK=3;}
if(PUFFER[3]=='G' && OK==3){OK=4;}
if(PUFFER[4]=='G' && OK==4){OK=5;}
if(PUFFER[5]=='A' && OK==5){OK=6;}
// nur fuer km/h und "A" bzw. "V"
if(PUFFER[3]=='R' && OK==3){OK=4;}
if(PUFFER[4]=='M' && OK==4){OK=5;}
if(PUFFER[5]=='C' && OK==5){OK=7;}
if(OK==7)
{
KOMMA=0;
for(X=0;X<100;X++)
{
if(PUFFER[X]==','){KOMMA++;}
if(KOMMA==2 && PUFFER[X] !=',')
{AV=PUFFER[X];}
}
if(AV!='A')
{
//Serial.print(PUFFER);
//Serial.print("A");Serial.println(AV);
digitalWrite(LED_ROT,LOW);
digitalWrite(LED_GRUEN,HIGH);
break;
}
}
if(AV=='A')
{
digitalWrite(LED_ROT,HIGH);
digitalWrite(LED_GRUEN,LOW);
if(OK==7)
{
KOMMA=0;
TEMPO=0;
for(X=0;X<100;X++)
{
if(PUFFER[X]==','){KOMMA++;}
if(KOMMA==7 && PUFFER[X] !=',')
{
MEILEN[TEMPO]=PUFFER[X];
TEMPO++;
}
}
KOMMA=0;NK=0;VK=0;
for(X=0;X<TEMPO;X++)
{
Z=MEILEN[X];
if(Z=='.'){KOMMA=X;}
if(KOMMA==0){VK++;}
if(KOMMA!=0)
{
if(Z!='.'){NK++;}
}
}
KMH1=0;KMH2=0;KMH3=0;KMH4=0;KMH5=0,KMH=0;
if(VK==1)
{
KMH3=int(MEILEN[0]-48);
}
if(VK==2)
{
KMH2=int(MEILEN[0]-48);
KMH3=int(MEILEN[1]-48);
}
if(VK==3)
{
KMH1=int(MEILEN[0]-48);
KMH2=int(MEILEN[1]-48);
KMH3=int(MEILEN[2]-48);
}
KMH4=int(MEILEN[KOMMA+1]-48);
KMH5=int(MEILEN[KOMMA+2]-48);
KMH=(((KMH1*10000)+(KMH2*1000)+(KMH3*100)+(KMH4*10)+(KMH5)));
KMH=KMH*1.852;
KMH=KMH/100;
}
if(OK==6)
{
//nach dem 7. Komma Anzahl Satelliten
KOMMA=0;Y=0;
for(X=0;X<100;X++)
{
if(PUFFER[X]==','){KOMMA++;}
if(KOMMA==7 && PUFFER[X] !=',')
{
SATELLITEN[Y]=PUFFER[X];
Y++;
if(KOMMA==8){break;}
}
}
ANZSAT=(((SATELLITEN[0]-48)*10)+(SATELLITEN[1]-48));
//KMH=10;
if(KMH>=3)
{
digitalWrite(LED_BLAU,LOW);
DATEI.open(VERZEICHNIS, DATEINAME1, O_CREAT | O_APPEND | O_WRITE);
DATEI.print(PUFFER);
delay(10);
DATEI.close();
delay(100);
DATEI.open(VERZEICHNIS, DATEINAME2, O_CREAT | O_APPEND | O_WRITE);
DATEI.print(PUFFER);
delay(10);
DATEI.close();
digitalWrite(LED_BLAU,HIGH);
}
}
}
/*
Serial.print(PUFFER);
Serial.print("OK:");
Serial.print(OK);
Serial.print(" KMH:");
Serial.print(KMH);
Serial.print(" AV;");
Serial.print(AV);
Serial.print(" SAT:");
Serial.println(ANZSAT);
*/
}
}
}
}
//++++++++++++++++++++++++++++
int EEPROM_LESEN()
{
UB = EEPROM.read(ADRESSE);
LB = EEPROM.read(ADRESSE + 1);
DATEINUMMER=LB+(UB*256);
return FERTIG;
}
//++++++++++++++++++++++++++++
int EEPROM_SCHREIBEN()
{
if(DATEINUMMER==256)
{
for(X=0;X<10;X++)
{
digitalWrite(LED_ROT,HIGH);delay(200);
digitalWrite(LED_GRUEN,HIGH);delay(200);
digitalWrite(LED_BLAU,HIGH);delay(200);
digitalWrite(LED_BLAU,LOW);delay(200);
digitalWrite(LED_GRUEN,LOW);delay(200);
digitalWrite(LED_ROT,LOW);delay(200);
}
DATEINUMMER=0;
}
UB = (DATEINUMMER / 256);
LB = DATEINUMMER - (UB * 256);
EEPROM.write(ADRESSE, UB);
EEPROM.write(ADRESSE + 1, LB);
return FERTIG;
}
|
|