エレキジャック Web版 mbedで初めてのマイコン開発 センサを使ってみよう Rapid PrototypingでGPSロガーをサクサク作るの記事のGPS Loggerのプログラムです。とても簡単にGPS Loggerを作ることができます。 http://www.eleki-jack.com/arm/2011/03/mbed-rapid-prototypinggps-1.html
Dependencies: TextLCD mbed SDFileSystem
main.cpp@0:83a5c5ca947f, 2011-03-08 (annotated)
- Committer:
- sunifu
- Date:
- Tue Mar 08 08:13:49 2011 +0000
- Revision:
- 0:83a5c5ca947f
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sunifu | 0:83a5c5ca947f | 1 | #include "mbed.h" |
sunifu | 0:83a5c5ca947f | 2 | #include "MyGPS.h" |
sunifu | 0:83a5c5ca947f | 3 | #include "TextLCD.h" |
sunifu | 0:83a5c5ca947f | 4 | #include "string.h" |
sunifu | 0:83a5c5ca947f | 5 | #include "SDFileSystem.h" |
sunifu | 0:83a5c5ca947f | 6 | |
sunifu | 0:83a5c5ca947f | 7 | TextLCD lcd(p24, p26, p27, p28, p29, p30) ; |
sunifu | 0:83a5c5ca947f | 8 | MyGPS gps(p9, p10); // tx, rx |
sunifu | 0:83a5c5ca947f | 9 | SDFileSystem sd(p5, p6, p7, p8, "sd1") ; |
sunifu | 0:83a5c5ca947f | 10 | DigitalOut led1(LED1); |
sunifu | 0:83a5c5ca947f | 11 | |
sunifu | 0:83a5c5ca947f | 12 | void writeLocation(void) ; |
sunifu | 0:83a5c5ca947f | 13 | void ledFlash(void); |
sunifu | 0:83a5c5ca947f | 14 | |
sunifu | 0:83a5c5ca947f | 15 | int main() { |
sunifu | 0:83a5c5ca947f | 16 | time_t oldTime = 0 ,nowTime = 0; |
sunifu | 0:83a5c5ca947f | 17 | char strTimeMsg[16]; |
sunifu | 0:83a5c5ca947f | 18 | time_t t_time; |
sunifu | 0:83a5c5ca947f | 19 | |
sunifu | 0:83a5c5ca947f | 20 | gps.setUpdateTime(10); |
sunifu | 0:83a5c5ca947f | 21 | lcd.cls(); |
sunifu | 0:83a5c5ca947f | 22 | |
sunifu | 0:83a5c5ca947f | 23 | lcd.locate(0,0); |
sunifu | 0:83a5c5ca947f | 24 | lcd.printf("Please Wait...."); |
sunifu | 0:83a5c5ca947f | 25 | gps.setTime(); |
sunifu | 0:83a5c5ca947f | 26 | |
sunifu | 0:83a5c5ca947f | 27 | t_time = gps.getTime() ; |
sunifu | 0:83a5c5ca947f | 28 | |
sunifu | 0:83a5c5ca947f | 29 | strftime(strTimeMsg,16,"%m/%d %H:%M:%S",localtime(&t_time)); |
sunifu | 0:83a5c5ca947f | 30 | lcd.locate(0,0); |
sunifu | 0:83a5c5ca947f | 31 | lcd.printf("%s",strTimeMsg); |
sunifu | 0:83a5c5ca947f | 32 | wait(2.0); |
sunifu | 0:83a5c5ca947f | 33 | |
sunifu | 0:83a5c5ca947f | 34 | while (1) { |
sunifu | 0:83a5c5ca947f | 35 | gps.sample(); |
sunifu | 0:83a5c5ca947f | 36 | lcd.cls(); |
sunifu | 0:83a5c5ca947f | 37 | if ( gps.getStatus() ==1 ){ |
sunifu | 0:83a5c5ca947f | 38 | lcd.locate(0,0); |
sunifu | 0:83a5c5ca947f | 39 | lcd.printf("lat:%10.6f %c",gps.getLatitude(),gps.getNS()); |
sunifu | 0:83a5c5ca947f | 40 | lcd.locate(0,1); |
sunifu | 0:83a5c5ca947f | 41 | lcd.printf("lon:%10.6f %c",gps.getLongitude(),gps.getEW()); |
sunifu | 0:83a5c5ca947f | 42 | |
sunifu | 0:83a5c5ca947f | 43 | nowTime = gps.getTime(); |
sunifu | 0:83a5c5ca947f | 44 | if( (oldTime + gps.getUpdateTime()) < nowTime ){ |
sunifu | 0:83a5c5ca947f | 45 | writeLocation(); |
sunifu | 0:83a5c5ca947f | 46 | oldTime = nowTime; |
sunifu | 0:83a5c5ca947f | 47 | } |
sunifu | 0:83a5c5ca947f | 48 | }else{ |
sunifu | 0:83a5c5ca947f | 49 | lcd.locate(0,1); |
sunifu | 0:83a5c5ca947f | 50 | lcd.printf("data not valid!"); |
sunifu | 0:83a5c5ca947f | 51 | } |
sunifu | 0:83a5c5ca947f | 52 | } |
sunifu | 0:83a5c5ca947f | 53 | } |
sunifu | 0:83a5c5ca947f | 54 | |
sunifu | 0:83a5c5ca947f | 55 | void writeLocation(void) |
sunifu | 0:83a5c5ca947f | 56 | { |
sunifu | 0:83a5c5ca947f | 57 | FILE *fp,*fp1; |
sunifu | 0:83a5c5ca947f | 58 | char strTimeMsg[32]; |
sunifu | 0:83a5c5ca947f | 59 | time_t t_time; |
sunifu | 0:83a5c5ca947f | 60 | |
sunifu | 0:83a5c5ca947f | 61 | if ( gps.getStatus() == 1 ){ |
sunifu | 0:83a5c5ca947f | 62 | if ( (fp = fopen("/sd1/gps.txt","a"))== NULL ) { |
sunifu | 0:83a5c5ca947f | 63 | lcd.cls(); |
sunifu | 0:83a5c5ca947f | 64 | lcd.locate(0,0); |
sunifu | 0:83a5c5ca947f | 65 | lcd.printf("gps Open Failed.") ; |
sunifu | 0:83a5c5ca947f | 66 | wait(0.5); |
sunifu | 0:83a5c5ca947f | 67 | }else{ |
sunifu | 0:83a5c5ca947f | 68 | t_time = gps.getTime() ; |
sunifu | 0:83a5c5ca947f | 69 | strftime(strTimeMsg,32,"%Y/%m/%d %H:%M:%S ",localtime(&t_time)); |
sunifu | 0:83a5c5ca947f | 70 | fprintf(fp,"%s",strTimeMsg); |
sunifu | 0:83a5c5ca947f | 71 | fprintf(fp,"Latitude:%f Longitude:%f\n",gps.getLatitude(),gps.getLongitude()); |
sunifu | 0:83a5c5ca947f | 72 | |
sunifu | 0:83a5c5ca947f | 73 | ledFlash(); |
sunifu | 0:83a5c5ca947f | 74 | fclose(fp); |
sunifu | 0:83a5c5ca947f | 75 | } |
sunifu | 0:83a5c5ca947f | 76 | |
sunifu | 0:83a5c5ca947f | 77 | if ( (fp1 = fopen("/sd1/NMEA.nme","a"))== NULL ) { |
sunifu | 0:83a5c5ca947f | 78 | lcd.cls(); |
sunifu | 0:83a5c5ca947f | 79 | lcd.locate(0,1); |
sunifu | 0:83a5c5ca947f | 80 | lcd.printf("NMEA Open Failed.") ; |
sunifu | 0:83a5c5ca947f | 81 | wait(0.5); |
sunifu | 0:83a5c5ca947f | 82 | }else{ |
sunifu | 0:83a5c5ca947f | 83 | fprintf(fp1,"%s\n",gps.getNMEA()); |
sunifu | 0:83a5c5ca947f | 84 | fclose(fp1); |
sunifu | 0:83a5c5ca947f | 85 | } |
sunifu | 0:83a5c5ca947f | 86 | } |
sunifu | 0:83a5c5ca947f | 87 | } |
sunifu | 0:83a5c5ca947f | 88 | |
sunifu | 0:83a5c5ca947f | 89 | void ledFlash(void) |
sunifu | 0:83a5c5ca947f | 90 | { |
sunifu | 0:83a5c5ca947f | 91 | led1=1; |
sunifu | 0:83a5c5ca947f | 92 | wait(0.3); |
sunifu | 0:83a5c5ca947f | 93 | led1=0; |
sunifu | 0:83a5c5ca947f | 94 | } |