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
main.cpp@0:1ababa0d0c42, 2014-06-04 (annotated)
- Committer:
- ntaka206
- Date:
- Wed Jun 04 02:37:42 2014 +0000
- Revision:
- 0:1ababa0d0c42
- Child:
- 1:cecf9bdf045b
Initial
Who changed what in which revision?
User | Revision | Line number | New 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 |