#include <SPI.h>
#include <SD.h>
#include <SoftwareSerial.h>
SoftwareSerial SoftSerial(2, 3);
char buffer[64];                   
byte count=0;
const int chipSelect = 4;       // Broche de sélection du shield SD
const int broche_Temp = 0;      // Broche de connection du capteur de température
long temps = 0;                 // Initialisation chronomètre

void setup()
{
  Serial.begin(9600);
  SoftSerial.begin(9600);
  analogReference(INTERNAL);    // Tension de référence CAN 1,1 V  
  pinMode(chipSelect, OUTPUT);  // Broche 8 en sortie

  // Test si la carte sd est bien placée dans le slot
  if (!SD.begin(chipSelect)) {
    Serial.println("Carte SD non détectée");
    return;
  }
  Serial.println("Initialisation carte SD réussie");
}

void loop() {
  String type = "";
  String heure = "";
  String lattitude = "";
  String longitude = "";
  String dataString = "";
  delay(3000);
  if (SoftSerial.available()) {                    
      while(SoftSerial.available()) {               
            buffer[count++]=SoftSerial.read();      
            if(count == 64) break;
        }
    String trame ( buffer);           // STockage du buffer dans la chaine trame
     
   // Type trame 
    type = trame.substring(1,6);      // On récupère le type de la trame
    if (type == "GPGGA") {
        heure = trame.substring(7,13);    // On récupère l'heure
        lattitude = trame.substring(18,27)+trame.substring(28,29); // On récupère la lattitude
        longitude = trame.substring(30,40)+trame.substring(41,42); // On récupère la longitude
        int valeur_num = analogRead(A0);                           // Val num de la tension du capteur
        float tension = (valeur_num * 1.1) /1023;                  // Calcul de la tension du capteur
        float T = tension/0.01;                                    // Calcul de la température
        // Création de la ligne à stocker dans la carte SD                      
        dataString += heure;
        dataString += ";";
        dataString += lattitude;
        dataString += ";";
        dataString += longitude;
        dataString += ";";
        dataString += String(T).substring(0,4);

        // Ouverture du fichier en mode écriture
        File dataFile = SD.open("mesures.txt", FILE_WRITE);
        if (dataFile) {
            dataFile.println(dataString);                        // Ecriture de la ligne dans la carte SD
            dataFile.close();
            Serial.println(dataString);
            }
    
        else Serial.println("Erreur ouverture fichier mesures.txt");
            }
        }      
    else { Serial.println("Attente Trame GPGGA");
      } 
    delay(1000);
    clearBufferArray();                         
    count = 0; 
 }

 void clearBufferArray() {
    for (int i=0; i<count;i++) {
        buffer[i]=NULL;
    }                      
}
