Generation 3 of the Harp project
Dependencies: Servo TMP36 GZ buffered-serial1 chan_fatfs_sd nmea_parser watchdog mbed-rtos mbed
Fork of HARP2 by
main.cpp@7:d8ecabe16c9e, 2012-12-07 (annotated)
- Committer:
- tylerjw
- Date:
- Fri Dec 07 19:19:00 2012 +0000
- Revision:
- 7:d8ecabe16c9e
- Parent:
- 6:204487243310
- Child:
- 8:13360ec824a7
rtos, MODSERIAL implementation demo
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 | 7:d8ecabe16c9e | 3 | #include "MODSERIAL.h" |
tylerjw | 0:ce5f06c3895f | 4 | |
tylerjw | 0:ce5f06c3895f | 5 | Serial pc(USBTX, USBRX); |
tylerjw | 7:d8ecabe16c9e | 6 | |
tylerjw | 7:d8ecabe16c9e | 7 | float test_lat = 39.943039; |
tylerjw | 7:d8ecabe16c9e | 8 | float test_long = -104.978226; |
tylerjw | 7:d8ecabe16c9e | 9 | |
tylerjw | 7:d8ecabe16c9e | 10 | // Connect the TX of the GPS module to p10 RX input |
tylerjw | 7:d8ecabe16c9e | 11 | MODSERIAL gps(NC, p14); |
tylerjw | 7:d8ecabe16c9e | 12 | |
tylerjw | 7:d8ecabe16c9e | 13 | DigitalOut irq_led(LED1); |
tylerjw | 7:d8ecabe16c9e | 14 | |
tylerjw | 7:d8ecabe16c9e | 15 | bool newline_detected = false; |
tylerjw | 0:ce5f06c3895f | 16 | |
tylerjw | 7:d8ecabe16c9e | 17 | // Called everytime a new character goes into |
tylerjw | 7:d8ecabe16c9e | 18 | // the RX buffer. Test that character for \n |
tylerjw | 7:d8ecabe16c9e | 19 | // Note, rxGetLastChar() gets the last char that |
tylerjw | 7:d8ecabe16c9e | 20 | // we received but it does NOT remove it from |
tylerjw | 7:d8ecabe16c9e | 21 | // the RX buffer. |
tylerjw | 7:d8ecabe16c9e | 22 | void rxCallback(MODSERIAL_IRQ_INFO *q) |
tylerjw | 7:d8ecabe16c9e | 23 | { |
tylerjw | 7:d8ecabe16c9e | 24 | newline_detected = true; |
tylerjw | 7:d8ecabe16c9e | 25 | irq_led = !irq_led; |
tylerjw | 7:d8ecabe16c9e | 26 | } |
tylerjw | 7:d8ecabe16c9e | 27 | |
tylerjw | 7:d8ecabe16c9e | 28 | void gps_thread(void const *args) |
tylerjw | 7:d8ecabe16c9e | 29 | { |
tylerjw | 7:d8ecabe16c9e | 30 | char buffer[512]; |
tylerjw | 7:d8ecabe16c9e | 31 | |
tylerjw | 7:d8ecabe16c9e | 32 | gps.baud(4800); |
tylerjw | 6:204487243310 | 33 | pc.baud(9600); |
tylerjw | 7:d8ecabe16c9e | 34 | gps.autoDetectChar('\n'); |
tylerjw | 7:d8ecabe16c9e | 35 | gps.attach(&rxCallback, MODSERIAL::RxAutoDetect); |
tylerjw | 7:d8ecabe16c9e | 36 | |
tylerjw | 7:d8ecabe16c9e | 37 | while(true) { |
tylerjw | 7:d8ecabe16c9e | 38 | // Wait here until we detect the \n going into the buffer. |
tylerjw | 7:d8ecabe16c9e | 39 | while (! newline_detected ) ; |
tylerjw | 7:d8ecabe16c9e | 40 | |
tylerjw | 7:d8ecabe16c9e | 41 | // When we get here the RX buffer now contains a NMEA sentence. |
tylerjw | 7:d8ecabe16c9e | 42 | // ... |
tylerjw | 7:d8ecabe16c9e | 43 | memset(buffer, 0, 512); |
tylerjw | 7:d8ecabe16c9e | 44 | gps.move(buffer, 512); |
tylerjw | 7:d8ecabe16c9e | 45 | pc.puts(buffer); |
tylerjw | 0:ce5f06c3895f | 46 | } |
tylerjw | 7:d8ecabe16c9e | 47 | |
tylerjw | 7:d8ecabe16c9e | 48 | } |
tylerjw | 7:d8ecabe16c9e | 49 | |
tylerjw | 7:d8ecabe16c9e | 50 | |
tylerjw | 7:d8ecabe16c9e | 51 | int main() |
tylerjw | 7:d8ecabe16c9e | 52 | { |
tylerjw | 7:d8ecabe16c9e | 53 | Thread thread(gps_thread); |
tylerjw | 7:d8ecabe16c9e | 54 | |
tylerjw | 7:d8ecabe16c9e | 55 | while(true); |
tylerjw | 0:ce5f06c3895f | 56 | } |