📄 gps.c
字号:
printf(" res: %i" , (int) res[1]);
printf(" res: %i" , (int) res[2]);
printf(" res: %i" , (int) res[3]);
putchar('\r');
putchar('\n');
printf(" checksum: %i", checksum[0]);
printf(" checksum: %i", checksum[1]);
printf(" checksum: %i", checksum[2]);
printf(" checksum: %i", checksum[3]);
putchar('\r');
putchar('\n');
printf(" creturn: %i", creturn[0]);
printf(" creturn: %i", creturn[1]);
printf(" creturn: %i", creturn[2]);
printf(" creturn: %i", creturn[3]);
putchar('\r');
putchar('\n');
printf(" cnewline: %i", (int) cnewline[0]);
printf(" cnewline: %i", (int) cnewline[1]);
printf(" cnewline: %i", (int) cnewline[2]);
printf(" cnewline: %i", (int) cnewline[3]);
putchar('\r');
putchar('\n');
end
//***********************************************************************
void SendSatellitesCoordinates(void)
begin
int temp=0;
putchar('L');
printf("Atmega32 Processor Calculated Coordinates:");
putchar('\r');
putchar('\n');
printf("ECEF Coordinates:");
putchar('\r');
putchar('\n');
printf("PRN # %d -> ECEFx: %f ECEFy %f ECEFz: %f ",(PRN[0]+1),satellitesECEFx[0], satellitesECEFy[0],satellitesECEFz[0] );
putchar('\r');
putchar('\n');
printf("PRN # %d -> ECEFx: %f ECEFy %f ECEFz: %f ",(PRN[1]+1), satellitesECEFx[1], satellitesECEFy[1],satellitesECEFz[1]);
putchar('\r');
putchar('\n');
printf("PRN # %d -> ECEFx: %f ECEFy %f ECEFz: %f ",(PRN[2]+1), satellitesECEFx[2], satellitesECEFy[2],satellitesECEFz[2] );
putchar('\r');
putchar('\n');
printf("PRN # %d -> ECEFx: %f ECEFy %f ECEFz: %f ",(PRN[3]+1), satellitesECEFx[3], satellitesECEFy[3],satellitesECEFz[3] );
putchar('\r');
putchar('\n');
printf("WGS84 Coordinates:");
putchar('\r');
putchar('\n');
printf("PRN # %d -> long: %f lat %f alt: %f ",(PRN[0]+1),satelliteslon[0], satelliteslat[0],satellitesalt[0] );
putchar('\r');
putchar('\n');
printf("PRN # %d -> long: %f lat %f alt: %f ",(PRN[1]+1),satelliteslon[1], satelliteslat[1],satellitesalt[1] );
putchar('\r');
putchar('\n');
printf("PRN # %d -> long: %f lat %f alt: %f ",(PRN[2]+1),satelliteslon[2], satelliteslat[2],satellitesalt[2] );
putchar('\r');
putchar('\n');
printf("PRN # %d -> long: %f lat %f alt: %f ",(PRN[3]+1),satelliteslon[3], satelliteslat[3],satellitesalt[3] );
putchar('\r');
putchar('\n');
printf("Thales DG16 Coordinatesand Pseudo-ranges:");
putchar('\r');
putchar('\n');
printf("Current GPS Time in milliseconds: %ld" , currentTime);
putchar('\r');
putchar('\n');
printf("Total Number of Satellites Locked : %d" , totalsatellites);
putchar('\r');
putchar('\n');
temp=sv[0];
printf("Pseudo-range(in meters) for PRN % d: %f" , temp, range[0]*3*100000000);
putchar('\r');
putchar('\n');
printf("PRN # %d -> ECEFx: %f ECEFy %f ECEFz: %f ",temp,ReceiverECEFx[0], ReceiverECEFy[0],ReceiverECEFz[0] );
putchar('\r');
putchar('\n');
temp=sv[1];
printf("Pseudo-range(in meters) for PRN % d: %f" , temp, range[1]*3*100000000);
putchar('\r');
putchar('\n');
printf("PRN # %d -> ECEFx: %f ECEFy %f ECEFz: %f ",temp,ReceiverECEFx[1], ReceiverECEFy[1],ReceiverECEFz[1] );
putchar('\r');
putchar('\n');
temp=sv[2];
printf("Pseudo-range(in meters) for PRN % d: %f" , temp, range[2]*3*100000000);
putchar('\r');
putchar('\n');
printf("PRN # %d -> ECEFx: %f ECEFy %f ECEFz: %f ",temp,ReceiverECEFx[2], ReceiverECEFy[2],ReceiverECEFz[2] );
putchar('\r');
putchar('\n');
temp=sv[3];
printf("Pseudo-range(in meters) for PRN % d: %f" , temp, range[3]*3*100000000) ;
putchar('\r');
putchar('\n');
printf("PRN # %d -> ECEFx: %f ECEFy %f ECEFz: %f ",temp,ReceiverECEFx[3], ReceiverECEFy[3],ReceiverECEFz[3] );
putchar('\r');
putchar('\n');
end
//***********************************************************************
void SendSatellitesPositions(void)
begin
printf("S%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e\r\n", satelliteslon[0], satelliteslat[0],satellitesalt[0],((float)PRN[0]+1.0), satelliteslon[1], satelliteslat[1],satellitesalt[1],((float)PRN[1]+1.0), satelliteslon[2], satelliteslat[2],satellitesalt[2],((float)PRN[2]+1.0), satelliteslon[3], satelliteslat[3],satellitesalt[3],((float)PRN[3]+1.0));
putchar('\r');
putchar('\n');
end
//***********************************************************************
void SendReceiverPositions(void)
begin
int i=0;
while(i<totalsatellites)
begin
latlong(ReceiverECEFx[i],ReceiverECEFy[i],ReceiverECEFz[i],i,0);
i++;
end
printf("N%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e\r\n", Receiverlon[0], Receiverlat[0],Receiveralt[0],(float)sv[0], Receiverlon[1], Receiverlat[1],Receiveralt[1],(float)sv[1], Receiverlon[2], Receiverlat[2],Receiveralt[2],(float)sv[2], Receiverlon[3], Receiverlat[3],Receiveralt[3],(float)sv[3]);
putchar('\r');
putchar('\n');
end
//***********************************************************************
void SendNavigationalSolution(void)
begin
int i=0;
while(i<totalsatellites)
begin
latlong(ReceiverECEFx[i],ReceiverECEFy[i],ReceiverECEFz[i],i,0);
i++;
end
printf("P%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e\r\n", Receiverlon[0], Receiverlat[0],Receiveralt[0],(float)sv[0], Receiverlon[1], Receiverlat[1],Receiveralt[1],(float)sv[1], Receiverlon[2], Receiverlat[2],Receiveralt[2],(float)sv[2], Receiverlon[3], Receiverlat[3],Receiveralt[3],(float)sv[3]);
putchar('\r');
putchar('\n');
end
//***********************************************************************
void SendPackage(void)
begin
GoIntoDaisyChainmode();
SendEphem();
SendSatellitesCoordinates();
SendReceiverPositions();
SendSatellitesPositions();
solvePos();
//SendNavigationalSolution();
GoOutofDaisyChainmode();
end
/*
*The following fucntions ar responsible for quering or setting
*parameters of the GPS receiver.
*
*/
//*****************************************************
void GoIntoDaisyChainmode(void)
begin
printf("$PASHS,DSY,A,B\r\n");
end
//****************************************************
void GoOutofDaisyChainmode(void)
begin
printf("$PASHS,DSY,OFF\r\n");
end
//****************************************************
void GetEphem(void)
begin
printf("$PASHQ,SNV,A\r\n");
end
//****************************************************
void GetCurrentTime(void)
begin
printf("$PASHQ,XYZ,A\r\n");
end
/*
*The following fucntions ar responsible for reading
*different types of data from the GPS receiver.
*
*/
//****************************************************
float ReadFloat(void)
begin
char float_buffer[4];
float temp=0;
float_buffer[3]=getchar();
float_buffer[2]=getchar();
float_buffer[1]=getchar();
float_buffer[0]=getchar();
memcpy(&temp,float_buffer,4);
return temp;
end
//****************************************************
char ReadChar(void)
begin
char temp;
temp= getchar();
return temp;
end
//****************************************************
unsigned long ReadLong(void)
begin
unsigned long temp=0;
unsigned long temp1=0;
temp=temp|(((unsigned long)getchar()))<<24;
temp1=temp1|(((unsigned long)getchar()))<<16;
temp= (temp|temp1);
temp1= temp1|(((unsigned long) getchar()))<<8;
temp=temp|temp1;
temp=temp|((unsigned long)getchar());
return temp;
end
//****************************************************
float ReadDouble(void)
begin
unsigned char double_buffer[8];
unsigned char double_buffer2[8];
float temp=0;
unsigned char temp0=0;
unsigned int temp1=0;
unsigned char temp2=0;
unsigned int temp3=0;
unsigned long temp4=0;
unsigned long temp5=0;
unsigned long temp6=0;
unsigned long temp7=0;
unsigned long E=0;
unsigned long S=0;
unsigned long F=0;
unsigned long V=0;
double_buffer[0]=getchar();//seeeeeee
double_buffer[1]=getchar();//eeeeffff
double_buffer[2]=getchar();//ffffffff
double_buffer[3]=getchar();//ffffffff
double_buffer[4]=getchar();//ffffffff
double_buffer[5]=getchar();
double_buffer[6]=getchar();
double_buffer[7]=getchar();
S=(((unsigned long)double_buffer[0])<<24)&0b10000000000000000000000000000000;//s0000000000000000000000000000000
temp0= double_buffer[0]; //seeeeeeee
temp1= (int)temp0; //00000000seeeeeee
temp1=temp1<<9; //eeeeeee000000000
temp2=double_buffer[1]; //eeeeffff
temp2=temp2&0b11110000; //eeee0000
temp3=((unsigned int)temp2)<<1; //0000000eeee00000
temp3=temp3|temp1; //eeeeeeeeeee00000
temp3=temp3>>5; //00000eeeeeeeeeee
temp3=temp3-1023+127; //offsets
E=((unsigned long )((unsigned char)temp3))<<23; //0eeeeeeee00000000000000000000000 in float
temp4 =(unsigned long )double_buffer[1]; //000000000000000000000000eeeeffff
temp4=temp4<<28 ; //ffff0000000000000000000000000000
temp5= (unsigned long )double_buffer[2]<<(16+4); //0000ffffffff00000000000000000000
temp6= (unsigned long )double_buffer[3]<<(8+4) ; //000000000000ffffffff000000000000
temp7= (unsigned long )double_buffer[4] <<4; //00000000000000000000ffffffff0000
temp7=temp7|temp6|temp5|temp4; //ffffffffffffffffffffffffffff0000
F=(temp7&0b11111111111111111111111000000000)>>9; //000000000fffffffffffffffffffffff
V=S|E|F;
double_buffer2[3]= (char)(V>>24);
double_buffer2[2]= (char)((V>>16)&0b00000000000000000000000011111111);
double_buffer2[1]= (char)((V>>8)&0b00000000000000000000000011111111);
double_buffer2[0]= (char)(V&0b00000000000000000000000011111111);
memcpy(&temp,double_buffer2,4);
return temp;
end
//****************************************************
int ReadShort(void)
begin
int temp=0;
temp=(temp|getchar())<<8;
temp=temp|getchar();
return temp;
end
/*
*The following fucntions ar responsible for parsing
*responses form the GPS receiver.
*
*/
//****************************************************
void ParseEphem(char l)
begin
//response
char a[11];
int i=0;
while(i<11)
begin
a[i++]=getchar();
end
//" wn: "
wn[l]=ReadShort();
//" tow: "
tow[l]=ReadLong();
//" tgd: "
tgd[l]=ReadFloat();
//" aodc: "
aodc[l]=ReadLong();
//" toc: "
toc[l]=ReadLong();
//" af2: "
af2[l]=ReadFloat();
//" af1: "
af1[l]=ReadFloat();
//" af0: "
af0[l]=ReadFloat();
//" aode: "
aode[l]=ReadLong();
//" deltan: "
deltan[l]=ReadFloat();
//" m0: "
m0[l]=ReadDouble();
//" e: "
e[l]= ReadDouble();
//" roota: "
roota[l]=ReadDouble();
//" toe: "
toe[l]=ReadLong();
//" cic: "
cic[l]=ReadFloat();
//" crc: "
crc[l]=ReadFloat();
//" cis: "
cis[l]=ReadFloat();
//" crs: "
crs[l]=ReadFloat();
//" cuc: "
cuc[l]=ReadFloat();
//" cus: "
cus[l]=ReadFloat();
//" omega0: "
omega0[l]=ReadDouble();
//" omega: "
omega[l]=ReadDouble();
//" i0: "
i0[l]=ReadDouble();
//" omegadot: "
omegadot[l]=ReadFloat();
//" idot: "
idot[l]=ReadFloat();
//" accuracy: "
accuracy[l]=ReadShort();
//" health: "
health[l]=ReadShort();
//" fit: "
fit[l]=ReadShort();
//" PRN: "
PRN[l]=ReadChar();
//" res: "
res[l]=ReadChar();
//" checksum: "
checksum[l]=ReadShort();
//" creturn: "
creturn[l]=ReadChar();
//" cnewline(): "
cnewline [l]=ReadChar();
end
//**********************************************************
void ParseCurrentTime(void)
begin
char a[11];
int i=0;
//response
while(i<11)
begin
a[i++]=ReadChar();
end
//" currentTime: "
currentTime= ReadLong();
//"totalsatellites: "
totalsatellites=ReadShort();
i= 0 ;
while(i<totalsatellites)
begin
sv[i]=ReadShort(); //sv
ReceiverECEFx[i]=ReadDouble(); // x
ReceiverECEFy[i]=ReadDouble(); // y
ReceiverECEFz[i]=ReadDouble(); // z
range[i]=ReadDouble(); // r
i++;
end
checksum1= ReadShort();//checksum
creturn1=ReadChar();
cnewline1=ReadChar();
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -