test
Dependencies: GPS TextLCD mbed
Fork of GPS_classroom by
main.cpp@2:8c0dcaa10883, 2015-05-23 (annotated)
- Committer:
- fookies
- Date:
- Sat May 23 04:27:29 2015 +0000
- Revision:
- 2:8c0dcaa10883
- Parent:
- 1:326b1e0bbe56
- Child:
- 3:37086b58ab05
gg;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
narongdet | 0:dfd102afb417 | 1 | #include "mbed.h" |
narongdet | 0:dfd102afb417 | 2 | #include "GPS.h" |
narongdet | 0:dfd102afb417 | 3 | #include "TextLCD.h" |
narongdet | 0:dfd102afb417 | 4 | GPS gps(PA_11,PA_12); |
narongdet | 0:dfd102afb417 | 5 | I2C i2c_lcd(D14,D15); |
narongdet | 0:dfd102afb417 | 6 | TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD16x2); |
fookies | 2:8c0dcaa10883 | 7 | Serial esp(D8,D2); |
fookies | 2:8c0dcaa10883 | 8 | uint8_t buffer[0x100]; |
fookies | 2:8c0dcaa10883 | 9 | uint16_t buffer_head; |
fookies | 2:8c0dcaa10883 | 10 | uint16_t buffer_tail; |
fookies | 2:8c0dcaa10883 | 11 | |
fookies | 2:8c0dcaa10883 | 12 | void rxcallback(void) { |
fookies | 2:8c0dcaa10883 | 13 | uint8_t chr; |
fookies | 2:8c0dcaa10883 | 14 | while (esp.readable()) { |
fookies | 2:8c0dcaa10883 | 15 | chr = esp.getc(); |
fookies | 2:8c0dcaa10883 | 16 | pc.putc(chr); |
fookies | 2:8c0dcaa10883 | 17 | buffer[buffer_head++] = chr; |
fookies | 2:8c0dcaa10883 | 18 | if (buffer_head == BUFFER_SIZE) |
fookies | 2:8c0dcaa10883 | 19 | { |
fookies | 2:8c0dcaa10883 | 20 | buffer_head = 0; |
fookies | 2:8c0dcaa10883 | 21 | } |
fookies | 2:8c0dcaa10883 | 22 | } |
fookies | 2:8c0dcaa10883 | 23 | } |
fookies | 2:8c0dcaa10883 | 24 | void flush_fifo(void) |
fookies | 2:8c0dcaa10883 | 25 | { |
fookies | 2:8c0dcaa10883 | 26 | while (esp.readable()) |
fookies | 2:8c0dcaa10883 | 27 | { |
fookies | 2:8c0dcaa10883 | 28 | (void)esp.getc(); |
fookies | 2:8c0dcaa10883 | 29 | } |
fookies | 2:8c0dcaa10883 | 30 | buffer_head = 0; |
fookies | 2:8c0dcaa10883 | 31 | buffer_tail = 0; |
fookies | 2:8c0dcaa10883 | 32 | } |
fookies | 2:8c0dcaa10883 | 33 | int find_response(const char *resp) { |
fookies | 2:8c0dcaa10883 | 34 | /* Give some delay for buffer to fill up */ |
fookies | 2:8c0dcaa10883 | 35 | wait_ms(10); |
fookies | 2:8c0dcaa10883 | 36 | int timeout = 0xFFFFFF; |
fookies | 2:8c0dcaa10883 | 37 | int len = strlen(resp); |
fookies | 2:8c0dcaa10883 | 38 | do |
fookies | 2:8c0dcaa10883 | 39 | { |
fookies | 2:8c0dcaa10883 | 40 | if (buffer_head > (buffer_tail + len)) |
fookies | 2:8c0dcaa10883 | 41 | { |
fookies | 2:8c0dcaa10883 | 42 | if (!memcmp(&buffer[buffer_tail], resp, len)) |
fookies | 2:8c0dcaa10883 | 43 | { |
fookies | 2:8c0dcaa10883 | 44 | flush_fifo(); |
fookies | 2:8c0dcaa10883 | 45 | return 0; |
fookies | 2:8c0dcaa10883 | 46 | } |
fookies | 2:8c0dcaa10883 | 47 | buffer_tail++; |
fookies | 2:8c0dcaa10883 | 48 | } |
fookies | 2:8c0dcaa10883 | 49 | }while(timeout--); |
fookies | 2:8c0dcaa10883 | 50 | flush_fifo(); |
fookies | 2:8c0dcaa10883 | 51 | return 1; |
fookies | 2:8c0dcaa10883 | 52 | } |
fookies | 2:8c0dcaa10883 | 53 | |
narongdet | 0:dfd102afb417 | 54 | int main() |
narongdet | 0:dfd102afb417 | 55 | { |
narongdet | 0:dfd102afb417 | 56 | lcd.setMode(TextLCD::DispOn); |
narongdet | 0:dfd102afb417 | 57 | lcd.setBacklight(TextLCD::LightOff); |
narongdet | 0:dfd102afb417 | 58 | lcd.setCursor(TextLCD::CurOff_BlkOff); |
fookies | 2:8c0dcaa10883 | 59 | esp.attach(&rxcallback, Serial::RxIrq); |
narongdet | 0:dfd102afb417 | 60 | lcd.setAddress(0,0); |
narongdet | 0:dfd102afb417 | 61 | lcd.printf("Initial GPS...\n"); |
fookies | 2:8c0dcaa10883 | 62 | esp.printf("AT+RST\r\n"); |
fookies | 2:8c0dcaa10883 | 63 | |
narongdet | 0:dfd102afb417 | 64 | while(1){ |
narongdet | 0:dfd102afb417 | 65 | if(gps.sample()) |
narongdet | 0:dfd102afb417 | 66 | { |
narongdet | 0:dfd102afb417 | 67 | lcd.setAddress(0,1); |
narongdet | 0:dfd102afb417 | 68 | lcd.printf("%6.3f,%7.3f",gps.latitude,gps.longitude); |
narongdet | 0:dfd102afb417 | 69 | } |
narongdet | 0:dfd102afb417 | 70 | wait(0.5); |
narongdet | 0:dfd102afb417 | 71 | } |
narongdet | 0:dfd102afb417 | 72 | } |
narongdet | 0:dfd102afb417 | 73 |