CQ出版 Interface 2014年10月号のC027(MAX7-Q)GPSテスト記事のプログラム。 CQ publishing Interface 2014.10 issue, C027 GPS(MAX-7Q) test program.

Dependencies:   C027 C027_Support mbed

Committer:
ntaka206
Date:
Wed Jun 04 02:37:42 2014 +0000
Revision:
0:1ababa0d0c42
Child:
1:cecf9bdf045b
Initial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ntaka206 0:1ababa0d0c42 1 #include "mbed.h"
ntaka206 0:1ababa0d0c42 2 #include "GPS.h"
ntaka206 0:1ababa0d0c42 3 #include "MDM.h"
ntaka206 0:1ababa0d0c42 4
ntaka206 0:1ababa0d0c42 5
ntaka206 0:1ababa0d0c42 6 //----------------------------------------------------------------------
ntaka206 0:1ababa0d0c42 7 /* This example was tested on C027-U20 and C027-G35 with the on board modem.
ntaka206 0:1ababa0d0c42 8
ntaka206 0:1ababa0d0c42 9 Additionally it was tested with a shield where the SARA-G350 RX/TX/PWRON
ntaka206 0:1ababa0d0c42 10 is connected to D0/D1/D4 and the GPS SCL/SDA is connected D15/D15. In this
ntaka206 0:1ababa0d0c42 11 configuration the following platforms were tested (it is likely that others
ntaka206 0:1ababa0d0c42 12 will work as well)
ntaka206 0:1ababa0d0c42 13 - U-BLOX: C027-XX.
ntaka206 0:1ababa0d0c42 14 - NXP: LPC1549v2
ntaka206 0:1ababa0d0c42 15 - Freescale: FRDM-KL25Z, FRDM-KL46Z
ntaka206 0:1ababa0d0c42 16 - STM: NUCLEO-F401RE, NUCLEO-F030R8
ntaka206 0:1ababa0d0c42 17 */
ntaka206 0:1ababa0d0c42 18 #if defined(TARGET_UBLOX_C027)
ntaka206 0:1ababa0d0c42 19 #define C027_USEONBOARD // remove this if you have the GSM/GPS shield mounted
ntaka206 0:1ababa0d0c42 20 #endif
ntaka206 0:1ababa0d0c42 21
ntaka206 0:1ababa0d0c42 22 #ifdef C027_USEONBOARD
ntaka206 0:1ababa0d0c42 23 #include "C027.h"
ntaka206 0:1ababa0d0c42 24 C027 c027;
ntaka206 0:1ababa0d0c42 25 #endif
ntaka206 0:1ababa0d0c42 26
ntaka206 0:1ababa0d0c42 27 // no tracing if serial is shared with the VCP
ntaka206 0:1ababa0d0c42 28 #define DOTRACE ((USBRX!=MDMRXD)&&(USBTX!=MDMTXD))
ntaka206 0:1ababa0d0c42 29 #define TRACE (!DOTRACE)?:printf
ntaka206 0:1ababa0d0c42 30
ntaka206 0:1ababa0d0c42 31 int main(void)
ntaka206 0:1ababa0d0c42 32 {
ntaka206 0:1ababa0d0c42 33 int ret;
ntaka206 0:1ababa0d0c42 34 char buf[2048] = "";
ntaka206 0:1ababa0d0c42 35
ntaka206 0:1ababa0d0c42 36 // only trace if the serial is different from our modem port
ntaka206 0:1ababa0d0c42 37 if (DOTRACE) {
ntaka206 0:1ababa0d0c42 38 Serial pc(USBTX,USBRX);
ntaka206 0:1ababa0d0c42 39 pc.baud(115200);
ntaka206 0:1ababa0d0c42 40 }
ntaka206 0:1ababa0d0c42 41
ntaka206 0:1ababa0d0c42 42 wait_ms(1000);
ntaka206 0:1ababa0d0c42 43
ntaka206 0:1ababa0d0c42 44 TRACE("GSM/GPS Support Example\r\n");
ntaka206 0:1ababa0d0c42 45
ntaka206 0:1ababa0d0c42 46 // turn on the supplies of the Modem and the GPS
ntaka206 0:1ababa0d0c42 47 c027.mdmPower(false);
ntaka206 0:1ababa0d0c42 48 c027.gpsPower(true);
ntaka206 0:1ababa0d0c42 49 wait(2);
ntaka206 0:1ababa0d0c42 50
ntaka206 0:1ababa0d0c42 51 // Create the GPS object
ntaka206 0:1ababa0d0c42 52 #if GPSADR // use GPSI2C class
ntaka206 0:1ababa0d0c42 53 GPSI2C gps(GPSSDA,GPSSCL,GPSADR);
ntaka206 0:1ababa0d0c42 54 #elif GPSBAUD // or GPSSerial class
ntaka206 0:1ababa0d0c42 55 GPSSerial gps(GPSTXD,GPSRXD,GPSBAUD);
ntaka206 0:1ababa0d0c42 56 #else
ntaka206 0:1ababa0d0c42 57 #warning "please define the pins for the GPS"
ntaka206 0:1ababa0d0c42 58 #endif
ntaka206 0:1ababa0d0c42 59
ntaka206 0:1ababa0d0c42 60 // open the PC serial port and (use the same baudrate)
ntaka206 0:1ababa0d0c42 61 Serial pc2(P4_28, P4_29);
ntaka206 0:1ababa0d0c42 62 pc2.baud(9600);
ntaka206 0:1ababa0d0c42 63
ntaka206 0:1ababa0d0c42 64 TRACE("Checking GPS\r\n");
ntaka206 0:1ababa0d0c42 65 // char link[128] = "";
ntaka206 0:1ababa0d0c42 66 // unsigned int i = 0xFFFFFFFF;
ntaka206 0:1ababa0d0c42 67 const int wait = 100;
ntaka206 0:1ababa0d0c42 68 bool abort = false;
ntaka206 0:1ababa0d0c42 69 //DigitalOut led(LED1);
ntaka206 0:1ababa0d0c42 70 double hdop=99.99;
ntaka206 0:1ababa0d0c42 71 while (!abort) {
ntaka206 0:1ababa0d0c42 72 // led = !led;
ntaka206 0:1ababa0d0c42 73 while ((ret = gps.getMessage(buf, sizeof(buf))) > 0)
ntaka206 0:1ababa0d0c42 74 {
ntaka206 0:1ababa0d0c42 75 int len = LENGTH(ret);
ntaka206 0:1ababa0d0c42 76 // TRACE("NMEA: %.*s\r\n", len-2, buf);
ntaka206 0:1ababa0d0c42 77 // pc2.printf("NMEA: %.*s\r\n", len-2, buf);
ntaka206 0:1ababa0d0c42 78 #if 1
ntaka206 0:1ababa0d0c42 79 if ((PROTOCOL(ret) == GPSParser::NMEA) && (len > 6))
ntaka206 0:1ababa0d0c42 80 {
ntaka206 0:1ababa0d0c42 81 if (!strncmp("$GPGLL", buf, 6))
ntaka206 0:1ababa0d0c42 82 {
ntaka206 0:1ababa0d0c42 83 double la = 0, lo = 0;
ntaka206 0:1ababa0d0c42 84 double utc;
ntaka206 0:1ababa0d0c42 85 char ch;
ntaka206 0:1ababa0d0c42 86 if (gps.getNmeaAngle(1,buf,len,la) &&
ntaka206 0:1ababa0d0c42 87 gps.getNmeaAngle(3,buf,len,lo) &&
ntaka206 0:1ababa0d0c42 88 gps.getNmeaItem(5,buf,len,utc) &&
ntaka206 0:1ababa0d0c42 89 gps.getNmeaItem(6,buf,len,ch) && ch == 'A')
ntaka206 0:1ababa0d0c42 90 {
ntaka206 0:1ababa0d0c42 91 // TRACE("GPS Location: %.5f %.5f\r\n", la, lo);
ntaka206 0:1ababa0d0c42 92 TRACE("%06d,%.6f,%.6f\r\n", (long)utc, la, lo);
ntaka206 0:1ababa0d0c42 93 pc2.printf("%06d,%.6f,%.6f,%.2f\r\n", (long)utc, la, lo, hdop);
ntaka206 0:1ababa0d0c42 94 // sprintf(link, "I am here!\n"
ntaka206 0:1ababa0d0c42 95 // "https://maps.google.com/?q=%.5f,%.5f", la, lo);
ntaka206 0:1ababa0d0c42 96 }
ntaka206 0:1ababa0d0c42 97 }
ntaka206 0:1ababa0d0c42 98 if (!strncmp("$GPGSA", buf, 6))
ntaka206 0:1ababa0d0c42 99 {
ntaka206 0:1ababa0d0c42 100 gps.getNmeaItem(16,buf,len,hdop);
ntaka206 0:1ababa0d0c42 101 }
ntaka206 0:1ababa0d0c42 102 }
ntaka206 0:1ababa0d0c42 103
ntaka206 0:1ababa0d0c42 104 #endif
ntaka206 0:1ababa0d0c42 105 #if 0
ntaka206 0:1ababa0d0c42 106 if ((PROTOCOL(ret) == GPSParser::NMEA) && (len > 6) && !strncmp("$GPGGA", buf, 6))
ntaka206 0:1ababa0d0c42 107 {
ntaka206 0:1ababa0d0c42 108 double la = 0, lo = 0;
ntaka206 0:1ababa0d0c42 109 double utc, alt;
ntaka206 0:1ababa0d0c42 110 char ch;
ntaka206 0:1ababa0d0c42 111 if (gps.getNmeaAngle(2,buf,len,la) &&
ntaka206 0:1ababa0d0c42 112 gps.getNmeaAngle(4,buf,len,lo) &&
ntaka206 0:1ababa0d0c42 113 gps.getNmeaItem(11,buf,len,alt) &&
ntaka206 0:1ababa0d0c42 114 gps.getNmeaItem(1,buf,len,utc) &&
ntaka206 0:1ababa0d0c42 115 gps.getNmeaItem(6,buf,len,ch) && ch == 'A')
ntaka206 0:1ababa0d0c42 116 {
ntaka206 0:1ababa0d0c42 117 // TRACE("GPS Location: %.5f %.5f\r\n", la, lo);
ntaka206 0:1ababa0d0c42 118 TRACE("%06d,%.6f,%.6f,%.2f\r\n", (long)utc, la, lo, alt);
ntaka206 0:1ababa0d0c42 119 pc2.printf("%06d,%.6f,%.6f,%.2f\r\n", (long)utc, la, lo, alt);
ntaka206 0:1ababa0d0c42 120 // sprintf(link, "I am here!\n"
ntaka206 0:1ababa0d0c42 121 // "https://maps.google.com/?q=%.5f,%.5f", la, lo);
ntaka206 0:1ababa0d0c42 122 }
ntaka206 0:1ababa0d0c42 123 }
ntaka206 0:1ababa0d0c42 124 #endif
ntaka206 0:1ababa0d0c42 125 }
ntaka206 0:1ababa0d0c42 126 wait_ms(wait);
ntaka206 0:1ababa0d0c42 127 }
ntaka206 0:1ababa0d0c42 128 gps.powerOff();
ntaka206 0:1ababa0d0c42 129 TRACE("Shutdown\r\n");
ntaka206 0:1ababa0d0c42 130 // now it is safe to switch LDOs off
ntaka206 0:1ababa0d0c42 131 c027.gpsPower(false);
ntaka206 0:1ababa0d0c42 132 return 0;
ntaka206 0:1ababa0d0c42 133 }
ntaka206 0:1ababa0d0c42 134