kk
Dependencies: GPS TextLCD mbed
Fork of GPS_classroom by
main.cpp@6:aa79fcaca263, 2015-06-02 (annotated)
- Committer:
- tomece11
- Date:
- Tue Jun 02 11:04:02 2015 +0000
- Revision:
- 6:aa79fcaca263
- Parent:
- 5:27468969d61f
??????????
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" |
tomece11 | 6:aa79fcaca263 | 4 | #define BUFFER_SIZE 100 |
tomece11 | 6:aa79fcaca263 | 5 | |
narongdet | 0:dfd102afb417 | 6 | GPS gps(PA_11,PA_12); |
narongdet | 0:dfd102afb417 | 7 | I2C i2c_lcd(D14,D15); |
narongdet | 0:dfd102afb417 | 8 | TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD16x2); |
fookies | 2:8c0dcaa10883 | 9 | Serial esp(D8,D2); |
tomece11 | 6:aa79fcaca263 | 10 | DigitalIn bt(D5,PullUp); |
tomece11 | 6:aa79fcaca263 | 11 | Serial pc(USBTX, USBRX); |
tomece11 | 6:aa79fcaca263 | 12 | char message[400]; |
fookies | 4:41de6c2673f3 | 13 | |
fookies | 2:8c0dcaa10883 | 14 | uint8_t buffer[0x100]; |
fookies | 2:8c0dcaa10883 | 15 | uint16_t buffer_head; |
fookies | 2:8c0dcaa10883 | 16 | uint16_t buffer_tail; |
tomece11 | 6:aa79fcaca263 | 17 | char s1[100]; |
tomece11 | 6:aa79fcaca263 | 18 | |
fookies | 2:8c0dcaa10883 | 19 | |
fookies | 2:8c0dcaa10883 | 20 | void rxcallback(void) { |
fookies | 2:8c0dcaa10883 | 21 | uint8_t chr; |
fookies | 2:8c0dcaa10883 | 22 | while (esp.readable()) { |
fookies | 2:8c0dcaa10883 | 23 | chr = esp.getc(); |
fookies | 2:8c0dcaa10883 | 24 | pc.putc(chr); |
fookies | 2:8c0dcaa10883 | 25 | buffer[buffer_head++] = chr; |
fookies | 2:8c0dcaa10883 | 26 | if (buffer_head == BUFFER_SIZE) |
fookies | 2:8c0dcaa10883 | 27 | { |
fookies | 2:8c0dcaa10883 | 28 | buffer_head = 0; |
fookies | 2:8c0dcaa10883 | 29 | } |
fookies | 2:8c0dcaa10883 | 30 | } |
fookies | 2:8c0dcaa10883 | 31 | } |
fookies | 2:8c0dcaa10883 | 32 | void flush_fifo(void) |
fookies | 2:8c0dcaa10883 | 33 | { |
fookies | 2:8c0dcaa10883 | 34 | while (esp.readable()) |
fookies | 2:8c0dcaa10883 | 35 | { |
fookies | 2:8c0dcaa10883 | 36 | (void)esp.getc(); |
fookies | 2:8c0dcaa10883 | 37 | } |
fookies | 2:8c0dcaa10883 | 38 | buffer_head = 0; |
fookies | 2:8c0dcaa10883 | 39 | buffer_tail = 0; |
fookies | 2:8c0dcaa10883 | 40 | } |
fookies | 2:8c0dcaa10883 | 41 | int find_response(const char *resp) { |
fookies | 2:8c0dcaa10883 | 42 | /* Give some delay for buffer to fill up */ |
fookies | 2:8c0dcaa10883 | 43 | wait_ms(10); |
fookies | 2:8c0dcaa10883 | 44 | int timeout = 0xFFFFFF; |
fookies | 2:8c0dcaa10883 | 45 | int len = strlen(resp); |
fookies | 2:8c0dcaa10883 | 46 | do |
fookies | 2:8c0dcaa10883 | 47 | { |
fookies | 2:8c0dcaa10883 | 48 | if (buffer_head > (buffer_tail + len)) |
fookies | 2:8c0dcaa10883 | 49 | { |
fookies | 2:8c0dcaa10883 | 50 | if (!memcmp(&buffer[buffer_tail], resp, len)) |
fookies | 2:8c0dcaa10883 | 51 | { |
fookies | 2:8c0dcaa10883 | 52 | flush_fifo(); |
fookies | 2:8c0dcaa10883 | 53 | return 0; |
fookies | 2:8c0dcaa10883 | 54 | } |
fookies | 2:8c0dcaa10883 | 55 | buffer_tail++; |
fookies | 2:8c0dcaa10883 | 56 | } |
fookies | 2:8c0dcaa10883 | 57 | }while(timeout--); |
fookies | 2:8c0dcaa10883 | 58 | flush_fifo(); |
fookies | 2:8c0dcaa10883 | 59 | return 1; |
fookies | 2:8c0dcaa10883 | 60 | } |
fookies | 2:8c0dcaa10883 | 61 | |
narongdet | 0:dfd102afb417 | 62 | int main() |
narongdet | 0:dfd102afb417 | 63 | { |
narongdet | 0:dfd102afb417 | 64 | lcd.setMode(TextLCD::DispOn); |
narongdet | 0:dfd102afb417 | 65 | lcd.setBacklight(TextLCD::LightOff); |
narongdet | 0:dfd102afb417 | 66 | lcd.setCursor(TextLCD::CurOff_BlkOff); |
fookies | 2:8c0dcaa10883 | 67 | esp.attach(&rxcallback, Serial::RxIrq); |
narongdet | 0:dfd102afb417 | 68 | lcd.setAddress(0,0); |
narongdet | 0:dfd102afb417 | 69 | lcd.printf("Initial GPS...\n"); |
fookies | 2:8c0dcaa10883 | 70 | esp.printf("AT+RST\r\n"); |
tomece11 | 6:aa79fcaca263 | 71 | //lcd.printf("1\n"); |
fookies | 3:37086b58ab05 | 72 | MBED_ASSERT(find_response("OK") == 0); |
tomece11 | 6:aa79fcaca263 | 73 | //lcd.printf("2\n"); |
fookies | 3:37086b58ab05 | 74 | esp.printf("AT+CWMODE=1\r\n"); |
tomece11 | 6:aa79fcaca263 | 75 | //MBED_ASSERT(find_response("OK") == 0); |
tomece11 | 6:aa79fcaca263 | 76 | //lcd.printf("3\n"); |
fookies | 3:37086b58ab05 | 77 | esp.printf("AT+CWJAP=\"%s\",\"%s\"\r\n","Fookies-One(m8)","12312344"); |
fookies | 3:37086b58ab05 | 78 | wait(5); |
tomece11 | 6:aa79fcaca263 | 79 | //MBED_ASSERT(find_response("OK") == 0); |
tomece11 | 6:aa79fcaca263 | 80 | //lcd.printf("4\n"); |
fookies | 3:37086b58ab05 | 81 | esp.printf("AT+CIPMUX=0\r\n"); |
tomece11 | 6:aa79fcaca263 | 82 | //MBED_ASSERT(find_response("OK") == 0); |
tomece11 | 6:aa79fcaca263 | 83 | //lcd.printf("5\n"); |
narongdet | 0:dfd102afb417 | 84 | while(1){ |
narongdet | 0:dfd102afb417 | 85 | if(gps.sample()) |
narongdet | 0:dfd102afb417 | 86 | { |
tomece11 | 6:aa79fcaca263 | 87 | lcd.cls(); |
tomece11 | 6:aa79fcaca263 | 88 | lcd.printf("LAT:%6.3f\nLON:%7.3f",gps.latitude,gps.longitude); |
narongdet | 0:dfd102afb417 | 89 | } |
narongdet | 0:dfd102afb417 | 90 | wait(0.5); |
tomece11 | 6:aa79fcaca263 | 91 | if(bt==0) |
fookies | 3:37086b58ab05 | 92 | { |
tomece11 | 6:aa79fcaca263 | 93 | lcd.cls(); |
tomece11 | 6:aa79fcaca263 | 94 | lcd.printf("Sending to twitter"); |
tomece11 | 6:aa79fcaca263 | 95 | |
tomece11 | 6:aa79fcaca263 | 96 | sprintf(s1,"api_key=GRMKGK1CTUU7L5RD&status=LAT:%.3f,LON:%.3f",gps.latitude,gps.longitude); |
tomece11 | 6:aa79fcaca263 | 97 | sprintf(message,"POST /apps/thingtweet/1/statuses/update HTTP/1.1\nHost: api.thingspeak.com\nConnection: close\nContent-Type: application/x-www-form-urlencoded\nContent-Length: %d\n\n%s",strlen(s1),s1); |
fookies | 3:37086b58ab05 | 98 | esp.printf("AT+CIPSTART=\"TCP\",\"%s\",%s\r\n","184.106.153.149","80"); |
tomece11 | 6:aa79fcaca263 | 99 | //lcd.cls(); |
tomece11 | 6:aa79fcaca263 | 100 | //lcd.printf("AT+CIPSTART=\"TCP\",\"%s\",%s\r\n","184.106.153.149","80"); |
tomece11 | 6:aa79fcaca263 | 101 | wait(2); |
tomece11 | 6:aa79fcaca263 | 102 | esp.printf("AT+CIPSEND=%d\r\n",strlen(message)); |
tomece11 | 6:aa79fcaca263 | 103 | //lcd.cls(); |
tomece11 | 6:aa79fcaca263 | 104 | //lcd.printf("AT+CIPSEND=%d\r\n",strlen(message)); |
tomece11 | 6:aa79fcaca263 | 105 | wait(2); |
fookies | 3:37086b58ab05 | 106 | if(find_response(">") == 0) |
fookies | 3:37086b58ab05 | 107 | { |
tomece11 | 6:aa79fcaca263 | 108 | //lcd.cls(); |
tomece11 | 6:aa79fcaca263 | 109 | //lcd.printf(message); |
fookies | 3:37086b58ab05 | 110 | esp.printf(message); |
fookies | 3:37086b58ab05 | 111 | } |
fookies | 3:37086b58ab05 | 112 | wait(2); |
fookies | 3:37086b58ab05 | 113 | flush_fifo(); |
fookies | 3:37086b58ab05 | 114 | esp.printf("AT+CIPCLOSE\r\n"); |
fookies | 3:37086b58ab05 | 115 | wait(0.5); |
fookies | 3:37086b58ab05 | 116 | flush_fifo(); |
tomece11 | 6:aa79fcaca263 | 117 | lcd.cls(); |
tomece11 | 6:aa79fcaca263 | 118 | lcd.printf("Send Completed\n"); |
fookies | 3:37086b58ab05 | 119 | } |
narongdet | 0:dfd102afb417 | 120 | } |
narongdet | 0:dfd102afb417 | 121 | } |
narongdet | 0:dfd102afb417 | 122 |