我正在尝试使用Arduino Uno制作GPS / GSM接收器 . 我的程序试图用一些 if 来表示传入的字符串 . 然后我想将它们转换为将它们保存在SD卡上,或者将它们作为短信发送 .

这是来自GPS的正确信息:

+GPSRD:
$GPGGA,151420.000,5222.61362,N,01658.51086,E,1,03,8.9,0.0,M,,M,,0000*44
$GPRMC,151420.000,A,5222.61362,N,01658.51086,E,0.46,160.58,201017,,,A*67
$GPVTG,160.58,T,,M,0.46,N,0.86,K,A*3B

我需要的是第三条线,因为有坐标 . 我想保存它们 . 所以我做了一些功能 . 我也试图通过SMS命令导航整个设备 . 一切都在代码中 . 这是代码:

#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
#include <string.h>

#define rxPin 7
#define txPin 8

String message="lalala", callingnumber="";
String response="";
String coords;
String data[13]={"","","","","","","","","","","","",""};
String thetime=(""), date=(""), latitude=(""), longitude=("");
SoftwareSerial mySerial(rxPin, txPin);

void setup() {
  Serial.begin(115200);
  mySerial.begin(19200);
  while (!Serial) {
  }
  digitalWrite(3, HIGH);
  delay(2000);
  digitalWrite(3, LOW);
  for(int i = 0; i < 8; i++) {
    mySerial.println("AT");
    Serial.println("AT");
    delay(1000);
  }
  mySerial.println("");
  delay(1000);
  mySerial.println("Jestem gotowy!");
  delay(1000);
  mySerial.println("s - lokalizacja / g - wlacz gps / o - wylacz gps");
  delay(1000);
  Serial.println("AT+GPS=1");
  delay(1000);
  Serial.println("AT+CMGF=1");
  delay(1000);
  while (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

void loop() {
  RecData();
}

void RecData() {
  int firstindex, lastindex;
  Serial.setTimeout(1000);
  response = Serial.readString();
  firstindex = response.indexOf("$GPRMC");
  lastindex = response.indexOf("$GPVTG");
  if (response.indexOf("+CMT: ") > 0) {
    int numberindex = response.indexOf("+48");
    if (response.indexOf("Start") > 0) {
      callingnumber = response.substring(numberindex, numberindex+12);
      SendSMS("wlaczono");
      OpenGPS();
    }
  }
  if (response.indexOf("+CMT: ") > 0) {
    int numberindex = response.indexOf("+48");
    if (response.indexOf("Stop") > 0) {
      callingnumber = response.substring(numberindex, numberindex+12);
      SendSMS("zatrzymano");
      CloseGPS();
    }
  }
  if (response.indexOf("+CMT: ") > 0) {
    int numberindex = response.indexOf("+48");
    if (response.indexOf("Sms") > 0) {
      callingnumber = response.substring(numberindex, numberindex+12);
      SendSMS(message);
    }
  }
  int a = 0;
  for (int i=firstindex; i<lastindex; i++) {
    mySerial.print(response[i]);
    if(response[i] == ',') {
      a++;
    } else {
      data[a] += response[i];
    }
  }
  mySerial.print(firstindex);
  mySerial.print("::");
  mySerial.print(lastindex);
  mySerial.println(" loop is working");
  date = data[9];
  thetime = data[1];
  latitude = data[3] + data[4];
  longitude = data[5] + data[6];
  message = date.substring(0,2) + "." + date.substring(2,4) + "." + date.substring(4,6) + " " + thetime.substring(0,2) + ":" + thetime.substring(2,4) + ":" + thetime.substring(4,6) + " coords: " + latitude.substring(0,2) + "'" + latitude.substring(2,4) + "''" + latitude.substring(5,10) + "'''" + latitude.substring(10,11)+ " " + longitude.substring(1,3) + "'" + longitude.substring(3,5) + "''" + longitude.substring(6,11) + "'''" + longitude.substring(11,12);
  for(int ii = 0; ii < 13; ii++) {
    mySerial.print(data[ii]);
    data[ii] = "";
    //czyszczenie na szybko
  }
  if (firstindex < 0 && lastindex < 0) {
    mySerial.write("test");
    mySerial.print(response);
    mySerial.print(response.length());
  }
}

void OpenGPS() {
  mySerial.println("wlaczam gps");
  delay(500);
  Serial.println("AT+GPSRD=1");
  delay(500);
  mySerial.println("Wlaczono");
}

void CloseGPS() {
  mySerial.println("Wylaczam GPS");
  delay(500);
  Serial.println("AT+GPSRD=0");
}

void SignalQuality() {
  mySerial.print("Jakosc sygnalu: ");
  delay(1000);
  Serial.println("AT+CSQ");
}

void SendSMS(String msg) {
  mySerial.println("wysylam...");
  delay(500);
  Serial.println("AT+CMGS="+callingnumber);
  delay(500);
  Serial.print(msg);
  delay(500);
  Serial.println((char)26);
  delay(500);
  mySerial.println("wyslano");
}

我正在寻求一些帮助,因为它不能很好地运作 . 以下是执行程序的屏幕截图:

enter image description here

反应不好 . 有一些文本转换来获得13个字符串的消息 .

请帮助,如果我错过任何信息,我可以编辑帖子 .

谢谢 .