エレキジャックweb mbed入門 GPS課題6です。GPS GT-720FのGPGGAセンテンスの時刻データを取り出してLCDに時刻を表示します。

Dependencies:   mbed

Committer:
takeuchi
Date:
Thu Feb 03 01:33:10 2011 +0000
Revision:
0:d717099494da

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takeuchi 0:d717099494da 1 //GPS GT-720F Test06
takeuchi 0:d717099494da 2 #include "mbed.h"
takeuchi 0:d717099494da 3 #include "TextLCD0420.h"
takeuchi 0:d717099494da 4
takeuchi 0:d717099494da 5 #define ON 1
takeuchi 0:d717099494da 6 #define OFF 0
takeuchi 0:d717099494da 7
takeuchi 0:d717099494da 8 DigitalOut mled0(LED1);
takeuchi 0:d717099494da 9 DigitalOut mled1(LED2);
takeuchi 0:d717099494da 10
takeuchi 0:d717099494da 11 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30,20,4); // rs, rw, e, d0, d1, d2, d3
takeuchi 0:d717099494da 12 Serial gps(p9,p10);
takeuchi 0:d717099494da 13
takeuchi 0:d717099494da 14 int main() {
takeuchi 0:d717099494da 15
takeuchi 0:d717099494da 16 char c;
takeuchi 0:d717099494da 17 int i,rlock,stn;
takeuchi 0:d717099494da 18 char gps_data[256];
takeuchi 0:d717099494da 19 char ns,ew;
takeuchi 0:d717099494da 20 float time,hokui,tokei;
takeuchi 0:d717099494da 21 float g_hokui,g_tokei;
takeuchi 0:d717099494da 22 float d_hokui,m_hokui,d_tokei,m_tokei;
takeuchi 0:d717099494da 23 int h_time,m_time,s_time;
takeuchi 0:d717099494da 24
takeuchi 0:d717099494da 25 gps.baud(9600);
takeuchi 0:d717099494da 26 lcd.cls();
takeuchi 0:d717099494da 27 lcd.locate(0,0);
takeuchi 0:d717099494da 28 lcd.printf("*** GPS GT-720F ***");
takeuchi 0:d717099494da 29
takeuchi 0:d717099494da 30 while (1) {
takeuchi 0:d717099494da 31 i=0;
takeuchi 0:d717099494da 32 while(gps.getc()!='$'){
takeuchi 0:d717099494da 33 }
takeuchi 0:d717099494da 34
takeuchi 0:d717099494da 35 while( (gps_data[i]=gps.getc()) != '\r'){
takeuchi 0:d717099494da 36 i++;
takeuchi 0:d717099494da 37 if(i==256){
takeuchi 0:d717099494da 38 lcd.printf("*** Data read Error! ***\n");
takeuchi 0:d717099494da 39 i=255;
takeuchi 0:d717099494da 40 break;
takeuchi 0:d717099494da 41 }
takeuchi 0:d717099494da 42 }
takeuchi 0:d717099494da 43 gps_data[i]='\0';
takeuchi 0:d717099494da 44
takeuchi 0:d717099494da 45 //test
takeuchi 0:d717099494da 46 /* Test data
takeuchi 0:d717099494da 47 rlock=1;
takeuchi 0:d717099494da 48 stn=3;
takeuchi 0:d717099494da 49 hokui=3532.25024; //=>35.537502
takeuchi 0:d717099494da 50 tokei=13751.86820;//=>137.864471
takeuchi 0:d717099494da 51 time=114107.046;
takeuchi 0:d717099494da 52 */
takeuchi 0:d717099494da 53 if( sscanf(gps_data, "GPGGA,%f,%f,%c,%f,%c,%d,%d",&time,&hokui,&ns,&tokei,&ew,&rlock,&stn) >= 1){
takeuchi 0:d717099494da 54 if(rlock >= 1){
takeuchi 0:d717099494da 55 //hokui
takeuchi 0:d717099494da 56 d_hokui=int(hokui/100);
takeuchi 0:d717099494da 57 m_hokui=(hokui-d_hokui*100)/60;
takeuchi 0:d717099494da 58 g_hokui=d_hokui+m_hokui;
takeuchi 0:d717099494da 59 //tokei
takeuchi 0:d717099494da 60 d_tokei=int(tokei/100);
takeuchi 0:d717099494da 61 m_tokei=(tokei-d_tokei*100)/60;
takeuchi 0:d717099494da 62 g_tokei=d_tokei+m_tokei;
takeuchi 0:d717099494da 63 //g_hokui=int(hokui/100)+(hokui-int(hokui/100))/60;
takeuchi 0:d717099494da 64 //g_tokei=int(tokei/100)+(tokei-int(tokei/100))/60;
takeuchi 0:d717099494da 65
takeuchi 0:d717099494da 66 //time set
takeuchi 0:d717099494da 67 h_time=int(time/10000);
takeuchi 0:d717099494da 68 m_time=int((time-h_time*10000)/100);
takeuchi 0:d717099494da 69 s_time=int(time-h_time*10000-m_time*100);
takeuchi 0:d717099494da 70 h_time=h_time+9;//UTC =>JST
takeuchi 0:d717099494da 71
takeuchi 0:d717099494da 72 lcd.cls();
takeuchi 0:d717099494da 73 lcd.locate(0,0);
takeuchi 0:d717099494da 74 lcd.printf("*GPS JST %2d:%2d:%2d",h_time,m_time,s_time);
takeuchi 0:d717099494da 75 lcd.locate(0,1);
takeuchi 0:d717099494da 76 lcd.printf("Lock(%d),Stn(%d)",rlock,stn);
takeuchi 0:d717099494da 77 //Latitude=Hokui
takeuchi 0:d717099494da 78 lcd.locate(0,2);
takeuchi 0:d717099494da 79 lcd.printf("Lat/d:%4.6f",g_hokui);
takeuchi 0:d717099494da 80 // Logitude=tokei
takeuchi 0:d717099494da 81 lcd.locate(0,3);
takeuchi 0:d717099494da 82 lcd.printf("Log/d:%4.6f",g_tokei);
takeuchi 0:d717099494da 83 }
takeuchi 0:d717099494da 84 else{
takeuchi 0:d717099494da 85 lcd.locate(0,0);
takeuchi 0:d717099494da 86 lcd.printf("*** GPS GT-720F ***");
takeuchi 0:d717099494da 87 lcd.locate(0,1);
takeuchi 0:d717099494da 88 lcd.printf("Lock(%d),Stn(%d)",rlock,stn);
takeuchi 0:d717099494da 89 lcd.locate(0,2);
takeuchi 0:d717099494da 90 for(i=0;i<40;i++){
takeuchi 0:d717099494da 91 lcd.printf("%c",gps_data[i]);
takeuchi 0:d717099494da 92 }
takeuchi 0:d717099494da 93 }
takeuchi 0:d717099494da 94 }//if
takeuchi 0:d717099494da 95 }//while
takeuchi 0:d717099494da 96 }//main
takeuchi 0:d717099494da 97
takeuchi 0:d717099494da 98
takeuchi 0:d717099494da 99