GPS Arduino
Répondre à la discussion
Affichage des résultats 1 à 1 sur 1

GPS Arduino



  1. #1
    elevenhours

    Talking GPS Arduino


    ------

    Bonjour, pour notre projet de sciences de l'ingénieur, nous devons créer les programmes d'un GPS sous arduino.

    Nous avons actuellement le programme qui nous permet de récupérer les données du GPS et de les transférer vers notre carte SD, il fonctionne correctement.

    Cependant, nous aimerions rajouter un interrupteur et une led afin de pouvoir lancer le programme lors de l'action de celui-ci et d'avoir une led "témoin".

    Depuis deux semaines nous essayons d'inclure le programme d'un interrupteur + led repris sur internet dans notre programme sans y parvenir, c'est pourquoi nous demandons aux connaisseurs de nous aider à trouver une solution.

    Merci d'avance pour ceux qui voudront bien prendre un peu de temps pour nous aider, voici notre programme actuel:
    Code:
    #include <SPI.h>
    #include <Adafruit_GPS.h>
    #include <SoftwareSerial.h>
    #include <SD.h>
    #include <avr/sleep.h>
    
    // Ladyada's logger modified by Bill Greiman to use the SdFat library
    //
    // This code shows how to listen to the GPS module in an interrupt
    // which allows the program to have more 'freedom' - just parse
    // when a new NMEA sentence is available! Then access data when
    // desired.
    //
    // Tested and works great with the Adafruit Ultimate GPS Shield
    // using MTK33x9 chipset
    //    ------> http://www.adafruit.com/products/
    // Pick one up today at the Adafruit electronics shop
    // and help support open source hardware & software! -ada
    
    SoftwareSerial mySerial(8, 7);
    Adafruit_GPS GPS(&mySerial);
    
    // Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console
    // Set to 'true' if you want to debug and listen to the raw GPS sentences
    #define GPSECHO  true
    /* set to true to only log to SD when GPS has a fix, for debugging, keep it false */
    #define LOG_FIXONLY false 
    
    // Set the pins used
    #define chipSelect 10
    #define ledPin 13
    
    File logfile;
    
    // read a Hex value and return the decimal equivalent
    uint8_t parseHex(char c) {
      if (c < '0')
        return 0;
      if (c <= '9')
        return c - '0';
      if (c < 'A')
        return 0;
      if (c <= 'F')
        return (c - 'A')+10;
    }
    
    // blink out an error code
    void error(uint8_t errno) {
    /*
      if (SD.errorCode()) {
        putstring("SD error: ");
        Serial.print(card.errorCode(), HEX);
        Serial.print(',');
        Serial.println(card.errorData(), HEX);
      }
      */
      while(1) {
        uint8_t i;
        for (i=0; i<errno; i++) {
          digitalWrite(ledPin, HIGH);
          delay(100);
          digitalWrite(ledPin, LOW);
          delay(100);
        }
        for (i=errno; i<10; i++) {
          delay(200);
        }
      }
    }
    
    void setup() {
      // for Leonardos, if you want to debug SD issues, uncomment this line
      // to see serial output
      //while (!Serial);
     
      // connect at 115200 so we can read the GPS fast enough and echo without dropping chars
      // also spit it out
      Serial.begin(115200);
      Serial.println("\r\nUltimate GPSlogger Shield");
      pinMode(ledPin, OUTPUT);
    
      // make sure that the default chip select pin is set to
      // output, even if you don't use it:
      pinMode(10, OUTPUT);
     
      // see if the card is present and can be initialized:
      //if (!SD.begin(chipSelect, 11, 12, 13)) {
      if (!SD.begin(chipSelect)) {      // if you're using an UNO, you can use this line instead
        Serial.println("Card init. failed!");
        error(2);
      }
      char filename[15];
      strcpy(filename, "GPSLOG00.TXT");
      for (uint8_t i = 0; i < 100; i++) {
        filename[6] = '0' + i/10;
        filename[7] = '0' + i%10;
        // create if does not exist, do not open existing, write, sync after write
        if (! SD.exists(filename)) {
          break;
        }
      }
    
      logfile = SD.open(filename, FILE_WRITE);
      if( ! logfile ) {
        Serial.print("Couldnt create "); Serial.println(filename);
        error(3);
      }
      Serial.print("Writing to "); Serial.println(filename);
     
      // connect to the GPS at the desired rate
      GPS.begin(9600);
    
      // uncomment this line to turn on RMC (recommended minimum) and GGA (fix data) including altitude
      //GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
      // uncomment this line to turn on only the "minimum recommended" data
      GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);
      // For logging data, we don't suggest using anything but either RMC only or RMC+GGA
      // to keep the log files at a reasonable size
      // Set the update rate
      GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);   // 1 or 5 Hz update rate
    
      // Turn off updates on antenna status, if the firmware permits it
      GPS.sendCommand(PGCMD_NOANTENNA);
     
      Serial.println("Ready!");
    }
    
    void loop() {
      char c = GPS.read();
      if (GPSECHO)
         if (c)   Serial.print(c);
    
      // if a sentence is received, we can check the checksum, parse it...
      if (GPS.newNMEAreceived()) {
        // a tricky thing here is if we print the NMEA sentence, or data
        // we end up not listening and catching other sentences!
        // so be very wary if using OUTPUT_ALLDATA and trying to print out data
        //Serial.println(GPS.lastNMEA());   // this also sets the newNMEAreceived() flag to false
           
        if (!GPS.parse(GPS.lastNMEA()))   // this also sets the newNMEAreceived() flag to false
          return;  // we can fail to parse a sentence in which case we should just wait for another
       
        // Sentence parsed!
        Serial.println("OK");
        if (LOG_FIXONLY && !GPS.fix) {
            Serial.print("No Fix");
            return;
        }
    
        // Rad. lets log it!
        Serial.println("Log");
       
        char *stringptr = GPS.lastNMEA();
        uint8_t stringsize = strlen(stringptr);
        if (stringsize != logfile.write((uint8_t *)stringptr, stringsize))    //write the string to the SD file
          error(4);
        if (strstr(stringptr, "RMC"))   logfile.flush();
        Serial.println();
      }
    }
    
    
    /* End code */

    -----
    Dernière modification par Jack ; 20/02/2014 à 18h10. Motif: Ajout balises code

Discussions similaires

  1. Communication arduino-arduino avec module Xbee
    Par TPESI22012 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 18h24
  2. Arduino
    Par invite3e837cd9 dans le forum Électronique
    Réponses: 17
    Dernier message: 03/12/2012, 16h08
  3. arduino
    Par invitead1af344 dans le forum Électronique
    Réponses: 6
    Dernier message: 03/01/2011, 21h22
  4. Arduino
    Par qwintine dans le forum Électronique
    Réponses: 18
    Dernier message: 18/11/2010, 20h07
  5. Arduino
    Par invite85ff08e6 dans le forum Électronique
    Réponses: 8
    Dernier message: 17/03/2010, 12h49