Accel
Dependencies: mbed PowerControl SDFileSystem
Fork of HeptaAccel by
hepta_sat/HeptaGPS.cpp@1:63c3921c608c, 2016-12-13 (annotated)
- Committer:
- tomoya123
- Date:
- Tue Dec 13 07:51:40 2016 +0000
- Revision:
- 1:63c3921c608c
- Parent:
- 0:d721efd58e4e
Accel
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tomoya123 | 0:d721efd58e4e | 1 | #include "HeptaGPS.h" |
tomoya123 | 0:d721efd58e4e | 2 | #include "mbed.h" |
tomoya123 | 0:d721efd58e4e | 3 | |
tomoya123 | 0:d721efd58e4e | 4 | HeptaGPS::HeptaGPS(PinName tx, PinName rx) : gps(tx,rx) |
tomoya123 | 0:d721efd58e4e | 5 | { |
tomoya123 | 0:d721efd58e4e | 6 | } |
tomoya123 | 0:d721efd58e4e | 7 | void HeptaGPS::baud(int rate) |
tomoya123 | 0:d721efd58e4e | 8 | { |
tomoya123 | 0:d721efd58e4e | 9 | gps.baud(rate); |
tomoya123 | 0:d721efd58e4e | 10 | } |
tomoya123 | 0:d721efd58e4e | 11 | char HeptaGPS::getc() |
tomoya123 | 0:d721efd58e4e | 12 | { |
tomoya123 | 0:d721efd58e4e | 13 | c = gps.getc(); |
tomoya123 | 0:d721efd58e4e | 14 | return c; |
tomoya123 | 0:d721efd58e4e | 15 | } |
tomoya123 | 0:d721efd58e4e | 16 | int HeptaGPS::readable() |
tomoya123 | 0:d721efd58e4e | 17 | { |
tomoya123 | 0:d721efd58e4e | 18 | i = gps.readable(); |
tomoya123 | 0:d721efd58e4e | 19 | return i; |
tomoya123 | 0:d721efd58e4e | 20 | } |
tomoya123 | 0:d721efd58e4e | 21 | void HeptaGPS::flushSerialBuffer(void) |
tomoya123 | 0:d721efd58e4e | 22 | { |
tomoya123 | 0:d721efd58e4e | 23 | ite = 0; |
tomoya123 | 0:d721efd58e4e | 24 | while (gps.readable()) |
tomoya123 | 0:d721efd58e4e | 25 | { |
tomoya123 | 0:d721efd58e4e | 26 | gps.getc(); |
tomoya123 | 0:d721efd58e4e | 27 | ite++; |
tomoya123 | 0:d721efd58e4e | 28 | if(ite==100){break;}; |
tomoya123 | 0:d721efd58e4e | 29 | } |
tomoya123 | 0:d721efd58e4e | 30 | return; |
tomoya123 | 0:d721efd58e4e | 31 | } |
tomoya123 | 0:d721efd58e4e | 32 | void HeptaGPS::gga_sensing(float *time, float *latitude, char *ns, float *longitude, char *ew, int *quality, int *stnum, float *hacu, float *altitude, char *aunit, int *gps_check) |
tomoya123 | 0:d721efd58e4e | 33 | { |
tomoya123 | 0:d721efd58e4e | 34 | int ite = 0; |
tomoya123 | 0:d721efd58e4e | 35 | while(gps.getc()!='$'){ |
tomoya123 | 0:d721efd58e4e | 36 | ite++; |
tomoya123 | 0:d721efd58e4e | 37 | if(ite==10000) break; |
tomoya123 | 0:d721efd58e4e | 38 | } |
tomoya123 | 0:d721efd58e4e | 39 | for(int i=0; i<5; i++){ |
tomoya123 | 0:d721efd58e4e | 40 | msg[i] = gps.getc(); |
tomoya123 | 0:d721efd58e4e | 41 | } |
tomoya123 | 0:d721efd58e4e | 42 | if((msg[2]=='G')&(msg[3]=='G')&(msg[4]=='A')){ |
tomoya123 | 0:d721efd58e4e | 43 | for(int j=0; j<6; j++){ |
tomoya123 | 0:d721efd58e4e | 44 | if(j==0){ |
tomoya123 | 0:d721efd58e4e | 45 | for(int i=5; i<256; i++){ |
tomoya123 | 0:d721efd58e4e | 46 | msg[i] = gps.getc(); |
tomoya123 | 0:d721efd58e4e | 47 | if(msg[i] == '\r') { |
tomoya123 | 0:d721efd58e4e | 48 | msg[i] = 0; |
tomoya123 | 0:d721efd58e4e | 49 | break; |
tomoya123 | 0:d721efd58e4e | 50 | } |
tomoya123 | 0:d721efd58e4e | 51 | } |
tomoya123 | 0:d721efd58e4e | 52 | }else{ |
tomoya123 | 0:d721efd58e4e | 53 | for(int i=0; i<256; i++){ |
tomoya123 | 0:d721efd58e4e | 54 | msgd[i] = gps.getc(); |
tomoya123 | 0:d721efd58e4e | 55 | if(msgd[i] == '\r') { |
tomoya123 | 0:d721efd58e4e | 56 | break; |
tomoya123 | 0:d721efd58e4e | 57 | } |
tomoya123 | 0:d721efd58e4e | 58 | } |
tomoya123 | 0:d721efd58e4e | 59 | if((msgd[4]=='V')&(msgd[5]=='T')&(msgd[6]=='G')){ |
tomoya123 | 0:d721efd58e4e | 60 | break; |
tomoya123 | 0:d721efd58e4e | 61 | } |
tomoya123 | 0:d721efd58e4e | 62 | } |
tomoya123 | 0:d721efd58e4e | 63 | } |
tomoya123 | 0:d721efd58e4e | 64 | if(sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d,%d,%f,%f,%c", time, latitude, ns, longitude, ew, quality, stnum, hacu, altitude, aunit) >= 1) { |
tomoya123 | 0:d721efd58e4e | 65 | if(!(quality)) { |
tomoya123 | 0:d721efd58e4e | 66 | //latitude(unit transformation) |
tomoya123 | 0:d721efd58e4e | 67 | *latitude=int(*latitude/100)+(*latitude-int(*latitude/100)*100)/60; |
tomoya123 | 0:d721efd58e4e | 68 | //longitude(unit transformation) |
tomoya123 | 0:d721efd58e4e | 69 | *longitude = int(*longitude/100)+(*longitude-int(*longitude/100)*100)/60; |
tomoya123 | 0:d721efd58e4e | 70 | *gps_check = 0; |
tomoya123 | 0:d721efd58e4e | 71 | } else { |
tomoya123 | 0:d721efd58e4e | 72 | //latitude(unit transformation) |
tomoya123 | 0:d721efd58e4e | 73 | *latitude=int(*latitude/100)+(*latitude-int(*latitude/100)*100)/60; |
tomoya123 | 0:d721efd58e4e | 74 | //longitude(unit transformation) |
tomoya123 | 0:d721efd58e4e | 75 | *longitude = int(*longitude/100)+(*longitude-int(*longitude/100)*100)/60; |
tomoya123 | 0:d721efd58e4e | 76 | *gps_check = 1; |
tomoya123 | 0:d721efd58e4e | 77 | } |
tomoya123 | 0:d721efd58e4e | 78 | } |
tomoya123 | 0:d721efd58e4e | 79 | else{ |
tomoya123 | 0:d721efd58e4e | 80 | printf("No Data"); |
tomoya123 | 0:d721efd58e4e | 81 | *gps_check = 2; |
tomoya123 | 0:d721efd58e4e | 82 | } |
tomoya123 | 0:d721efd58e4e | 83 | } |
tomoya123 | 0:d721efd58e4e | 84 | else{ |
tomoya123 | 0:d721efd58e4e | 85 | *gps_check = 3; |
tomoya123 | 0:d721efd58e4e | 86 | } |
tomoya123 | 0:d721efd58e4e | 87 | } |
tomoya123 | 0:d721efd58e4e | 88 | void HeptaGPS::lat_log_sensing_u16(char *lat, char *log, int *dsize) |
tomoya123 | 0:d721efd58e4e | 89 | { |
tomoya123 | 0:d721efd58e4e | 90 | char gph1[8]={0x00},gph2[8]={0x00},gph3[8]={0x00},gph4[8]={0x00},gpt1[8]={0x00},gpt2[8]={0x00},gpt3[8]={0x00},gpt4[8]={0x00}; |
tomoya123 | 0:d721efd58e4e | 91 | int i=0,j=0; |
tomoya123 | 0:d721efd58e4e | 92 | while (gps.readable()){ |
tomoya123 | 0:d721efd58e4e | 93 | gps.getc(); |
tomoya123 | 0:d721efd58e4e | 94 | } |
tomoya123 | 0:d721efd58e4e | 95 | loop: |
tomoya123 | 0:d721efd58e4e | 96 | while(gps.getc()!='$'){} |
tomoya123 | 0:d721efd58e4e | 97 | for(j=0;j<5;j++){ |
tomoya123 | 0:d721efd58e4e | 98 | gps_data[1][j]=gps.getc(); |
tomoya123 | 0:d721efd58e4e | 99 | } |
tomoya123 | 0:d721efd58e4e | 100 | if((gps_data[1][2]==0x52)&(gps_data[1][3]==0x4d)&(gps_data[1][4]==0x43)){ |
tomoya123 | 0:d721efd58e4e | 101 | for(j=0;j<1;j++){ |
tomoya123 | 0:d721efd58e4e | 102 | if(j==0){ |
tomoya123 | 0:d721efd58e4e | 103 | i=0; |
tomoya123 | 0:d721efd58e4e | 104 | while((gps_data[j+1][i+5] = gps.getc()) != '\r'){ |
tomoya123 | 0:d721efd58e4e | 105 | //pc.putc(gps_data[j+1][i+5]); |
tomoya123 | 0:d721efd58e4e | 106 | i++; |
tomoya123 | 0:d721efd58e4e | 107 | } |
tomoya123 | 0:d721efd58e4e | 108 | gps_data[j+1][i+5]='\0'; |
tomoya123 | 0:d721efd58e4e | 109 | i=0; |
tomoya123 | 0:d721efd58e4e | 110 | //pc.printf("\n\r"); |
tomoya123 | 0:d721efd58e4e | 111 | } |
tomoya123 | 0:d721efd58e4e | 112 | else{ |
tomoya123 | 0:d721efd58e4e | 113 | while(gps.getc()!='$'){} |
tomoya123 | 0:d721efd58e4e | 114 | i=0; |
tomoya123 | 0:d721efd58e4e | 115 | while((gps_data[j+1][i] = gps.getc()) != '\r'){ |
tomoya123 | 0:d721efd58e4e | 116 | //pc.putc(gps_data[j+1][i]); |
tomoya123 | 0:d721efd58e4e | 117 | i++; |
tomoya123 | 0:d721efd58e4e | 118 | } |
tomoya123 | 0:d721efd58e4e | 119 | gps_data[j+1][i]='\0'; |
tomoya123 | 0:d721efd58e4e | 120 | i=0; |
tomoya123 | 0:d721efd58e4e | 121 | //pc.printf("\n\r"); |
tomoya123 | 0:d721efd58e4e | 122 | } |
tomoya123 | 0:d721efd58e4e | 123 | } |
tomoya123 | 0:d721efd58e4e | 124 | } |
tomoya123 | 0:d721efd58e4e | 125 | else |
tomoya123 | 0:d721efd58e4e | 126 | { |
tomoya123 | 0:d721efd58e4e | 127 | goto loop; |
tomoya123 | 0:d721efd58e4e | 128 | } |
tomoya123 | 0:d721efd58e4e | 129 | if( sscanf(gps_data[1],"GPRMC,%f,%c,%f,%c,%f,%c,%f",&time,&statas,&hokui,&ns,&tokei,&ew,&vel) >= 1){ |
tomoya123 | 0:d721efd58e4e | 130 | //hokui |
tomoya123 | 0:d721efd58e4e | 131 | d_hokui=int(hokui/100); |
tomoya123 | 0:d721efd58e4e | 132 | m_hokui=(hokui-d_hokui*100); |
tomoya123 | 0:d721efd58e4e | 133 | //m_hokui=(hokui-d_hokui*100)/60; |
tomoya123 | 0:d721efd58e4e | 134 | g_hokui=d_hokui+(hokui-d_hokui*100)/60; |
tomoya123 | 0:d721efd58e4e | 135 | sprintf( gph1, "%02X", (char(d_hokui)) & 0xFF); |
tomoya123 | 0:d721efd58e4e | 136 | sprintf( gph2, "%02X", (char(m_hokui)) & 0xFF); |
tomoya123 | 0:d721efd58e4e | 137 | sprintf( gph3, "%02X", (char((m_hokui-char(m_hokui))*100)) & 0xFF); |
tomoya123 | 0:d721efd58e4e | 138 | sprintf( gph4, "%02X", (char(((m_hokui-char(m_hokui))*100-char((m_hokui-char(m_hokui))*100))*100)) & 0xFF); |
tomoya123 | 0:d721efd58e4e | 139 | |
tomoya123 | 0:d721efd58e4e | 140 | //tokei |
tomoya123 | 0:d721efd58e4e | 141 | d_tokei=int(tokei/100); |
tomoya123 | 0:d721efd58e4e | 142 | m_tokei=(tokei-d_tokei*100); |
tomoya123 | 0:d721efd58e4e | 143 | //m_tokei=(tokei-d_tokei*100)/60; |
tomoya123 | 0:d721efd58e4e | 144 | g_tokei=d_tokei+(tokei-d_tokei*100)/60; |
tomoya123 | 0:d721efd58e4e | 145 | sprintf( gpt1, "%02X", (char(d_tokei)) & 0xFF); |
tomoya123 | 0:d721efd58e4e | 146 | sprintf( gpt2, "%02X", (char(m_tokei)) & 0xFF); |
tomoya123 | 0:d721efd58e4e | 147 | sprintf( gpt3, "%02X", (char((m_tokei-char(m_tokei))*100)) & 0xFF); |
tomoya123 | 0:d721efd58e4e | 148 | sprintf( gpt4, "%02X", (char(((m_tokei-char(m_tokei))*100-char((m_tokei-char(m_tokei))*100))*100)) & 0xFF); |
tomoya123 | 0:d721efd58e4e | 149 | lat[0] = gph1[0]; |
tomoya123 | 0:d721efd58e4e | 150 | lat[1] = gph1[1]; |
tomoya123 | 0:d721efd58e4e | 151 | lat[2] = gph2[0]; |
tomoya123 | 0:d721efd58e4e | 152 | lat[3] = gph2[1]; |
tomoya123 | 0:d721efd58e4e | 153 | lat[4] = gph3[0]; |
tomoya123 | 0:d721efd58e4e | 154 | lat[5] = gph3[1]; |
tomoya123 | 0:d721efd58e4e | 155 | lat[6] = gph4[0]; |
tomoya123 | 0:d721efd58e4e | 156 | lat[7] = gph4[1]; |
tomoya123 | 0:d721efd58e4e | 157 | log[0] = gpt1[0]; |
tomoya123 | 0:d721efd58e4e | 158 | log[1] = gpt1[1]; |
tomoya123 | 0:d721efd58e4e | 159 | log[2] = gpt2[0]; |
tomoya123 | 0:d721efd58e4e | 160 | log[3] = gpt2[1]; |
tomoya123 | 0:d721efd58e4e | 161 | log[4] = gpt3[0]; |
tomoya123 | 0:d721efd58e4e | 162 | log[5] = gpt3[1]; |
tomoya123 | 0:d721efd58e4e | 163 | log[6] = gpt4[0]; |
tomoya123 | 0:d721efd58e4e | 164 | log[7] = gpt4[1]; |
tomoya123 | 0:d721efd58e4e | 165 | } |
tomoya123 | 0:d721efd58e4e | 166 | *dsize = 8; |
tomoya123 | 0:d721efd58e4e | 167 | } |