Generation 2 of the Harp project
Dependencies: Servo TMP36 GZ chan_fatfs_sd buffered-serial1 nmea_parser watchdog mbed-rtos mbed
Diff: main.cpp
- Revision:
- 10:b13416bbb4cd
- Parent:
- 9:4debfbc1fb3e
- Child:
- 11:890a721158a5
diff -r 4debfbc1fb3e -r b13416bbb4cd main.cpp --- a/main.cpp Sun Dec 09 08:48:30 2012 +0000 +++ b/main.cpp Tue Dec 11 00:27:45 2012 +0000 @@ -1,110 +1,48 @@ #include "mbed.h" #include "rtos.h" -#include "SDFileSystem.h" -//#include "MODSERIAL.h" +#include "buffered_serial.h" + +#define CELLS 3.0 +#define LIPO_EMPTY 3.4 +#define LIPO_FULL 4.2 + +const float BAT_MUL = 4.7; +const float BAT_FULL = (CELLS * LIPO_FULL); +const float BAT_EMPTY = (CELLS * LIPO_EMPTY); +const float BAT_RANGE = BAT_FULL - BAT_EMPTY; 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(); -} +BufferedSerial gps(NC, p14); +AnalogIn gps_battery(p20); void gps_thread(void const *args) { - char buffer[512]; - int counter = 0; - int file_counter = 0; - char filename[21]; + char buffer[80]; - DigitalOut gps_led(LED2); + DigitalOut gps_led(LED4); 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; - } + gps.read_line(buffer); + gps_led = !gps_led; + //pc.puts(buffer); } } int main() { + pc.baud(9600); Thread thread(gps_thread, NULL, osPriorityHigh); - while(true); + while(true) { + float sample = gps_battery.read(); + pc.printf("Sample: %f Volts\r\n", sample*3.3); + float voltage = sample*BAT_MUL*3.3; + pc.printf("Battery Voltage: %f Volts\r\n", voltage); + float level = (voltage-BAT_EMPTY) / (BAT_RANGE); + pc.printf("Battery Level: %f \r\n", level); + + Thread::wait(1000); + } } \ No newline at end of file