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 Tyler Weaver

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?

UserRevisionLine numberNew 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 }