How to use pair of adafruit GPS and Adafruit xbee adapter with xbees

Adafruit Ethernet, Motor, Proto, Wave, Datalogger, GPS Shields - etc!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
umar khalid
 
Posts: 11
Joined: Sun Nov 11, 2012 9:00 am

How to use pair of adafruit GPS and Adafruit xbee adapter with xbees

Post by umar khalid »

Please can you help me merge these 2 codes together because I tried to merge these but couldn’t get the desired results?

Basically I am using one Arduino as transmitter to send latitude and longitude data from one Arduino to another wirelessly. From transmitter I am outputting data in this format: 12223,123232. Longitude and latitude separated by coma. The code below saves these values into an array I want to merge this code with the gps code. So that I can add the value from transmitter to the value I have from gps which is connected to Arduino which is acting as receiver.

Code: Select all

#include <SoftwareSerial.h>

SoftwareSerial xbee(8, 9);


void setup()  {

  xbee.begin(9600);
}



void loop()                     // run over and over again
{
      const int NUMBER_OF_FIELDS = 2; // how many comma-separated fields we expect
      int fieldIndex = 0; // the current field being received
      double values[NUMBER_OF_FIELDS]; // array holding values for all the fields
      if (xbee.available()) {
      
        for(fieldIndex = 0; fieldIndex < 2; fieldIndex ++)

        
        {
          values[fieldIndex] = xbee.parseFloat(); // get a numeric value
      }
        Serial.println(values[0],7);
        Serial.println(values[1],7);
        fieldIndex = 0; // ready to start over
      }

  if (Serial.available()) {
      xbee.print((char)Serial.read());
  }
  delay(100);
} 

Code: Select all

 #include <Adafruit_GPS.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);
Adafruit_GPS GPS(&mySerial);


#define GPSECHO  false

void setup()  
{

  Serial.begin(115200);
  delay(5000);
  
  
  GPS.begin(9600);
  

  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);

  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);

  GPS.sendCommand(PGCMD_ANTENNA);

  delay(1000);

  mySerial.println(PMTK_Q_RELEASE);
}

uint32_t timer = millis();
void loop()                     
{
  char c = GPS.read();
  
  if ((c) && (GPSECHO))
    Serial.write(c); 
  

  if (GPS.newNMEAreceived()) {

  
    if (!GPS.parse(GPS.lastNMEA()))   /
      return; 
  }


  if (timer > millis())  timer = millis();


  if (millis() - timer > 2000) { 
    timer = millis(); /
    

    if (GPS.fix) {
      
      float new_lat = GPS.latitude + value[0];  // this is how I want to use array to add the 2 values
      float new_long = GPS.longitude + value[1];
      
      
      
      Serial.print("Location: ");
      Serial.print(new_long, 4); Serial.print(GPS.lon);
      Serial.print(", "); 
      Serial.print(new_lat, 4); Serial.println(GPS.lat);


    }
  }
} 

User avatar
adafruit_support_bill
 
Posts: 88092
Joined: Sat Feb 07, 2009 10:11 am

Re: How to use pair of adafruit GPS and Adafruit xbee adapter with xbees

Post by adafruit_support_bill »

I tried to merge these but couldn’t get the desired results
Maybe if you post your merged code and tell us what didn't work.

User avatar
umar khalid
 
Posts: 11
Joined: Sun Nov 11, 2012 9:00 am

Re: How to use pair of adafruit GPS and Adafruit xbee adapter with xbees

Post by umar khalid »

This is the combined code but this does not show added value on the serial monitor after the gps achieves a fix.

Code: Select all

#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);
SoftwareSerial xbee(8, 9);
Adafruit_GPS GPS(&mySerial);


#define GPSECHO  false

void setup()  
{

  Serial.begin(115200);
  delay(5000);
  
  
  GPS.begin(9600);
  
  xbee.begin(9600);
  

  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);

  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);

  GPS.sendCommand(PGCMD_ANTENNA);

  delay(1000);

  mySerial.println(PMTK_Q_RELEASE);
}

uint32_t timer = millis();
void loop()                     
{
  char c = GPS.read();
  
  if ((c) && (GPSECHO))
    Serial.write(c); 
  

  if (GPS.newNMEAreceived()) {

  
    if (!GPS.parse(GPS.lastNMEA()))  
      return; 
  }


  if (timer > millis())  timer = millis();


  if (millis() - timer > 2000) { 
    timer = millis(); 
    

    if (GPS.fix) {
      
            const int NUMBER_OF_FIELDS = 2; // how many comma-separated fields we expect
      int fieldIndex = 0; // the current field being received
      double values[NUMBER_OF_FIELDS]; // array holding values for all the fields
      if (xbee.available()) {
      
        for(fieldIndex = 0; fieldIndex < 2; fieldIndex ++)

        
        {
          values[fieldIndex] = xbee.parseFloat(); // get a numeric value
      }
        Serial.println(values[0],7);
        Serial.println(values[1],7);
         
      
      
      float new_lat = GPS.latitude + values[0];  // this is how I want to use array to add the 2 values
      float new_long = GPS.longitude + values[1];
      
      
      
      Serial.print("Location: ");
      Serial.print(new_long, 4); Serial.print(GPS.lon);
      Serial.print(", "); 
      Serial.print(new_lat, 4); Serial.println(GPS.lat);
        fieldIndex = 0; // ready to start over

      if (Serial.available()) {
      xbee.print((char)Serial.read());
    }
    }
  }
}
}

User avatar
adafruit_support_bill
 
Posts: 88092
Joined: Sat Feb 07, 2009 10:11 am

Re: How to use pair of adafruit GPS and Adafruit xbee adapter with xbees

Post by adafruit_support_bill »

If you are using software serial on multiple ports, only one can be used for receive at a time. http://arduino.cc/en/Reference/SoftwareSerial
You can use the "listen()" function to switch between them: http://arduino.cc/en/Reference/SoftwareSerialListen
But in your case, you will may lose some data in the process. To do what you want, you probably will require an Arduino with 2 hardware serial ports such as the Mega.

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino Shields from Adafruit”