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
- Committer:
- tylerjw
- Date:
- 2012-12-09
- Revision:
- 9:4debfbc1fb3e
- Parent:
- 8:13360ec824a7
- Child:
- 10:b13416bbb4cd
File content as of revision 9:4debfbc1fb3e:
#include "mbed.h" #include "rtos.h" #include "SDFileSystem.h" //#include "MODSERIAL.h" Serial pc(USBTX, USBRX); float test_lat = 39.943039; float test_long = -104.978226; // Connect the TX of the GPS module to p10 RX input Serial gps(NC, p14); SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board DigitalOut irq_led(LED1); Semaphore newlines(0); // Called everytime a new character goes into // the RX buffer. Test that character for \n // Note, rxGetLastChar() gets the last char that // we received but it does NOT remove it from // the RX buffer. char gps_buffer[1024]; int buffer_counter = 0; int newline_pos = 0; void rxCallback() { char c; while(gps.readable()) { c = gps.getc(); gps_buffer[buffer_counter++] = c; if(buffer_counter == 1024) { error("Buffer Overflow"); buffer_counter = 1023; } if(c == '\n') { newlines.release(); newline_pos = buffer_counter - 1; irq_led = !irq_led; } } } void gps_getline(char *buffer, int size) { __disable_irq(); strncpy(buffer, gps_buffer, newline_pos+1); memmove(gps_buffer,gps_buffer+(newline_pos+1), (buffer_counter - newline_pos - 1)); buffer_counter = (buffer_counter - newline_pos - 1); newline_pos = 0; __enable_irq(); } void gps_thread(void const *args) { char buffer[512]; int counter = 0; int file_counter = 0; char filename[21]; DigitalOut gps_led(LED2); gps.baud(4800); pc.baud(9600); //gps.autoDetectChar('\n'); gps.attach(&rxCallback, Serial::RxIrq); gps_led = 1; sprintf(filename, "/sd/hab/gps%03d.log", file_counter++); pc.printf("Opening: %s\r\n", filename); mkdir("/sd/hab", 0777); FILE *gps_file = fopen(filename, "w"); if(gps_file == NULL) { error("Could not open file for write\n"); } pc.puts("File Open!\r\n"); gps_led = 0; while(true) { newlines.wait(); // wait for next line memset(buffer, 0, 512); gps_getline(buffer, 512); pc.puts(buffer); fputs(buffer, gps_file); counter++; if(counter >= 20) { sprintf(filename, "/sd/hab/gps%03d.log", file_counter++); pc.printf("Opening: %s\r\n", filename); freopen(filename, "w", gps_file); counter = 0; } } } int main() { Thread thread(gps_thread, NULL, osPriorityHigh); while(true); }