Generation 2 of the Harp project
Dependencies: Servo TMP36 GZ chan_fatfs_sd buffered-serial1 nmea_parser watchdog mbed-rtos mbed
main.cpp@8:13360ec824a7, 2012-12-07 (annotated)
- Committer:
- tylerjw
- Date:
- Fri Dec 07 20:42:48 2012 +0000
- Revision:
- 8:13360ec824a7
- Parent:
- 7:d8ecabe16c9e
- Child:
- 9:4debfbc1fb3e
working serial out, interrupt with semaphore
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tylerjw | 0:ce5f06c3895f | 1 | #include "mbed.h" |
tylerjw | 7:d8ecabe16c9e | 2 | #include "rtos.h" |
tylerjw | 8:13360ec824a7 | 3 | |
tylerjw | 7:d8ecabe16c9e | 4 | #include "MODSERIAL.h" |
tylerjw | 0:ce5f06c3895f | 5 | |
tylerjw | 0:ce5f06c3895f | 6 | Serial pc(USBTX, USBRX); |
tylerjw | 7:d8ecabe16c9e | 7 | |
tylerjw | 7:d8ecabe16c9e | 8 | float test_lat = 39.943039; |
tylerjw | 7:d8ecabe16c9e | 9 | float test_long = -104.978226; |
tylerjw | 7:d8ecabe16c9e | 10 | |
tylerjw | 7:d8ecabe16c9e | 11 | // Connect the TX of the GPS module to p10 RX input |
tylerjw | 7:d8ecabe16c9e | 12 | MODSERIAL gps(NC, p14); |
tylerjw | 7:d8ecabe16c9e | 13 | |
tylerjw | 7:d8ecabe16c9e | 14 | DigitalOut irq_led(LED1); |
tylerjw | 7:d8ecabe16c9e | 15 | |
tylerjw | 7:d8ecabe16c9e | 16 | bool newline_detected = false; |
tylerjw | 8:13360ec824a7 | 17 | Semaphore newlines(0); |
tylerjw | 0:ce5f06c3895f | 18 | |
tylerjw | 7:d8ecabe16c9e | 19 | // Called everytime a new character goes into |
tylerjw | 7:d8ecabe16c9e | 20 | // the RX buffer. Test that character for \n |
tylerjw | 7:d8ecabe16c9e | 21 | // Note, rxGetLastChar() gets the last char that |
tylerjw | 7:d8ecabe16c9e | 22 | // we received but it does NOT remove it from |
tylerjw | 7:d8ecabe16c9e | 23 | // the RX buffer. |
tylerjw | 7:d8ecabe16c9e | 24 | void rxCallback(MODSERIAL_IRQ_INFO *q) |
tylerjw | 7:d8ecabe16c9e | 25 | { |
tylerjw | 7:d8ecabe16c9e | 26 | newline_detected = true; |
tylerjw | 8:13360ec824a7 | 27 | //newlines++; |
tylerjw | 8:13360ec824a7 | 28 | newlines.release(); |
tylerjw | 7:d8ecabe16c9e | 29 | irq_led = !irq_led; |
tylerjw | 7:d8ecabe16c9e | 30 | } |
tylerjw | 7:d8ecabe16c9e | 31 | |
tylerjw | 7:d8ecabe16c9e | 32 | void gps_thread(void const *args) |
tylerjw | 7:d8ecabe16c9e | 33 | { |
tylerjw | 7:d8ecabe16c9e | 34 | char buffer[512]; |
tylerjw | 8:13360ec824a7 | 35 | Timer t; |
tylerjw | 8:13360ec824a7 | 36 | t.start(); |
tylerjw | 8:13360ec824a7 | 37 | float start; |
tylerjw | 8:13360ec824a7 | 38 | int number_lines = 0; |
tylerjw | 8:13360ec824a7 | 39 | float average_wait = 0.0; |
tylerjw | 8:13360ec824a7 | 40 | float wait[10]; |
tylerjw | 7:d8ecabe16c9e | 41 | |
tylerjw | 7:d8ecabe16c9e | 42 | gps.baud(4800); |
tylerjw | 6:204487243310 | 43 | pc.baud(9600); |
tylerjw | 7:d8ecabe16c9e | 44 | gps.autoDetectChar('\n'); |
tylerjw | 7:d8ecabe16c9e | 45 | gps.attach(&rxCallback, MODSERIAL::RxAutoDetect); |
tylerjw | 7:d8ecabe16c9e | 46 | |
tylerjw | 7:d8ecabe16c9e | 47 | while(true) { |
tylerjw | 7:d8ecabe16c9e | 48 | // Wait here until we detect the \n going into the buffer. |
tylerjw | 8:13360ec824a7 | 49 | //if(newlines == 0) |
tylerjw | 8:13360ec824a7 | 50 | //pc.puts("Waiting... \r\n"); |
tylerjw | 8:13360ec824a7 | 51 | //while (!newline_detected) ; // 100ms wait |
tylerjw | 8:13360ec824a7 | 52 | newlines.wait(); // wait for next line |
tylerjw | 8:13360ec824a7 | 53 | //pc.printf("%f\r\n",t.read()); |
tylerjw | 8:13360ec824a7 | 54 | //if(newlines > 1) |
tylerjw | 8:13360ec824a7 | 55 | //pc.printf("Lines in buffer: %d\r\n",newlines); |
tylerjw | 7:d8ecabe16c9e | 56 | // When we get here the RX buffer now contains a NMEA sentence. |
tylerjw | 7:d8ecabe16c9e | 57 | // ... |
tylerjw | 7:d8ecabe16c9e | 58 | memset(buffer, 0, 512); |
tylerjw | 7:d8ecabe16c9e | 59 | gps.move(buffer, 512); |
tylerjw | 7:d8ecabe16c9e | 60 | pc.puts(buffer); |
tylerjw | 8:13360ec824a7 | 61 | //newlines--; |
tylerjw | 0:ce5f06c3895f | 62 | } |
tylerjw | 7:d8ecabe16c9e | 63 | |
tylerjw | 7:d8ecabe16c9e | 64 | } |
tylerjw | 7:d8ecabe16c9e | 65 | |
tylerjw | 7:d8ecabe16c9e | 66 | |
tylerjw | 7:d8ecabe16c9e | 67 | int main() |
tylerjw | 7:d8ecabe16c9e | 68 | { |
tylerjw | 8:13360ec824a7 | 69 | Thread thread(gps_thread, NULL, osPriorityRealtime); |
tylerjw | 7:d8ecabe16c9e | 70 | |
tylerjw | 7:d8ecabe16c9e | 71 | while(true); |
tylerjw | 0:ce5f06c3895f | 72 | } |