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
Diff: main.cpp
- Revision:
- 18:29b19a25a963
- Parent:
- 17:4927053e120f
- Child:
- 19:1cfe22ef30e2
--- a/main.cpp Wed Dec 12 17:54:04 2012 +0000 +++ b/main.cpp Wed Dec 12 18:13:11 2012 +0000 @@ -18,6 +18,8 @@ GPS_Parser nmea_parser; +Semaphore parachute_sem(0); + typedef struct { char line[80]; } gps_line; @@ -33,21 +35,35 @@ void gps_thread(void const *args) { char buffer[80]; + float alt, alt_prev; + alt = alt_prev = 0; DigitalOut gps_led(LED4); gps.baud(4800); while(true) { - gps_led = 1; + gps_led = !gps_led; gps.read_line(buffer); nmea_parser.sample(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); + + // test altitude direction + if(nmea_parser.get_lock()) + { + if(alt != 0) { // first time + alt = nmea_parser.get_msl_altitude(); + } else { + alt_prev = alt; + alt = nmea_parser.get_msl_altitude(); + if(alt < alt_prev) // going down + parachute_sem.release(); // let the parachute code execute + } + } } } @@ -63,7 +79,7 @@ f_open(&fp_sensor, "0:sensors.csv", FA_CREATE_ALWAYS | FA_WRITE); while(1) { - log_led = 1; + log_led = !log_led; osEvent evt1 = queue_gps_line.get(1); if (evt1.status == osEventMessage) { gps_line *message = (gps_line*)evt1.value.p; @@ -83,7 +99,6 @@ mpool_sensor_line.free(message); } - log_led = 0; } } @@ -91,6 +106,10 @@ { DigitalOut sensor_led(LED2); Timer t; + float time; + float gps_battery_voltage, mbed_battery_voltage; + float bmp_temperature, bmp_altitude; + int bmp_pressure; //while(!nmea_parser.get_lock()) Thread::wait(100); // wait for lock @@ -103,33 +122,37 @@ while(true) { //get sensor line memory - sensor_led = 1; + sensor_led = !sensor_led; sensor_line *message = mpool_sensor_line.alloc(); //timestamp - float time = t.read(); + time = t.read(); //gps battery - float gps_battery_voltage = gps_battery.read()*BAT_GPS_MUL; + gps_battery_voltage = gps_battery.read()*BAT_GPS_MUL; //mbed battery - float mbed_battery_voltage = mbed_battery.read()*BAT_MBED_MUL; + mbed_battery_voltage = mbed_battery.read()*BAT_MBED_MUL; //BMP085 - float bmp_temperature = (float)alt_sensor.get_temperature() / 10.0; - int bmp_pressure = alt_sensor.get_pressure(); - float bmp_altitude = alt_sensor.get_altitude_ft(); + bmp_temperature = (float)alt_sensor.get_temperature() / 10.0; + bmp_pressure = alt_sensor.get_pressure(); + bmp_altitude = alt_sensor.get_altitude_ft(); sprintf(message->line, "%f,%f,%f,%f,%d,%f\r\n", time,gps_battery_voltage,mbed_battery_voltage,bmp_temperature,bmp_pressure,bmp_altitude); queue_sensor_line.put(message); - sensor_led = 0; } } void parachute_thread(const void *args) { + DigitalOut para_led(LED1); - while(true) Thread::wait(1000); + while(true) + { + parachute_sem.wait(); + para_led = !para_led; + } } int main() @@ -140,6 +163,5 @@ Thread thread3(sensor_thread, NULL, osPriorityNormal); Thread thread4(parachute_thread, NULL, osPriorityRealtime); - while(true) { - } + while(true) ; } \ No newline at end of file