I've got this code from DFRobot wiki page that we had running on a Mega. Captures GPS data one-time and sends a text.
Am adapting it for a 1284 board I have to capture & send every two minutes. Simple blink-without-delay addition, easy, yes? However I get these error messages, which I don't understand.
I moved setup() and loop() to the top of the sketch, vs buried at the bottom below all the functions, which shouldn't make a difference, should it?
IDE 1.0.6, Win7
Any ideas? Thanks.
// Modified for 1284P pins
// Read/Write from GPS/GSM on Serial1
// Talk to PC on Serial
// Product name: GPS/GPRS/GSM Module V3.0
// # Product SKU : TEL0051
// # Version : 1.2
// # Description:
// # The sketch for driving the gps mode via the Arduino board
// # Steps:
// # 1. Turn the S1 switch to the Prog(right side)
// # 2. Turn the S2 switch to the Arduino side(left side)
// # 3. Set the UART select switch to middle one.
// # 4. Upload the sketch to the Arduino board
// # 5. Turn the S1 switch to the comm(left side)
// # 6. RST the board
// # If you get 'inf' values, go outdoors and wait until it is connected.
// # wiki link- http://www.dfrobot.com/wiki/index.php/GPS/GPRS/GSM_Module_V3.0_(SKU:TEL0051)
// modify to send every 2 minutes
unsigned long currentMillis();
unsigned long oldMillis();
unsigned long duration = 120000UL; // 1000 * 60 * 2 = 2 minutes
void setup()
{
pinMode(4,OUTPUT);//Change the default digital driver pins for the GSM and GPS mode to 4,5,6
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
digitalWrite(6,HIGH);
delay(1500);
digitalWrite(6,LOW);
digitalWrite(4,LOW);//Enable GSM mode
digitalWrite(5,HIGH);//Disable GPS mode
delay(2000);
Serial.begin(9600);
Serial1.begin(9600);
delay(5000);//GPS ready
Serial1.println("AT");
delay(2000);
//turn on GPS power supply
Serial1.println("AT+CGPSPWR=1");
delay(1000);
//reset GPS in autonomy mode
Serial1.println("AT+CGPSRST=1");
delay(1000);
digitalWrite(5,LOW);//Enable GPS mode
digitalWrite(4,HIGH);//Disable GSM mode
delay(2000);
Serial.println("$GPGGA statement information: ");
oldMillis = millis();
}
void loop()
{
currentMillis = millis();
if ((currentMillis - oldMillis) >= duration){
oldMillis = oldMillis + duration;
Serial.print("UTC:");
UTC();
Serial.print("Lat:");
latitude();
Serial.print("Dir:");
lat_dir();
Serial.print("Lon:");
longitude();
Serial.print("Dir:");
lon_dir();
Serial.print("Alt:");
altitude();
Serial.println(' ');
Serial.println(' ');
}
}
double Datatransfer(char *data_buf,char num)//convert the data to the float type
{ //*data_buf:the data array
double temp=0.0; //the number of the right of a decimal point
unsigned char i,j;
if(data_buf[0]=='-')
{
i=1;
//process the data array
while(data_buf[i]!='.')
temp=temp*10+(data_buf[i++]-0x30);
for(j=0;j<num;j++)
temp=temp*10+(data_buf[++i]-0x30);
//convert the int type to the float type
for(j=0;j<num;j++)
temp=temp/10;
//convert to the negative numbe
temp=0-temp;
}
else//for the positive number
{
i=0;
while(data_buf[i]!='.')
temp=temp*10+(data_buf[i++]-0x30);
for(j=0;j<num;j++)
temp=temp*10+(data_buf[++i]-0x30);
for(j=0;j<num;j++)
temp=temp/10 ;
}
return temp;
}
char ID()//Match the ID commands
{
char i=0;
char value[6]={
'
The errors:
GPS_test.ino: In function 'void setup()':
GPS_test:58: error: assignment of function 'long unsigned int oldMillis()'
GPS_test:58: error: cannot convert 'long unsigned int' to 'long unsigned int ()()' in assignment
GPS_test.ino: In function 'void loop()':
GPS_test:62: error: assignment of function 'long unsigned int currentMillis()'
GPS_test:62: error: cannot convert 'long unsigned int' to 'long unsigned int ()()' in assignment
GPS_test:63: error: ISO C++ forbids using pointer to a function in subtraction
GPS_test:64: error: pointer to a function used in arithmetic
GPS_test:64: error: assignment of function 'long unsigned int oldMillis()'
GPS_test:64: error: cannot convert 'long unsigned int (*)()' to 'long unsigned int ()()' in assignment
,'G','P','G','G','A' };//match the gps protocol
char val[6]={
'0','0','0','0','0','0' };
while(1)
{
if(Serial1.available()) // read Serial1 for GPS/GSM card
{
val[i] = Serial1.read();//get the data from the serial interface
if(val[i]==value[i]) //Match the protocol
{
i++;
if(i==6)
{
i=0;
return 1;//break out after get the command
}
}
else
i=0;
}
}
}
void comma(char num)//get ','
{
char val;
char count=0;//count the number of ','
while(1)
{
if(Serial1.available())
{
val = Serial1.read();
if(val==',')
count++;
}
if(count==num)//if the command is right, run return
return;
}
}
void UTC()//get the UTC data -- the time
{
char i;
char time[9]={
'0','0','0','0','0','0','0','0','0'
};
double t=0.0;
if( ID())//check ID
{
comma(1);//remove 1 ','
//get the datas after headers
while(1)
{
if(Serial1.available())
{
time[i] = Serial1.read();
i++;
}
if(i==9)
{
i=0;
t=Datatransfer(time,2);//convert data
// t=t-30000.00;//convert to the chinese time GMT+8 Time zone
t=t+60000.00;//convert to the US east coast time GMT-6 Time zone
long time=t;
int h=time/10000;
int m=(time/100)%100;
int s=time%100;
// if(h>=24) //UTC+
// {
// h-=24;
// }
if (h<0) //UTC-
{
h+=24;
}
Serial.print(h);
Serial.print("h");
Serial.print(m);
Serial.print("m");
Serial.print(s);
Serial.println("s");
//Serial.println(t);//Print data
return;
}
}
}
}
void latitude()//get latitude
{
char i;
char lat[10]={
'0','0','0','0','0','0','0','0','0','0'
};
if( ID())
{
comma(2);
while(1)
{
if(Serial1.available())
{
lat[i] = Serial1.read();
i++;
}
if(i==10)
{
i=0;
Serial.println(Datatransfer(lat,5)/100.0,7);//print latitude
return;
}
}
}
}
void lat_dir()//get dimensions
{
char i=0,val;
if( ID())
{
comma(3);
while(1)
{
if(Serial1.available())
{
val = Serial1.read();
Serial.write(val);
Serial.println();
i++;
}
if(i==1)
{
i=0;
return;
}
}
}
}
void longitude()//get longitude
{
char i;
char lon[11]={
'0','0','0','0','0','0','0','0','0','0','0'
};
if( ID())
{
comma(4);
while(1)
{
if(Serial1.available())
lon[i] = Serial1.read();
i++;
}
if(i==11)
{
i=0;
Serial.println(Datatransfer(lon,5)/100.0,7);
return;
}
}
}
void lon_dir()//get direction data
{
char i=0,val;
if( ID())
{
comma(5);
while(1)
{
if(Serial1.available())
{
val = Serial1.read();
Serial.write(val); //Serial.println(val,BYTE);
Serial.println();
i++;
}
if(i==1)
{
i=0;
return;
}
}
}
}
void altitude()//get altitude data
{
char i,flag=0;
char alt[8]={
'0','0','0','0','0','0','0','0'
};
if( ID())
{
comma(9);
while(1)
{
if(Serial1.available())
{
alt[i] = Serial1.read();
if(alt[i]==',')
flag=1;
else
i++;
}
if(flag)
{
i=0;
Serial.println(Datatransfer(alt,1),1);//print altitude data
return;
}
}
}
}
The errors:
§DISCOURSE_HOISTED_CODE_1§