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

Revision:
10:b13416bbb4cd
Parent:
9:4debfbc1fb3e
Child:
11:890a721158a5
--- 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