The code:
#include <SPI.h> //
// Serial used for debug (D0, D1)
// Serial1 used for GPS/GSM module (D2,D3)
byte inMonitor;
byte inGPS;
char dataGPS[] = {46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,};
// Assign pins
byte pd3 = 4; // to GSM/GPS
byte pd4 = 5; // to GSM/GPS
byte pd5 = 6; // to GSM/GPS
byte cs1 = 7; //
byte heat1Pin = 8; //
byte c3 = 9; //
byte cs0 = 10; //
byte pressurePin = A0; //
byte stat1 = 15; //
byte stat1State;
byte stat2 = 16; //
byte stat2State;
byte can_int = 17; //
byte can_csd = 18; //
byte v3Pin = A5; //
byte v1Pin = A6; //
byte v2Pin = A7; //
byte oe = 22; //
byte cs2 = 23; //
byte c2 = 24; //
byte c1 = 25; //
byte c0 = 26; //
byte fanPin = 27; //
byte coolPin = 28; //
byte heatPin = 29; //
byte cool1Pin = 30; //
byte csPin = 31; //
byte x=0; // chip counter
void setup(){
// GPS/GSM pins
pinMode (pd3, OUTPUT);
pinMode (pd4, OUTPUT);
pinMode (pd5, OUTPUT);
// Output GSM Timing
digitalWrite (pd5, HIGH);
delay(1500);
digitalWrite (pd5, LOW);
digitalWrite (pd3, HIGH);
digitalWrite (pd4, HIGH);
Serial.begin(9600); // for debug
Serial1.begin (9600); // for gps/gsm control
// check incoming messages
//NORMAL POWER DOWN - 17 - need a reset if get this
//
//RDY
//+CFUN: 1 - 8
//+CPIN: READY - 12
//+PACSP: 1 - 9
//Call Ready - 10
//GPS Ready - 9 - these two may be swapped
delay(2000);
Serial.println("");
Serial.print ("Starting GPS/GSM 'warmup' delay");
Serial.print(" ");
for (x=1; x<=12; x=x+1){
Serial.print (x);
delay(1000);
}
Serial.println("");
Serial.println ("GPS ready for AT?");
byte y =0;
for (x=0; x<100; x=x+1){
inGPS = Serial1.read();
// 13, 10, 32 ignore CR, LF, Space
if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
dataGPS[y] = inGPS;
y=y+1;
}
}
for (x=0; x<100; x=x+1){
Serial.print (dataGPS[x]);
}
Serial.println("");
if ((dataGPS[0] == 'N') || (dataGPS[0] == 255)){
Serial.println("need a reset, find a way");
while(1);
}
Serial.println("");
if((dataGPS[0] == 'R') || (dataGPS[0] == '+') ){
Serial.println("yes - sending AT");
Serial1.write('a');
Serial1.write('t');
Serial1.write(13);
Serial1.write(10);
}
Serial.print("received: ");
y = 0;
delay(2000);
while (Serial1.available()>0){
inGPS = Serial1.read();
// 13, 10, 32 ignore CR, LF, Space
if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
dataGPS[y] = inGPS;
y=y+1;
}
}
// print response
for (x=0; x<100; x=x+1){
Serial.print (dataGPS[x]);
}
Serial.println("");
Serial.println("");
Serial.println("sending at+cgpspwr=1");
Serial1.write('a');
Serial1.write('t');
Serial1.write('+');
Serial1.write('c');
Serial1.write('g');
Serial1.write('p');
Serial1.write('s');
Serial1.write('p');
Serial1.write('w');
Serial1.write('r');
Serial1.write('=');
Serial1.write('1');
Serial1.write(13);
Serial1.write(10);
y = 0;
delay(2000);
while (Serial1.available()>0){
inGPS = Serial1.read();
// 13, 10, 32 ignore CR, LF, Space
if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
dataGPS[y] = inGPS;
y=y+1;
}
}
// print response
Serial.print("received: ");
for (x=0; x<100; x=x+1){
Serial.print (dataGPS[x]);
}
Serial.println("");
Serial.println("");
Serial.println("sending at+cgpsrst=1");
Serial1.write('a');
Serial1.write('t');
Serial1.write('+');
Serial1.write('c');
Serial1.write('g');
Serial1.write('p');
Serial1.write('s');
Serial1.write('r');
Serial1.write('s');
Serial1.write('t');
Serial1.write('=');
Serial1.write('1');
Serial1.write(13);
Serial1.write(10);
y = 0;
delay(2000);
while (Serial1.available()>0){
inGPS = Serial1.read();
// 13, 10, 32 ignore CR, LF, Space
if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
dataGPS[y] = inGPS;
y=y+1;
}
}
// print response
Serial.print("received: ");
for (x=0; x<100; x=x+1){
Serial.print (dataGPS[x]);
}
Serial.println("");
Serial.println("");
Serial.println("sending at+cgpsstatus?");
Serial1.write('a');
Serial1.write('t');
Serial1.write('+');
Serial1.write('c');
Serial1.write('g');
Serial1.write('p');
Serial1.write('s');
Serial1.write('s');
Serial1.write('t');
Serial1.write('a');
Serial1.write('t');
Serial1.write('u');
Serial1.write('s');
Serial1.write('?');
Serial1.write(13);
Serial1.write(10);
y = 0;
delay(4000);
while (Serial1.available()>0){
inGPS = Serial1.read();
// 13, 10, 32 ignore CR, LF, Space
if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
dataGPS[y] = inGPS;
y=y+1;
}
}
// print response
Serial.print("received: ");
for (x=0; x<100; x=x+1){
Serial.print (dataGPS[x]);
}
Serial.println("");
Serial.println("");
Serial.println("sending at+cgpsinf=4");
Serial1.write('a');
Serial1.write('t');
Serial1.write('+');
Serial1.write('c');
Serial1.write('g');
Serial1.write('p');
Serial1.write('s');
Serial1.write('i');
Serial1.write('n');
Serial1.write('f');
Serial1.write('=');
Serial1.write('4');
Serial1.write(13);
Serial1.write(10);
Serial.println("");
y = 0;
delay(2000);
while (Serial1.available()>0){
inGPS = Serial1.read();
// 13, 10, 32 ignore CR, LF, Space
if ((inGPS !=13) && (inGPS !=10) && (inGPS !=32)){
dataGPS[y] = inGPS;
y=y+1;
}
}
// print response
Serial.print("received: ");
for (x=0; x<100; x=x+1){
Serial.print (dataGPS[x]);
}
Serial.println("");
Serial.println("setup complete");
}
void loop(){
// GPS test code
if (Serial.available()>0){
inMonitor = Serial.read();
Serial1.write(inMonitor);
}
if (Serial1.available()>0){
inGPS = Serial1.read();
Serial.write(inGPS);
}
}