エレキジャックmbed入門 GPS GT-720Fデータロガーの製作用プログラムです。10秒ごとに緯度経度をロギングします。

Dependencies:   mbed

Committer:
takeuchi
Date:
Sat Feb 19 12:01:04 2011 +0000
Revision:
0:c7278239bae6

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takeuchi 0:c7278239bae6 1 //GPS GT-720F Logger01
takeuchi 0:c7278239bae6 2 #include "mbed.h"
takeuchi 0:c7278239bae6 3 #include "TextLCD0420.h"
takeuchi 0:c7278239bae6 4
takeuchi 0:c7278239bae6 5 #define ON 1
takeuchi 0:c7278239bae6 6 #define OFF 0
takeuchi 0:c7278239bae6 7
takeuchi 0:c7278239bae6 8 DigitalOut mled0(LED1);
takeuchi 0:c7278239bae6 9 DigitalOut mled1(LED2);
takeuchi 0:c7278239bae6 10 DigitalIn sw1(p5);
takeuchi 0:c7278239bae6 11
takeuchi 0:c7278239bae6 12 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3
takeuchi 0:c7278239bae6 13 Serial gps(p9,p10);
takeuchi 0:c7278239bae6 14 LocalFileSystem local("local");
takeuchi 0:c7278239bae6 15 Ticker flipper;
takeuchi 0:c7278239bae6 16 FILE *fp;
takeuchi 0:c7278239bae6 17 float g_hokui,g_tokei;
takeuchi 0:c7278239bae6 18 int fp_count=0;
takeuchi 0:c7278239bae6 19
takeuchi 0:c7278239bae6 20 void gps_rec() {
takeuchi 0:c7278239bae6 21 mled0=ON;
takeuchi 0:c7278239bae6 22 fprintf(fp,"%4.6f,%3.6f,\n",g_tokei,g_hokui);
takeuchi 0:c7278239bae6 23 wait(1.0);
takeuchi 0:c7278239bae6 24 mled0=OFF;
takeuchi 0:c7278239bae6 25 fp_count++;
takeuchi 0:c7278239bae6 26 }
takeuchi 0:c7278239bae6 27
takeuchi 0:c7278239bae6 28 int main() {
takeuchi 0:c7278239bae6 29
takeuchi 0:c7278239bae6 30 char c;
takeuchi 0:c7278239bae6 31 int i,rlock=0,stn=0;
takeuchi 0:c7278239bae6 32 char gps_data[256];
takeuchi 0:c7278239bae6 33 char ns,ew;
takeuchi 0:c7278239bae6 34 float time,hokui,tokei;
takeuchi 0:c7278239bae6 35
takeuchi 0:c7278239bae6 36 float d_hokui,m_hokui,d_tokei,m_tokei;
takeuchi 0:c7278239bae6 37 int h_time=0,m_time=0,s_time=0;
takeuchi 0:c7278239bae6 38 int rec_flag=0;
takeuchi 0:c7278239bae6 39
takeuchi 0:c7278239bae6 40 gps.baud(9600);
takeuchi 0:c7278239bae6 41 lcd.cls();
takeuchi 0:c7278239bae6 42 lcd.printf("*** GPS GT-720F ****\n");
takeuchi 0:c7278239bae6 43 lcd.locate(0,1);
takeuchi 0:c7278239bae6 44 lcd.printf("File open...\n");
takeuchi 0:c7278239bae6 45 wait(1.0);
takeuchi 0:c7278239bae6 46 fp=fopen("/local/GPS.txt","a");
takeuchi 0:c7278239bae6 47 if(!fp || sw1==0){
takeuchi 0:c7278239bae6 48 lcd.cls();
takeuchi 0:c7278239bae6 49 lcd.printf("Can't Loging ... \n");
takeuchi 0:c7278239bae6 50 lcd.printf("System close...\n");
takeuchi 0:c7278239bae6 51 lcd.printf(">\n");
takeuchi 0:c7278239bae6 52 exit(1);
takeuchi 0:c7278239bae6 53 }
takeuchi 0:c7278239bae6 54 lcd.printf("System start...\n");
takeuchi 0:c7278239bae6 55 lcd.printf("Loging ready ok...\n");
takeuchi 0:c7278239bae6 56 fprintf(fp,"\n");
takeuchi 0:c7278239bae6 57 wait(1.0);
takeuchi 0:c7278239bae6 58
takeuchi 0:c7278239bae6 59 while (1) {
takeuchi 0:c7278239bae6 60 if(sw1==0){
takeuchi 0:c7278239bae6 61 fclose(fp);
takeuchi 0:c7278239bae6 62 lcd.cls();
takeuchi 0:c7278239bae6 63 lcd.printf("System close...\n");
takeuchi 0:c7278239bae6 64 lcd.printf(">\n");
takeuchi 0:c7278239bae6 65 exit(1);
takeuchi 0:c7278239bae6 66 }
takeuchi 0:c7278239bae6 67
takeuchi 0:c7278239bae6 68 i=0;
takeuchi 0:c7278239bae6 69 while(gps.getc()!='$'){
takeuchi 0:c7278239bae6 70 }
takeuchi 0:c7278239bae6 71
takeuchi 0:c7278239bae6 72 while( (gps_data[i]=gps.getc()) != '\r'){
takeuchi 0:c7278239bae6 73 i++;
takeuchi 0:c7278239bae6 74 if(i==256){
takeuchi 0:c7278239bae6 75 lcd.printf("*** Data read Error! ***\n");
takeuchi 0:c7278239bae6 76 i=255;
takeuchi 0:c7278239bae6 77 break;
takeuchi 0:c7278239bae6 78 }
takeuchi 0:c7278239bae6 79 }
takeuchi 0:c7278239bae6 80 gps_data[i]='\0';
takeuchi 0:c7278239bae6 81
takeuchi 0:c7278239bae6 82 //test
takeuchi 0:c7278239bae6 83 /* Test data
takeuchi 0:c7278239bae6 84 rlock=1;
takeuchi 0:c7278239bae6 85 stn=3;
takeuchi 0:c7278239bae6 86 hokui=3532.25024; //=>35.537502
takeuchi 0:c7278239bae6 87 tokei=13751.86820;//=>137.864471
takeuchi 0:c7278239bae6 88 time=114107.046;
takeuchi 0:c7278239bae6 89 */
takeuchi 0:c7278239bae6 90 if( sscanf(gps_data, "GPGGA,%f,%f,%c,%f,%c,%d,%d",&time,&hokui,&ns,&tokei,&ew,&rlock,&stn) >= 1){
takeuchi 0:c7278239bae6 91 if(rlock >= 1){
takeuchi 0:c7278239bae6 92
takeuchi 0:c7278239bae6 93 //hokui
takeuchi 0:c7278239bae6 94 d_hokui=int(hokui/100);
takeuchi 0:c7278239bae6 95 m_hokui=(hokui-d_hokui*100)/60;
takeuchi 0:c7278239bae6 96 g_hokui=d_hokui+m_hokui;
takeuchi 0:c7278239bae6 97 //tokei
takeuchi 0:c7278239bae6 98 d_tokei=int(tokei/100);
takeuchi 0:c7278239bae6 99 m_tokei=(tokei-d_tokei*100)/60;
takeuchi 0:c7278239bae6 100 g_tokei=d_tokei+m_tokei;
takeuchi 0:c7278239bae6 101 //g_hokui=int(hokui/100)+(hokui-int(hokui/100))/60;
takeuchi 0:c7278239bae6 102 //g_tokei=int(tokei/100)+(tokei-int(tokei/100))/60;
takeuchi 0:c7278239bae6 103
takeuchi 0:c7278239bae6 104 //time set
takeuchi 0:c7278239bae6 105 h_time=int(time/10000);
takeuchi 0:c7278239bae6 106 m_time=int((time-h_time*10000)/100);
takeuchi 0:c7278239bae6 107 s_time=int(time-h_time*10000-m_time*100);
takeuchi 0:c7278239bae6 108 h_time=h_time+9;//UTC =>JST
takeuchi 0:c7278239bae6 109
takeuchi 0:c7278239bae6 110 // Record start
takeuchi 0:c7278239bae6 111 if(rec_flag==0){
takeuchi 0:c7278239bae6 112 flipper.attach(&gps_rec, 10.0);
takeuchi 0:c7278239bae6 113 rec_flag=1;
takeuchi 0:c7278239bae6 114 fprintf(fp,"JST %2d:%2d:%2d\n",h_time,m_time,s_time);
takeuchi 0:c7278239bae6 115 lcd.cls();
takeuchi 0:c7278239bae6 116 mled0=ON;
takeuchi 0:c7278239bae6 117 lcd.printf("Loging start....");
takeuchi 0:c7278239bae6 118 wait(5.0);
takeuchi 0:c7278239bae6 119 mled0=ON;
takeuchi 0:c7278239bae6 120 }
takeuchi 0:c7278239bae6 121
takeuchi 0:c7278239bae6 122 lcd.cls();
takeuchi 0:c7278239bae6 123 lcd.locate(0,0);
takeuchi 0:c7278239bae6 124 lcd.printf("*GPS JST %2d:%2d:%2d",h_time,m_time,s_time);
takeuchi 0:c7278239bae6 125 lcd.locate(0,1);
takeuchi 0:c7278239bae6 126 lcd.printf("Lk(%d),St(%d),%d",rlock,stn,fp_count);
takeuchi 0:c7278239bae6 127 //Latitude=Hokui
takeuchi 0:c7278239bae6 128 lcd.locate(0,2);
takeuchi 0:c7278239bae6 129 lcd.printf("Lat/d:%4.6f",g_hokui);
takeuchi 0:c7278239bae6 130 // Logitude=tokei
takeuchi 0:c7278239bae6 131 lcd.locate(0,3);
takeuchi 0:c7278239bae6 132 lcd.printf("Log/d:%4.6f",g_tokei);
takeuchi 0:c7278239bae6 133 }
takeuchi 0:c7278239bae6 134 else{
takeuchi 0:c7278239bae6 135 flipper.detach();
takeuchi 0:c7278239bae6 136 rec_flag=0;
takeuchi 0:c7278239bae6 137 lcd.cls();
takeuchi 0:c7278239bae6 138 lcd.locate(0,0);
takeuchi 0:c7278239bae6 139 lcd.printf("*** GPS GT-720F ***");
takeuchi 0:c7278239bae6 140 lcd.locate(0,1);
takeuchi 0:c7278239bae6 141 lcd.printf("Lk(%d),St(%d)",rlock,stn);
takeuchi 0:c7278239bae6 142 lcd.locate(0,2);
takeuchi 0:c7278239bae6 143 for(i=0;i<40;i++){
takeuchi 0:c7278239bae6 144 lcd.printf("%c",gps_data[i]);
takeuchi 0:c7278239bae6 145 }
takeuchi 0:c7278239bae6 146 }
takeuchi 0:c7278239bae6 147 }//if
takeuchi 0:c7278239bae6 148 }//while
takeuchi 0:c7278239bae6 149 }//main
takeuchi 0:c7278239bae6 150
takeuchi 0:c7278239bae6 151
takeuchi 0:c7278239bae6 152