Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Servo TMP36 GZ chan_fatfs_sd buffered-serial1 nmea_parser watchdog mbed-rtos mbed
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) {
}
}