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:
- 13:db6af0620264
- Parent:
- 12:0d943d69d3ec
- Child:
- 14:dce4d8c29b17
diff -r 0d943d69d3ec -r db6af0620264 main.cpp --- a/main.cpp Tue Dec 11 23:57:13 2012 +0000 +++ b/main.cpp Wed Dec 12 16:01:30 2012 +0000 @@ -16,27 +16,89 @@ BufferedSerial gps(NC, p14); AnalogIn gps_battery(p20); -#define FSS_DBG +typedef struct { + char line[80]; +} gps_line; +MemoryPool<gps_line, 16> mpool_gps_line; +Queue<gps_line, 16> queue_gps_line; + +typedef struct { + float gps_battery; // gps battery voltage +} sensor_line; +MemoryPool<sensor_line, 16> mpool_sensor_line; +Queue<sensor_line, 16> queue_sensor_line; void gps_thread(void const *args) { char buffer[80]; - FATFS fs; - FIL fp; DigitalOut gps_led(LED4); gps.baud(4800); - - f_mount(0, &fs); - f_open(&fp, "0:gps.txt", FA_CREATE_ALWAYS | FA_WRITE); while(true) { gps.read_line(buffer); gps_led = !gps_led; pc.puts(buffer); - f_puts(buffer, &fp); - f_sync(&fp); + // send to log... + gps_line *message = mpool_gps_line.alloc(); + strcpy(message->line, buffer); + queue_gps_line.put(message); + } +} + +void log_thread(const void *args) +{ + FATFS fs; + FIL fp_gps, fp_sensor; + char buffer[80]; + + DigitalOut log_led(LED3); + + f_mount(0, &fs); + f_open(&fp_gps, "0:gps.txt", FA_CREATE_ALWAYS | FA_WRITE); + f_open(&fp_sensor, "0:sensor.txt", FA_CREATE_ALWAYS | FA_WRITE); + log_led = 1; + + while(1) { + osEvent evt = queue_gps_line.get(1); + if (evt.status == osEventMessage) { + gps_line *message = (gps_line*)evt.value.p; + + log_led = !log_led; + f_puts(message->line, &fp_gps); + f_sync(&fp_gps); + + mpool_gps_line.free(message); + } + + evt = queue_sensor_line.get(1); + if(evt.status == osEventMessage) { + sensor_line *message = (sensor_line*)evt.value.p; + + sprintf(buffer, "%f\r\n", message->gps_battery); + + mpool_sensor_line.free(message); + } + } +} + +void sensor_thread(const void* args) +{ + while(true) + { + //get sensor line memory + sensor_line *message = mpool_sensor_line.alloc(); + + //gps battery + float sample = gps_battery.read(); + float voltage = sample*BAT_MUL*3.3; + message->gps_battery = voltage; + + // more sensors + + queue_sensor_line.put(message); + Thread::wait(1000); } } @@ -44,14 +106,9 @@ { pc.baud(9600); Thread thread(gps_thread, NULL, osPriorityHigh); - + Thread thread2(log_thread, NULL, osPriorityNormal); + //Thread thread3(sensor_thread, NULL, osPriorityNormal); + 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