合并两个arduino草图

Merging two arduino sketches

我一直在做一个项目。我有两个草图。一种是获取 GPS 位置,一种是通过 SMS(GSM 模块)发送位置。我想把两个草图结合起来。

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);

   }
  }
}

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);
 */
  }
 }

我想合并这两个草图,以便我可以通过 GSM 草图发送位置并通过 GPS 草图接收位置。 任何帮助将不胜感激。

谢谢。

您可以通过以下方式合并您的两个草图:

#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);
 */
  }

   }
  }
}

P.S:我已经更改了 GPS 的引脚,其余部分是相同的,无论添加 AltSoftSerial 它是一个与 SoftwareSerial 相同的库(从管理库下载它需要引脚 8 和 9)