I am currently writing a program that reads in GPS input and writes the input to an array. inChar2 is getchar for UART2. It loops through the string until it finds the characters $GPPGA line and then writes the longitude and latitude to their respective arrays. I then want to compare longitude & check_longitude and latitude & check_latitude and print out one thing if they match and another thing if they don't. However, my code is not comparing the strings and only prints out "no match". Where am I going wrong? I also have written a function called accum that takes all the GPS input and stores it in a giant string. I don't think it's written properly, and I am not utilizing it in the ISR function.This program is being written in MPLAB X IDE.
//accumulate variables
void accum(char c)
{
static char array[1000];
static char *end = array;
*end++ = c;
if (c == "\n")
{
*end++ = 0;
end = array;
}
}
void _ISR _U2RXInterrupt()
{
//setting up the variables used
unsigned char incomer_data = 0;
unsigned char longitude[13] = {};
unsigned char latitude[13] = {};
unsigned char array_count = 0;
unsigned char temp;
int is_in = 0;
//$GPGGA,224355.00,3326.51776,N,08849.74254,W,2,09,1.02,104.9,M,-29.5,M,,0000*64
unsigned char check_long[13] =
{ //"3327.12050,N", //sidewalk
"3326.51776",
};
unsigned char check_lat[13] =
{
//"08847.25265W",
"08849.74254",
};
accum(temp);
// printf("%c", temp);
//char c = inChar2();
//outChar(c);
while (1)
{
incomer_data = inChar2(); //get character, checking string $GPGGA
//outChar(incomer_data);
//step by step find the GPGGA line
if (incomer_data == '$')
{
//first statement of GPS data starts with $
incomer_data = inChar2(); //if the first IF becomes true then next phase
// outChar(incomer_data);
if (incomer_data == 'G')
{
incomer_data = inChar2();
//outChar(incomer_data);
if (incomer_data == 'P')
{
incomer_data = inChar2();
//outChar(incomer_data);
if (incomer_data == 'G')
{
incomer_data = inChar2();
//outChar(incomer_data);
if (incomer_data == 'G')
{
incomer_data = inChar2();
//outChar(incomer_data);
if (incomer_data == 'A')
{
incomer_data = inChar2();
//outChar(incomer_data);
if (incomer_data == ',')
{
// first ',' received
incomer_data = inChar2(); //at this stage Final check in done. GPGGA is found
//outChar(incomer_data);
while (incomer_data != ',')
{ //skipping GMT time
incomer_data = inChar2();
//outChar(incomer_data);
}
incomer_data = inChar2();
latitude[0] = incomer_data;
//outChar(incomer_data);
// printf("working\n");
while (incomer_data != ',')
{
//printf("hi\n");
for(array_count = 1; incomer_data != 'N'; array_count++)
{
incomer_data = inChar2();
latitude[array_count] = incomer_data; //Store Latitude data
outChar(incomer_data);
//printf("latitude data");
}
//printf("hi");
incomer_data = inChar2();
if (incomer_data == ',')
{
for(array_count = 0; (incomer_data != 'E'); array_count++)
{
incomer_data = inChar2();
longitude[array_count] = incomer_data; //store Longitude data
outChar(incomer_data);
//printf("longitude data");
}
}
int i = 0;
for (i = 0; i < 13; ++i)
{
if ((strcmp(check_long, longitude) == 0) & (strcmp(check_lat, latitude) == 0)) {
printf("hot, sidewalk, bright, sunny, weird\n");
is_in = 1;
}
}
if (is_in == 0)
{
printf("no match");
}
array_count = 0;
while (array_count < 12) { //array of latitude data is 11 digit
//print data
array_count++;
}
array_count = 0;
while (array_count < 13) { //array of longitude data is 12 digit
//print data
array_count++;
}
outChar(incomer_data); //prints out E
}
}
}
}
}
}
}
for(array_count = 0; array_count <= 13; array_count++)
{
incomer_data = 0;
latitude[array_count] = 0;
longitude[array_count] = 0;
}
array_count = 0;
}
}
//DELAY_MS(3000);
}