2017-05-06 2 views
0

J'ai travaillé sur un projet. J'ai deux croquis. L'un est d'obtenir l'emplacement GPS et l'autre est l'emplacement d'envoi par SMS (module GSM). Je veux combiner les deux croquis.Fusion de deux croquis arduino

croquis GPS:

#include <SoftwareSerial.h> 
#include <TinyGPS.h> 

//long lat,lon; // create variable for latitude and longitude object 
float flat, flon; 

SoftwareSerial gpsSerial(4, 3); // create gps sensor connection 
TinyGPS gps; // create gps object 

void setup(){ 
    Serial.begin(9600); // connect serial 
    gpsSerial.begin(9600); // connect gps sensor 
} 

static void print_float(float val, float invalid, int len, int prec) 
{ 
    if (val == invalid) 
    { 
    while (len-- > 1) 
     Serial.print('*'); 
    Serial.print(' '); 
    } 
    else 
    { 
    Serial.print(val, prec); 
    int vi = abs((int)val); 
    int flen = prec + (val < 0.0 ? 2 : 1); // . and - 
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; 
    for (int i=flen; i<len; ++i) 
     Serial.print(' '); 
    } 
// smartdelay(0); 
} 

void loop(){ 
    while(gpsSerial.available()){ // check for gps data 
    if(gps.encode(gpsSerial.read())){ // encode gps data 
    // gps.get_position(&lat,&lon); // get latitude and longitude 
    gps.f_get_position(&flat, &flon); 
    String lat = String(flat,6); 
    String lon = String(flon,6); 
    Serial.print(lat); 
    Serial.print(' '); 
    Serial.println(lon); 

    } 
    } 
} 

croquis GSM:

#include <SoftwareSerial.h> 

SoftwareSerial mySerial(9, 10); 

void setup() 
{ 
    mySerial.begin(9600); // Setting the baud rate of GSM Module 
    Serial.begin(9600); // Setting the baud rate of Serial Monitor (Arduino) 
    delay(100); 
} 

int index=0; 
long dlat=0,dlong=0; 
char st[256],st1[256],st2[256]; 
void RecieveMessage() 
{ 
    mySerial.println("AT+CNMI=2,2,0,0,0"); // AT Command to receive a live SMS 
    // mySerial.println("cheking"); 
// mySerial.println(string); 
} 

void loop() 
{ 
    if (Serial.available()>0) 
    RecieveMessage(); 

if (mySerial.available()>0) 
{ 
    //int st; 
    st[index++] = mySerial.read(); 
//Serial.write(st[index-1]); 

if(index>=51&&index<=63){ 
    st1[index-51]=st[index-1]; 
    Serial.write(st1[index-51]); 
    } 
    if(index>=65&&index<=77){ 
    st2[index-65]=st[index-1]; 
    Serial.write(st2[index-65]); 
    } 
/*if(index==77) 
{ 
int i=0; 
mySerial.print(st1); 
    for(i=0;i<13;i++) 
    { 
     if(st1[i]!='.') 
     dlat=dlat*10+(st1[i]-'0'); 
     if(st2[i]!='.') 
     dlong=dlong*10+(st2[i]-'0'); 
     //Serial.print(dlat); 
    } 

//Serial.print(dlat); 
//Serial.print(" "); 
//Serial.print(dlong); 
*/ 
    } 
} 

Je veux fusionner ces deux croquis afin que je puisse envoyer emplacement via croquis GSM et emplacement de réception par croquis GPS. Toute aide sera appréciée.

Merci.

+0

Le GPS va générer une sortie plusieurs fois à toutes les secondes et il ne sera pas possible d'envoyer cela via GSM (car le GSM aura besoin de temps pour envoyer des données) .Vous devriez avoir à donner une certaine limite de temps, c'est-à-dire, supposons qu'il soit limité à dire envoyer les données de localisation toutes les 3 secondes (le GSM peut prendre environ 2 secondes pour régler up) – Billa

+0

'SoftwareSerial' est un peu déprimé que vous devriez éviter de l'utiliser. – Billa

+0

@Billa Je n'envoie pas de données de gsm à gps. J'envoie des données à gsm séparément et gps obtient automatiquement son emplacement. Je veux juste que ces deux codes soient fusionnés en un. –

Répondre

1

La manière suivante vous pouvez fusionner vos deux croquis:

#include <AltSoftSerial.h> 
#include <SoftwareSerial.h> 
#include <TinyGPS.h> 

//long lat,lon; // create variable for latitude and longitude object 
float flat, flon; 

SoftwareSerial gpsSerial(4, 3); // create gps sensor connection 
TinyGPS gps; // create gps object 
static const int RXPin = 8, TXPin = 9; 
AltSoftSerial mySerial(RXPin, TXPin); 

int index=0; 
long dlat=0,dlong=0; 
char st[256],st1[256],st2[256]; 
void RecieveMessage() 
{ 
    mySerial.println("AT+CNMI=2,2,0,0,0"); // AT Command to receive a live SMS 
    // mySerial.println("cheking"); 
// mySerial.println(string); 
} 


void setup(){ 
    Serial.begin(9600); // connect serial 
    gpsSerial.begin(9600); // connect gps sensor 
    mySerial.begin(9600); // Setting the baud rate of GSM Module 
    delay(100); 
} 

static void print_float(float val, float invalid, int len, int prec) 
{ 
    if (val == invalid) 
    { 
    while (len-- > 1) 
     Serial.print('*'); 
    Serial.print(' '); 
    } 
    else 
    { 
    Serial.print(val, prec); 
    int vi = abs((int)val); 
    int flen = prec + (val < 0.0 ? 2 : 1); // . and - 
    flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; 
    for (int i=flen; i<len; ++i) 
     Serial.print(' '); 
    } 
// smartdelay(0); 
} 

void loop(){ 
    while(gpsSerial.available()){ // check for gps data 
    if(gps.encode(gpsSerial.read())){ // encode gps data 
    // gps.get_position(&lat,&lon); // get latitude and longitude 
    gps.f_get_position(&flat, &flon); 
    String lat = String(flat,6); 
    String lon = String(flon,6); 
    Serial.print(lat); 
    Serial.print(' '); 
    Serial.println(lon); 

    if (Serial.available()>0) 
    RecieveMessage(); 

if (mySerial.available()>0) 
{ 
    //int st; 
    st[index++] = mySerial.read(); 
//Serial.write(st[index-1]); 

if(index>=51&&index<=63){ 
    st1[index-51]=st[index-1]; 
    Serial.write(st1[index-51]); 
    } 
    if(index>=65&&index<=77){ 
    st2[index-65]=st[index-1]; 
    Serial.write(st2[index-65]); 
    } 
/*if(index==77) 
{ 
int i=0; 
mySerial.print(st1); 
    for(i=0;i<13;i++) 
    { 
     if(st1[i]!='.') 
     dlat=dlat*10+(st1[i]-'0'); 
     if(st2[i]!='.') 
     dlong=dlong*10+(st2[i]-'0'); 
     //Serial.print(dlat); 
    } 

//Serial.print(dlat); 
//Serial.print(" "); 
//Serial.print(dlong); 
*/ 
    } 

    } 
    } 
} 

PS: J'ai changé les broches pour une partie GPS et le repos est le même quel que soit l'ajout AltSoftSerial est une bibliothèque même que SoftwareSerial (Téléchargez-le gérer les bibliothèques et il nécessite les broches 8 et 9)

+0

S'il vous plaît dire Je pense que ce n'est pas un problème pour vous de passer aux broches 8 et 9 – Billa

+0

Merci beaucoup! Cela a fonctionné avec succès :) –

+0

Heureux de l'entendre aidé. – Billa