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

Committer:
tylerjw
Date:
Wed Dec 12 16:22:09 2012 +0000
Revision:
14:dce4d8c29b17
Parent:
13:db6af0620264
Child:
15:ceac642f6b75
working gps, log, and sensor thread

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tylerjw 0:ce5f06c3895f 1 #include "mbed.h"
tylerjw 7:d8ecabe16c9e 2 #include "rtos.h"
tylerjw 10:b13416bbb4cd 3 #include "buffered_serial.h"
tylerjw 12:0d943d69d3ec 4 #include "ff.h"
tylerjw 10:b13416bbb4cd 5
tylerjw 10:b13416bbb4cd 6 #define CELLS 3.0
tylerjw 10:b13416bbb4cd 7 #define LIPO_EMPTY 3.4
tylerjw 10:b13416bbb4cd 8 #define LIPO_FULL 4.2
tylerjw 10:b13416bbb4cd 9
tylerjw 10:b13416bbb4cd 10 const float BAT_MUL = 4.7;
tylerjw 10:b13416bbb4cd 11 const float BAT_FULL = (CELLS * LIPO_FULL);
tylerjw 10:b13416bbb4cd 12 const float BAT_EMPTY = (CELLS * LIPO_EMPTY);
tylerjw 10:b13416bbb4cd 13 const float BAT_RANGE = BAT_FULL - BAT_EMPTY;
tylerjw 0:ce5f06c3895f 14
tylerjw 0:ce5f06c3895f 15 Serial pc(USBTX, USBRX);
tylerjw 10:b13416bbb4cd 16 BufferedSerial gps(NC, p14);
tylerjw 10:b13416bbb4cd 17 AnalogIn gps_battery(p20);
tylerjw 7:d8ecabe16c9e 18
tylerjw 13:db6af0620264 19 typedef struct {
tylerjw 13:db6af0620264 20 char line[80];
tylerjw 13:db6af0620264 21 } gps_line;
tylerjw 13:db6af0620264 22 MemoryPool<gps_line, 16> mpool_gps_line;
tylerjw 13:db6af0620264 23 Queue<gps_line, 16> queue_gps_line;
tylerjw 13:db6af0620264 24
tylerjw 13:db6af0620264 25 typedef struct {
tylerjw 14:dce4d8c29b17 26 char line[80];
tylerjw 13:db6af0620264 27 } sensor_line;
tylerjw 13:db6af0620264 28 MemoryPool<sensor_line, 16> mpool_sensor_line;
tylerjw 13:db6af0620264 29 Queue<sensor_line, 16> queue_sensor_line;
tylerjw 12:0d943d69d3ec 30
tylerjw 7:d8ecabe16c9e 31 void gps_thread(void const *args)
tylerjw 7:d8ecabe16c9e 32 {
tylerjw 10:b13416bbb4cd 33 char buffer[80];
tylerjw 9:4debfbc1fb3e 34
tylerjw 10:b13416bbb4cd 35 DigitalOut gps_led(LED4);
tylerjw 7:d8ecabe16c9e 36
tylerjw 7:d8ecabe16c9e 37 gps.baud(4800);
tylerjw 7:d8ecabe16c9e 38
tylerjw 7:d8ecabe16c9e 39 while(true) {
tylerjw 14:dce4d8c29b17 40 gps_led = 1;
tylerjw 10:b13416bbb4cd 41 gps.read_line(buffer);
tylerjw 14:dce4d8c29b17 42 //pc.puts(buffer);
tylerjw 13:db6af0620264 43 // send to log...
tylerjw 14:dce4d8c29b17 44 gps_led = 0;
tylerjw 13:db6af0620264 45 gps_line *message = mpool_gps_line.alloc();
tylerjw 13:db6af0620264 46 strcpy(message->line, buffer);
tylerjw 13:db6af0620264 47 queue_gps_line.put(message);
tylerjw 13:db6af0620264 48 }
tylerjw 13:db6af0620264 49 }
tylerjw 13:db6af0620264 50
tylerjw 13:db6af0620264 51 void log_thread(const void *args)
tylerjw 13:db6af0620264 52 {
tylerjw 13:db6af0620264 53 FATFS fs;
tylerjw 13:db6af0620264 54 FIL fp_gps, fp_sensor;
tylerjw 13:db6af0620264 55 char buffer[80];
tylerjw 13:db6af0620264 56
tylerjw 13:db6af0620264 57 DigitalOut log_led(LED3);
tylerjw 13:db6af0620264 58
tylerjw 13:db6af0620264 59 f_mount(0, &fs);
tylerjw 13:db6af0620264 60 f_open(&fp_gps, "0:gps.txt", FA_CREATE_ALWAYS | FA_WRITE);
tylerjw 13:db6af0620264 61 f_open(&fp_sensor, "0:sensor.txt", FA_CREATE_ALWAYS | FA_WRITE);
tylerjw 13:db6af0620264 62
tylerjw 13:db6af0620264 63 while(1) {
tylerjw 14:dce4d8c29b17 64 log_led = 1;
tylerjw 14:dce4d8c29b17 65 osEvent evt1 = queue_gps_line.get(1);
tylerjw 14:dce4d8c29b17 66 if (evt1.status == osEventMessage) {
tylerjw 14:dce4d8c29b17 67 gps_line *message = (gps_line*)evt1.value.p;
tylerjw 13:db6af0620264 68
tylerjw 13:db6af0620264 69 f_puts(message->line, &fp_gps);
tylerjw 13:db6af0620264 70 f_sync(&fp_gps);
tylerjw 13:db6af0620264 71
tylerjw 13:db6af0620264 72 mpool_gps_line.free(message);
tylerjw 13:db6af0620264 73 }
tylerjw 13:db6af0620264 74
tylerjw 14:dce4d8c29b17 75 osEvent evt2 = queue_sensor_line.get(1);
tylerjw 14:dce4d8c29b17 76 if(evt2.status == osEventMessage) {
tylerjw 14:dce4d8c29b17 77 sensor_line *message = (sensor_line*)evt2.value.p;
tylerjw 13:db6af0620264 78
tylerjw 14:dce4d8c29b17 79 f_puts(message->line, &fp_sensor);
tylerjw 14:dce4d8c29b17 80 f_sync(&fp_sensor);
tylerjw 13:db6af0620264 81
tylerjw 13:db6af0620264 82 mpool_sensor_line.free(message);
tylerjw 13:db6af0620264 83 }
tylerjw 14:dce4d8c29b17 84 log_led = 0;
tylerjw 13:db6af0620264 85 }
tylerjw 13:db6af0620264 86 }
tylerjw 13:db6af0620264 87
tylerjw 13:db6af0620264 88 void sensor_thread(const void* args)
tylerjw 13:db6af0620264 89 {
tylerjw 14:dce4d8c29b17 90 DigitalOut sensor_led(LED2);
tylerjw 14:dce4d8c29b17 91
tylerjw 14:dce4d8c29b17 92 sensor_line *message = mpool_sensor_line.alloc();
tylerjw 14:dce4d8c29b17 93 strcpy(message->line, "GPS Battery,\r\n");
tylerjw 14:dce4d8c29b17 94 queue_sensor_line.put(message);
tylerjw 14:dce4d8c29b17 95
tylerjw 13:db6af0620264 96 while(true)
tylerjw 13:db6af0620264 97 {
tylerjw 13:db6af0620264 98 //get sensor line memory
tylerjw 14:dce4d8c29b17 99 sensor_led = 1;
tylerjw 13:db6af0620264 100 sensor_line *message = mpool_sensor_line.alloc();
tylerjw 13:db6af0620264 101
tylerjw 13:db6af0620264 102 //gps battery
tylerjw 13:db6af0620264 103 float sample = gps_battery.read();
tylerjw 14:dce4d8c29b17 104 float gps_battery_voltage = sample*BAT_MUL*3.3;
tylerjw 13:db6af0620264 105
tylerjw 13:db6af0620264 106 // more sensors
tylerjw 13:db6af0620264 107
tylerjw 14:dce4d8c29b17 108 sprintf(message->line, "%f,\r\n", gps_battery_voltage);
tylerjw 14:dce4d8c29b17 109 queue_sensor_line.put(message);
tylerjw 14:dce4d8c29b17 110 sensor_led = 0;
tylerjw 13:db6af0620264 111 Thread::wait(1000);
tylerjw 0:ce5f06c3895f 112 }
tylerjw 7:d8ecabe16c9e 113 }
tylerjw 7:d8ecabe16c9e 114
tylerjw 7:d8ecabe16c9e 115 int main()
tylerjw 7:d8ecabe16c9e 116 {
tylerjw 10:b13416bbb4cd 117 pc.baud(9600);
tylerjw 9:4debfbc1fb3e 118 Thread thread(gps_thread, NULL, osPriorityHigh);
tylerjw 13:db6af0620264 119 Thread thread2(log_thread, NULL, osPriorityNormal);
tylerjw 14:dce4d8c29b17 120 Thread thread3(sensor_thread, NULL, osPriorityNormal);
tylerjw 13:db6af0620264 121
tylerjw 10:b13416bbb4cd 122 while(true) {
tylerjw 10:b13416bbb4cd 123 }
tylerjw 0:ce5f06c3895f 124 }