Hello there good people..
My little project is building the tracking device with gps module and gsm shield,
I have some problem that is like can't connecting GPS module and GSM shield together.
This is my code..
I have 2 part of code and i want to combine one each other to one part.
This code just for gsm Shield that is send and recieve the SMS
Original by Matias Fritz
#include "SIM900.h"
#include <SoftwareSerial.h>
#include <string.h>
#include "sms.h"
#include <MemoryFree.h>
SMSGSM sms;
// gsm variables
String text;
String nro;
boolean gsm_started=false;
char position;
char smsbuffer[65];
char n[15];
void setup(){
powerUpOrDown();
Serial.begin(9600);
delay(1000);
while(!gsm.begin(2400)){
Serial.println("fail");
delay(5000);
}
gsm_started=true;
Serial.println("[OK]");
}
void powerUpOrDown()
{
pinMode(9, OUTPUT);
digitalWrite(9,LOW);
delay(1000);
digitalWrite(9,HIGH);
delay(2000);
digitalWrite(9,LOW);
delay(3000);
}
void loop(){
if(gsm_started){
position=sms.IsSMSPresent(SMS_ALL);
if(position){
sms.GetSMS(position,n,smsbuffer,65);
Serial.print(F("From: "));
Serial.println(n);
Serial.print(F("Message: "));
Serial.println(smsbuffer);
nro=n;
text=smsbuffer;
sms.DeleteSMS(position);
Serial.print("ram:");
Serial.print(freeMemory());
delay(1000);
if (text.indexOf("GET POS")>=0){
text.toCharArray(smsbuffer,65);
Serial.print(F("to:"));
Serial.println(n);
Serial.print(F("Message: "));
Serial.println(smsbuffer);
sms.SendSMS(n,smsbuffer);
Serial.print("ram:");
Serial.print(freeMemory());
delay(5000);
}
}
}
}
and this one just for GPS module getting coordinate and speed
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <MemoryFree.h>
TinyGPS gps;
SoftwareSerial ss(12, 13);
char url[85];
String strurl;
void setup(){
ss.begin(4800);
Serial.begin(9600);
}
void loop(){
bool newData = false;
for (unsigned long start = millis(); millis() - start < 1000;){
while (ss.available()){
char c = ss.read();
if (gps.encode(c))
newData = true;
}
}
if (newData){
float flat, flon;
char latitude[6];
char longitude[6];
char speed[5];
gps.f_get_position(&flat, &flon);
dtostrf(flat, 3, 5, latitude);
strcpy(url, "http://maps.google.com/maps?q=");
strcat(url, latitude);
strcat(url, ",");
dtostrf(flon, 3, 5, longitude);
strcat(url, longitude);
float sp = gps.f_speed_kmph();
dtostrf(sp, 3, 2, speed);
strcat(url, "#");
strcat(url, speed);
strcat(url, "Km/h");
strurl=url;
Serial.println(strurl);
Serial.print(freeMemory());
}
}
If I run this one by one the code is running very good, But when i try to combine the code on this part
ss.begin(4800); //commented
delay(1000);//commented
powerUpOrDown();
Serial.begin(9600);
delay(1000);
while(!gsm.begin(2400)){
Serial.println("fail");
delay(5000);
}
gsm_started=true;
Serial.println("[OK]");
The sketch not running like first I'm trying one by one that's rolling the text:
ram:916From:
Message:
Every one second and can't recieve anything..
But if the line commented all running good..
I dont know why it happened..?
Any advice is very helpfull.
I'm trying to write down all of the code in one sketch.
Everything it's OK in "setup" section but in "loop" section the result is "fail" in serial monitor.
#include "SIM900.h"
#include <SoftwareSerial.h>
#include <string.h>
#include "sms.h"
#include <TinyGPS.h>
#include <MemoryFree.h>
SMSGSM sms;
TinyGPS gps;
SoftwareSerial ss(12, 13);
// gsm variables
String text;
String nro;
boolean gsm_started=false;
char position;
char smsbuffer[65];
char n[15];
char url[65];
String strurl;
void setup(){
ss.begin(4800);
delay(1000);
powerUpOrDown();
Serial.begin(9600);
delay(1000);
while(!gsm.begin(2400)){
Serial.println("fail");
delay(5000);
}
gsm_started=true;
Serial.println("[OK]");
}
void powerUpOrDown()
{
pinMode(9, OUTPUT);
digitalWrite(9,LOW);
delay(1000);
digitalWrite(9,HIGH);
delay(2000);
digitalWrite(9,LOW);
delay(3000);
}
void loop(){
bool newData = false;
for (unsigned long start = millis(); millis() - start < 1000;){
while (ss.available()){
char c = ss.read();
if (gps.encode(c))
newData = true;
}
}
if (newData){
float flat, flon;
char latitude[6];
char longitude[6];
char speed[5];
gps.f_get_position(&flat, &flon);
dtostrf(flat, 3, 5, latitude);
strcpy(url, "http://maps.google.com/maps?q=");
strcat(url, latitude);
strcat(url, ",");
dtostrf(flon, 3, 5, longitude);
strcat(url, longitude);
float sp = gps.f_speed_kmph();
dtostrf(sp, 3, 2, speed);
strcat(url, "#");
strcat(url, speed);
strcat(url, "Km/h");
strurl=url;
Serial.println(strurl);
Serial.print(freeMemory());
} else {
Serial.println("fail");
}
if(gsm_started){
position=sms.IsSMSPresent(SMS_ALL);
if(position){
sms.GetSMS(position,n,smsbuffer,65);
Serial.print(F("From: "));
Serial.println(n);
Serial.print(F("Message: "));
Serial.println(smsbuffer);
nro=n;
text=smsbuffer;
sms.DeleteSMS(position);
delay(1000);
if (text.indexOf("GET POS")>=0){
text.toCharArray(smsbuffer,65);
Serial.print(F("to:"));
Serial.println(n);
Serial.print(F("Message: "));
Serial.println(smsbuffer);
sms.SendSMS(n,smsbuffer);
Serial.print("ram:");
Serial.print(freeMemory());
delay(5000);
}
}
}
}
#Arduino Uno R3
#http://www.famosastudio.com/20-ch-em-406a-sirf-iii-receiver-with-antennaEM-406A GPS
#http://www.famosastudio.com/icomsat-gsm-gprs-shield-v1-1IComSat v1.1 - SIM900 GSM/GPRS Shield
I'm so sorry about my messy code, and for bad code.
Thanks a lot