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-12
- Revision:
- 14:dce4d8c29b17
- Parent:
- 13:db6af0620264
- Child:
- 15:ceac642f6b75
File content as of revision 14:dce4d8c29b17:
#include "mbed.h" #include "rtos.h" #include "buffered_serial.h" #include "ff.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); BufferedSerial gps(NC, p14); AnalogIn gps_battery(p20); typedef struct { char line[80]; } gps_line; MemoryPool<gps_line, 16> mpool_gps_line; Queue<gps_line, 16> queue_gps_line; typedef struct { char line[80]; } 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]; DigitalOut gps_led(LED4); gps.baud(4800); while(true) { gps_led = 1; gps.read_line(buffer); //pc.puts(buffer); // send to log... gps_led = 0; 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); while(1) { log_led = 1; osEvent evt1 = queue_gps_line.get(1); if (evt1.status == osEventMessage) { gps_line *message = (gps_line*)evt1.value.p; f_puts(message->line, &fp_gps); f_sync(&fp_gps); mpool_gps_line.free(message); } osEvent evt2 = queue_sensor_line.get(1); if(evt2.status == osEventMessage) { sensor_line *message = (sensor_line*)evt2.value.p; f_puts(message->line, &fp_sensor); f_sync(&fp_sensor); mpool_sensor_line.free(message); } log_led = 0; } } void sensor_thread(const void* args) { DigitalOut sensor_led(LED2); sensor_line *message = mpool_sensor_line.alloc(); strcpy(message->line, "GPS Battery,\r\n"); queue_sensor_line.put(message); while(true) { //get sensor line memory sensor_led = 1; sensor_line *message = mpool_sensor_line.alloc(); //gps battery float sample = gps_battery.read(); float gps_battery_voltage = sample*BAT_MUL*3.3; // more sensors sprintf(message->line, "%f,\r\n", gps_battery_voltage); queue_sensor_line.put(message); sensor_led = 0; Thread::wait(1000); } } int main() { pc.baud(9600); Thread thread(gps_thread, NULL, osPriorityHigh); Thread thread2(log_thread, NULL, osPriorityNormal); Thread thread3(sensor_thread, NULL, osPriorityNormal); while(true) { } }