Having strange issue sending Char array through SMS on mkr 1400

I'm doing a project where I am sending GPS data through SMS. I'm having an issue sending a char array on SMS. I'm sending two char arrays; one is a prewritten statement, and one is the line of GPS information. The prewritten one is being sent normally; however, the GPS data is sent in multiple messages, and one char is added to the previous message. Even when I use strcat() to put them in one array, I get the exact same issue. Attached is my code and a screenshot of the messages. :pray:

// GET $GPRMC LINE FROM GPS-module.
// USING: MKRGSM1400 & ADAFRUIT ULTIMATE GPS BREAKOUT v3
/*
 * GPS TEST
 * MKRGSM1400
 */
#include <Arduino.h>
// Include the GSM library
#include <MKRGSM.h>

#include "arduino_secrets.h"
// Please enter your sensitive data in the Secret tab or arduino_secrets.h
// PIN Number

const char PINNUMBER[] = "0000";

// initialize the library instance

GSM gsmAccess;

GSM_SMS sms;

#define SerialGPS Serial1  // RX&TX PINS
#define CHECK_INTERVAL 5  //seconds.
//VARS

 char remoteNum[20]= "7326749230";
int buttonState = 0; 
char txtMsg[300]= "I need help at : \n"; 
unsigned long previousTest;
bool mGPS_got_line = false, mGPS_paused = false;
uint8_t mGPS_idx=0;
char mGPS_TempLine[120];

void setup() {
  Serial.begin(9600); //USB
  SerialGPS.begin(9600); //TEST GPS.

  while(!Serial) { ; } //WAIT FOR SERIAL USB.
  Serial.print("\nTEST SOMETHING\n\n");
  pinMode(6, INPUT);
  bool connected = false;
   while (!connected) {

    if (gsmAccess.begin(PINNUMBER) == GSM_READY) {

      connected = true;

    } else {

      Serial.println("Not connected");

      delay(1000);

   }
  }
  Serial.println("GSM initialized");

}

void loop() {

if (millis() - previousTest >= CHECK_INTERVAL*1000UL) 
{
  previousTest = millis();
  Serial.print("\n\nGET NEW LINE\n\n");
  if (mGPS_paused) mGPS_paused = false; 
}
char mGPS = 0;
if ((SerialGPS.available() > 0) && !mGPS_got_line && !mGPS_paused) 
{
  mGPS = SerialGPS.read();
  //Serial.write(mGPS);   //DEBUG
  if (mGPS == '\n') 
  {
    mGPS_TempLine[mGPS_idx] = 0; mGPS_idx = 0; mGPS_got_line = true;
  } 
  else
  {
     mGPS_TempLine[mGPS_idx++] = mGPS;
     if (mGPS_idx >= 120) mGPS_idx = 119; //dont overflow.
  }
}
if (mGPS_got_line)
{
  if (strstr(mGPS_TempLine, "$GPRMC"))
  {
    Serial.print("-->");Serial.println(mGPS_TempLine);
    //DO SOMETHING WITH THE LINE.
    
    //done parsed.
    mGPS_paused = true; mGPS_got_line = false; //Reset to get a new after paused has been reset.
  }
  else
  {
    mGPS_got_line = false; //wrong line not GPRMC. get another.
  }
}


  Serial.print(dest);
  sms.beginSMS(remoteNum);

sms.print(txtMsg);
sms.print(mGPS_TempLine);
    delay(20000);
   sms.endSMS();


buttonState = digitalRead(6);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    if ((buttonState == HIGH) && (strstr(mGPS_TempLine, "$GPRMC")))
  // if ((buttonState == HIGH) && (gsmAccess.begin(PINNUMBER) == GSM_READY) && (strstr(mGPS_TempLine, "$GPRMC")))
  {
//Serial.print("pressed");
//  sms.beginSMS(remoteNum);
//
//  sms.print(dest);
//Serial.print("ok");
//
//
//Serial.print("passed");
//  } else if ((buttonState == HIGH)&& (!(gsmAccess.begin(PINNUMBER) == GSM_READY))) {
//     // turn LED on:
//    digitalWrite(7, HIGH);
//  }

  }
} //END LOOP

i can't dive into your code, makin'me dizzy..

If you presss CMD+T (Mac) in the IDE the code is formatted.

Try to Serial.print() your output first. After it's correct, do the sms.print().

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.