Bonsoir tout le monde
j'ai essayé de realiser un gps data loger avec une condition : ne rien enregistrer sur le carte mémoire si il ne reçoit pas un HIGH sur une pin déterminé dans le code
mon montage se compose d'un module carte SD pour arduino d'un module gps ublox neo 6m v2 le tout controllé par un atmega328p cadencé a 8MHz en horloge interne le tout soudé sur une plaque dessai à points de soudure j'ai testé tout le hardware le signal HIGH sera donné par un bouton poussoir que j'ai testé avec le programme button breff tout marche a merveille
avec ce programme le système enregistre des information de localisation gps sur la carte mémoire a une fréquence de 1Hz tout ce passe bien
et quand je modifie le code pour que sa enregistre sous une condition :Code:#include <SD.h> #include<SPI.h> #include <Adafruit_GPS.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(3,2); Adafruit_GPS GPS(&mySerial); String NMEA1; String NMEA2; char c; int chipSelect = 4; File mySensorData; void readGPS() { clearGPS(); while(!GPS.newNMEAreceived()) { //Loop until you have a good NMEA sentence c=GPS.read(); } GPS.parse(GPS.lastNMEA()); //Parse that last good NMEA sentence NMEA1=GPS.lastNMEA(); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); NMEA2=GPS.lastNMEA(); Serial.println(NMEA1); Serial.println(NMEA2); Serial.println(""); } void clearGPS() { while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); } void setup() { Serial.begin(115200); GPS.begin(9600); GPS.sendCommand("$PGCMD,33,0*6D"); GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); delay(1000); pinMode(10, OUTPUT); SD.begin(chipSelect); if (SD.exists("NMEA.txt")) { SD.remove("NMEA.txt"); } if (SD.exists("GPSData.txt")) { SD.remove("GPSData.txt"); } } void loop() { readGPS(); if(GPS.fix==1) { mySensorData = SD.open("NMEA.txt", FILE_WRITE); //Open file on SD card for writing mySensorData.println(NMEA1); //Write first NMEA to SD card mySensorData.println(NMEA2); //Write Second NMEA to SD card mySensorData.close(); //Close the file mySensorData = SD.open("GPSData.txt", FILE_WRITE); mySensorData.print(GPS.latitude,4); //Write measured latitude to file mySensorData.print(GPS.lat); //Which hemisphere N or S mySensorData.print(","); mySensorData.print(GPS.longitude,4); //Write measured longitude to file mySensorData.print(GPS.lon); //Which Hemisphere E or W mySensorData.print(","); mySensorData.println(GPS.altitude); mySensorData.close(); } }
après avoir apuillé sur le bouton il crée les fiché pour enregistrer dessus mais je trouve pas d'information dans ces dernier je ne comprend pas pourquoiCode:#include <SD.h> #include<SPI.h> #include <Adafruit_GPS.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(3,2); Adafruit_GPS GPS(&mySerial); const int a1=10; const int a2=9; int b=0; String NMEA1; String NMEA2; char c; int chipSelect = 4; File mySensorData; void setup() { pinMode(a1 ,INPUT); pinMode(a2 ,OUTPUT); Serial.begin(115200); GPS.begin(9600); GPS.sendCommand("$PGCMD,33,0*6D"); GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); delay(1000); pinMode(10, OUTPUT); SD.begin(chipSelect); if (SD.exists("NMEA.txt")) { SD.remove("NMEA.txt"); } if (SD.exists("GPSData.txt")) { SD.remove("GPSData.txt"); } } void readGPS() { clearGPS(); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); NMEA1=GPS.lastNMEA(); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); NMEA2=GPS.lastNMEA(); Serial.println(NMEA1); Serial.println(NMEA2); Serial.println(""); } void clearGPS() { while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); } void loop() { b=digitalRead(a1); readGPS(); if(GPS.fix==1) {digitalWrite(a2, HIGH);} else {digitalWrite(a2, LOW);} if(GPS.fix==1 && b==HIGH) { digitalWrite(a2, HIGH); delay(100); digitalWrite(a2, LOW); delay(100); digitalWrite(a2, HIGH); mySensorData = SD.open("NMEA.txt", FILE_WRITE); mySensorData.println(NMEA1); mySensorData.println(NMEA2); mySensorData.close(); mySensorData = SD.open("GPSData.txt", FILE_WRITE); mySensorData.print(GPS.latitude,4); mySensorData.print(GPS.lat); mySensorData.print(","); mySensorData.print(GPS.longitude,4); mySensorData.print(GPS.lon); mySensorData.print(","); mySensorData.println(GPS.altitude); mySensorData.close(); } }
j'ai ajouté 2 variable au deuxième programme une pour le bouton a1 et l'autre pour une led a2 qui s'allumera quand il y'aura GPS.fix==1 et clignotera quand on appui sur le bouton pour témoigner que l'atmega enregistre les informations sur la carte
j’espère que j'ai été assez explicite svp j'ai vraiment besoins de votre aide
merci beaucoup pour vos réponses
-----