Go Down

Topic: Sending 2 times my longitude! (Read 485 times) previous topic - next topic

WinToS

Hi there, I have a little problem with my code!
I'm a student so I'm not really good with arduino.
I wanted to do use arduino to receive gps data (longitude/latitude) and send it by sms to my mobile phone!
It's almost perfectly working here is what I receive :
"Voici la longitude : // in english : "Here is longitude :
*Longitude*
Voici la latitude : // in english "Here is latitude :
*Latitude,Longitude* "
The second longitude is the problem! I don't want to receive it twice! I'm always trying to change my code, but it never works i'm always receiving this message, except if I remove the ligne of longitude in the code, then I receive my Latitude and only my latitude!
By the way, i'm directly sending char, is that a problem? My teacher said it was strange to send char, but it instantly worked, and when I was trying to do : char=>string/int... it never worked!
So here is my code, if someone nice could explain me why it sends 2 times longitude, (I think it's an easy problem) Thank's, WinTos.
#include <SoftwareSerial.h>
SoftwareSerial GPS(2, 3);
unsigned char buffer[84];  // buffer array for data receive over serial port (84 car longueur trame = 74 et faut que ce soit >74)
int count=0;  //compteur pour réinitialiser les valeurs du gps
 char Latitude[10];
 char Longitude[10];
// counter for buffer array


void setup()
{
    GPS.begin(9600);                 // the SoftSerial baud rate
    Serial.begin(9600);                     // the Serial port of Arduino baud rate.
    Serial.println("AT+CMGF=1");
}


void sendInfo()

  Serial.print("AA");
  delay(1000); //delay of 1
  Serial.println("AT");
  delay(1000);
  Serial.write("AT+CMGF=1\r\n");           //set GSM to text mode
  delay(1500);
  Serial.write("AT+CPMS=\"SM\"\r\n");         //Preferred SMS Message Storage
  delay(1000);
  Serial.write("AT+CMGS=\"+3375791187\"\r");           //set GSM to text mode
  delay(1500);
  Serial.println("Voici la longitude : ");//avant cetait latitude
  Serial.println(Longitude);
  Serial.println("Voici la latitude : "); // avant cetait longitude
  Serial.println(Latitude);//set GSM to text mode
  delay(1500);
  Serial.write(0x1A);           // sends ctrl+z end of message
  delay(1500);
  Serial.println("sms sent ");
} //end sendInfo()


void loop()// debut loop
 {
  if (GPS.available())                     // if data is coming from software serial port ==> data is coming from SoftSerial shield
 
     { // debut if gps
     //gps.encode(SoftSerial.read();
     while(GPS.available())               // reading data into char array
     { // debut tant que
     // print longitude
     buffer[count++]= GPS.read();      // writing data into array
     if(count == 84) break;    //limite
     } // fin tant que
     for (int j=0; j<10;j++) // compteur de 0 à 10 de 1 en 1 il lit les 10 caractères, mais 10 fois les memes a chaque fois donc faut clear buffer
     { // remplissage long et lat
     Longitude[j]=buffer[j+30];// Commence à 30 caractères, saute GPGGA, et heure, longitude, N, etc...
     }
     count = 0;
     for (int u=0; u<10;u++)
     {
     Latitude=buffer[u+18]; //Commence à 18 caractères, saute Gpgga,et heure temps universelle
     } // fin remplissage long et lat
             
     } // fin if gps
     delay(1000); //délai de 20minutes = (1200000) 9 messages durant ascenscion théorique
     count = 0;   //revient à 0 pour pas afficher les memes trucs en boucle 
     sendInfo();
 }

void clearBufferArray()                     // function to clear buffer array
{
    for (int i=0; i<count;i++)
    {
        buffer=NULL;
    }                      // clear all index of array with command NULL²
}


WinToS


Go Up