◀ Previous Next ▶ Up ▲


witpoko.com


ช่วยดู code ให้หน่อยครับ

เป็นโปรเจกเกี่ยวกับจีพีเอสโดยเลือกเอาฟอร์แมต GPRMC
และเลือกเฉพาะละติจูดกะลองติจูดแต่ค่าที่มันส่งมาให้มีฟอร์แมตอื่นมาด้วย เลยไม่แน่ใจมันผิดตรงไหน

#include <18F8722.h>
#include <string.h>
#include <stdlib.h>

#define TX1 PIN_C6
#define RX1 PIN_C7
#define TX2 PIN_G1
#define RX2 PIN_G2

#fuses H4,NOLVP,NOWDT,NOPROTECT,NOSTVREN

#use delay (clock = 40000000)
#use rs232(baud = 9600, xmit = TX1, rcv = RX1)
#include <lcd.c>
#include <kbd.c>

char Data1;

#use fast_io(C)


#INT_RDA
void IntRDA_isr(void)
{
#use rs232(baud = 4800, xmit = TX1, rcv = RX1,stream=GPS)
Data1 = getc();
putc (Data1);
}


#INT_RDA2
void IntRDA_isr2(void)
{
#use rs232(baud = 9600, xmit = TX2, rcv = RX2,stream=HOSTPC)
Data1 = getc();
putc (Data1);
}

char buffer[80];
float m,Lat0,Lon0,Lat,Lon,Latx2,lony2,z,z0;

void Readmessage()
{
char c = 0;
char k = 0;
char sentent[]="GPRMC";
int i;

do
{
//while(fgetc(GPS)!='$'); //รอ $ เพื่อทำการเริ่ม Sentent
for(k=0;k<6;k++)
buffer[k]=fgetc(GPS);// ทำการเก็บค่าตัวอักษร 6 ตัวแรกใน buffer[] GPRMC

}while(strncmp(buffer,sentent,5)!=0);// ทำการเปรียบเทียบกับตัวอักษรที่เก็บไว้ในตัวแปร sentent


while((c!='*') && (k<=50))
{
c=fgetc(GPS);
buffer[k++]=c;
}
}

void Convert() // ฟังก์ชั่นการแปลงค่า
{ char lati[9],lont[10],i;

// fprintf(HOSTPC,"\n\r---------------\n\r");

for(i=18;i<=26;i++) //true i=18;i<=27;i++
{

lati[i-18] = buffer[i];
// fprintf(HOSTPC,"%c",lati[i-18]);

}

for(i=31;i<=40;i++) //true i=31;i<=41;i++
{

lont[i-31] = buffer[i];

}
Lat = atof(lati);
Lon = atof(lont);

// fprintf(HOSTPC,"\n\r-------%d--------\n\r",sizeof(lati));
}

void Monitor() // ฟังชั่นส่งค่า
{
char i;
fprintf(HOSTPC,"\n\r ################## \n\r");
for(i=0;i<=50;i++)
{

fprintf(HOSTPC,"%c",buffer[i]);

}

fprintf(HOSTPC,"\n\r lat = ");
for(i=18;i<=26;i++) //true i=18;i<=26;i++
{

fprintf(HOSTPC,"%c",buffer[i]);

}
fprintf(HOSTPC,"\n\r lon = ");
for(i=31;i<=40;i++) //true i=31;i<=41;i++
{

fprintf(HOSTPC,"%c",buffer[i]);

}
fprintf(HOSTPC,"\n\r");
}


void PrintShow()
{

fprintf(HOSTPC,"\n\r Converted lat = %f",Lat); //print to hypertemenal
fprintf(HOSTPC,"\n\r Converted lon = %f \n\r",Lon); //print to hypertemenal

delay_ms(200);

}

void main() {

// char Dat;

set_tris_c(0B10000000);
set_tris_g(0B10000100);

enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
enable_interrupts(INT_RDA2);

while(true) {

Readmessage();
Convert();
Monitor();
}


}
ค่าที่ได้รับจากจีพีเอส
GVG

##################
$PT,000T,,0005.18N10054,,0.,.02059,A6
lat = 10054,,0.
$PTn = 059,A6

##################
GPRMC,44388A066,,3022E000000200,,A62
GT,0.,,M000,0.
lat = 022E00000
lon = ,,A62
GT,0

##################
GV,0.T,M0000.5.66,10054,,0.,0.,650,A6
lat = 10054,,0.
GV,n = 650,A6

##################
GVG000T,,000,,.18,0054,,0.000,2009A6
lat = 0054,,0.0
GVG0 = 009A6


จากคุณ : yut_rmustv -[ 2 มิ.ย. 52 - 12:22:00 A:118.173.166.61 X: ]





กระทู้ยอดนิยม