From 1eae794b88d1d462cdb532284bf0c16f3ee5978c Mon Sep 17 00:00:00 2001 From: Yusuf Bozkurt <yusuf.bozkurt@reutlingen-university.de> Date: Fri, 7 Jan 2022 13:44:12 +0000 Subject: [PATCH] code_area --- Code/hhz_gps_logger_with_area.ino | 187 ++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 Code/hhz_gps_logger_with_area.ino diff --git a/Code/hhz_gps_logger_with_area.ino b/Code/hhz_gps_logger_with_area.ino new file mode 100644 index 0000000..fb2eec4 --- /dev/null +++ b/Code/hhz_gps_logger_with_area.ino @@ -0,0 +1,187 @@ +#include <TinyGPS++.h> +#include <SoftwareSerial.h> +#include "FS.h" +#include "SD.h" +#include <SPI.h> +//#include "EEPROM.h" + +static const int RXPin = 16, TXPin = 17; +static const uint32_t GPSBaud = 9600; +const byte led_gpio = 21; +#define SD_CS 5 +RTC_DATA_ATTR int readingID = 0; + +String dataMessage; +String fileName = "leer"; +String monat,tag,jahr; +String stunde,minute1,sekunde; +float flat, flong, kmh; +int sat; + +TinyGPSPlus gps; + +HardwareSerial SerialGPS(1); + +// ----------------------------------------------------- + +void setup() { + + pinMode(led_gpio, OUTPUT); + Serial.begin(9600); + SerialGPS.begin(9600, SERIAL_8N1, 16, 17); + SD.begin(SD_CS); + if(!SD.begin(SD_CS)) { + Serial.println("Kartenmontage fehlgeschlagen"); + return; + } + uint8_t cardType = SD.cardType(); + if(cardType == CARD_NONE) { + Serial.println("Keine SD-Karte eingesetzt"); + return; + } + Serial.println("SD-Karte initialisieren"); + if (!SD.begin(SD_CS)) { + Serial.println("ERROR - Initialisierung der SD-Karte fehlgeschlagen!"); + return; // init failed + } + +} + +void loop() { + // put your main code here, to run repeatedly: + gps_delay(1000); + Serial.print(gps.date.value()); + if(gps.date.value() > 0 && fileName!="leer"){ + Serial.println(fileName.c_str()); + loggeDaten(); + }else{ + erstelleFileName(); + erstelleFile(); + } + +} + +static void gps_delay(unsigned long ms) +{ + unsigned long start = millis(); + do + { + while (SerialGPS.available()) + gps.encode(SerialGPS.read()); + } while (millis() - start < ms); +} + +void erstelleFileName() { + if(gps.date.value() > 0) + { + fileName = "/" + String(gps.date.value()) + ".txt"; + Serial.print("File Name war erfolgreich: "); + Serial.println(fileName.c_str()); + Serial.print("Der Zeitstempel: "); + Serial.println(gps.time.value()); + } + Serial.print("Noch kein Zeitstempel!!! "); + Serial.println(gps.date.value()); +} + +void erstelleFile(){ + if(fileName != "leer"){ + File file = SD.open(fileName.c_str()); + if(!file) { + Serial.println("Die Datei existiert nicht"); + Serial.println("Datei erstellen..."); + writeFile(SD, fileName.c_str(), "Reading ID, Tag, Monat, Jahr, Stunde, Minute, Sekunde, Latitude, Longitude, Speed, AnzahlSat \r\n"); + } + else { + Serial.println("Datei existiert bereits"); + } + file.close(); + } +} + +void leseGPS(){ + while (SerialGPS.available() > 0) + if (gps.encode(SerialGPS.read())) + + if (millis() > 5000 && gps.charsProcessed() < 10) + { + Serial.println(F("Kein GPS erkannt: Verkabelung prüfen.")); + while(true); + } + + tag = gps.date.day(); + monat = gps.date.month(); + jahr = gps.date.year(); + stunde = gps.time.hour(); + minute1 = gps.time.minute(); + sekunde = gps.time.second(); + flat = gps.location.lat(); + flong = gps.location.lng(); + kmh = gps.speed.kmph(); + sat = gps.satellites.value(); + + Serial.print("Lat-Test: "); + Serial.println(gps.location.lat()); + if (gps.satellites.value() > 3){ + //LED an + digitalWrite(led_gpio, HIGH); + }else{ + //LED aus + digitalWrite(led_gpio, LOW); + } +} + +void loggeDaten() { + if (gps.date.isValid()){ + leseGPS(); + //nur wenn man innerhalb der Box ist wird aufgezeichnet + //Box Koordinaten Diezenhalde + if((flong > 8.998443 && flong < 9.011137) && (flat < 48.674627 && flat > 48.669456)){ + dataMessage = String(readingID) + "," + String(tag) + "," + String(monat) + "," + + String(jahr) + "," + String(stunde) + "," + String(minute1) + "," + + String(sekunde) + "," + String(flat, 6) + "," + String(flong, 6) + "," + String(kmh) + "," + String(sat) + "\r\n"; + Serial.print("Speicher Datensatz: "); + Serial.println(dataMessage); + appendFile(SD, fileName.c_str(), dataMessage.c_str()); + readingID++; + }else{ + Serial.print("---nicht in der Box---"); + } + Serial.println(String(flat, 6)); + Serial.println(String(flong, 6)); + } + } + +// Write to the SD card (DON'T MODIFY THIS FUNCTION) +void writeFile(fs::FS &fs, const char * path, const char * message) { + Serial.printf("Writing file: %s\n", path); + + File file = fs.open(path, FILE_WRITE); + if(!file) { + Serial.println("Failed to open file for writing"); + return; + } + if(file.print(message)) { + Serial.println("File written"); + } else { + Serial.println("Write failed"); + } + file.close(); +} + +// Append data to the SD card (DON'T MODIFY THIS FUNCTION) +void appendFile(fs::FS &fs, const char * path, const char * message) { + Serial.printf("Appending to file: %s\n", path); + + File file = fs.open(path, FILE_APPEND); + if(!file) { + Serial.println("Failed to open file for appending"); + return; + } + if(file.print(message)) { + Serial.println("Message appended"); + } else { + Serial.println("Append failed"); + } + file.close(); +} -- GitLab