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: MODGPS MODSERIAL SDFileSystem mbed
main.cpp
- Committer:
- njewin
- Date:
- 2013-05-27
- Revision:
- 8:0ce247da6370
- Parent:
- 7:af9f373ac87b
- Child:
- 9:7dcfa24d5e7a
File content as of revision 8:0ce247da6370:
#include "mbed.h"
#include "SDFileSystem.h" // SD file system header from handbook/cookbook offical mbed library
#include "MODSERIAL.h"
#include "UM6_usart.h" // UM6 USART HEADER
#include "UM6_config.h" // UM6 CONFIG HEADER
//------------ system and interface setup ----------------------------//
//////////////////////////////////////LocalFileSystem local("local"); // sets up local file on mbed
MODSERIAL pc(USBTX, USBRX); // sets up serial connection to pc terminal
//------------ Hardware setup ----------------------------------------//
DigitalOut pc_led(LED1); // LED1 = PC SERIAL
DigitalOut uart_led(LED2); // LED2 = UM6 SERIAL
DigitalOut log_led(LED3); // debug LED
DigitalIn enable(p10); // enable signal for logging data to file
SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
//------------ variables setup ---------------------------------------//
Ticker tick;
Timer t;
int flag=0;
// interupt function for processing uart messages --------------------//
void rxCallback(MODSERIAL_IRQ_INFO *q) {
if (um6_uart.rxBufferGetCount() >= MAX_PACKET_DATA) {
uart_led = !uart_led; // Lights LED when uart RxBuff has > 40 bytes
Process_um6_packet();
}
}
//------------ LogData interrupt function ----------------------------//
void LogData() {
flag=1;
}
//============= Main Program =========================================//
int main() {
pc.baud(115200); // baud rate to pc interface
um6_uart.baud(115200); // baud rate to um6 interface
t.start(); // start log time
//---- call interrupt functions -------------------------//
um6_uart.attach(&rxCallback, MODSERIAL::RxIrq); // attach interupt function to uart
tick.attach(&LogData, 0.5); // attaches LogData function to 'tick' ticker interrupt every 0.5s
//---------- setup sd card -----------------------------//
mkdir("/sd/mydir", 0777);
FILE *fp = fopen("/sd/mydir/log1.csv", "w");
if(fp == NULL) {
error("Could not open file for write\n");
}
//////////////////////////// FILE *fp = fopen("/local/log1.csv", "w");
// print TEST signals to file, header
// fprintf(fp,"time(s),Yaw(deg),Accel(m/s2),GPS Speed(m/s) \r");
// print ALL signals to file, header
fprintf(fp, "time(s),Yaw(deg),Roll(deg),Pitch(deg),GyroX(deg/s),GyroY(deg/s),GyroZ(deg/s),AccelX(g),AccelY(g),AccelZ(g),GPScourse(deg),GPSspeed(m/s),Latitude(deg),Longitude(deg) \r"); // sends header to file
//---- main while loop ----------------------------------//
//--(interrupt sets flag that causes variables to be logged)
while(1) {
if(flag==1) {
log_led=1; // turns on LED3 to indicate logging
float time=t.read();
float Yaw=data.Yaw;
float Roll=data.Roll;
float Pitch=data.Pitch;
float GyroX=data.Gyro_Proc_X;
float GyroY=data.Gyro_Proc_Y;
float GyroZ=data.Gyro_Proc_Z;
float AccelX=data.Accel_Proc_X;
float AccelY=data.Accel_Proc_Y;
float AccelZ=data.Accel_Proc_Z;
double GPSlong=data.GPS_long; // currently I can get GPS longitude to out data
double GPSlat=data.GPS_lat; // currently I can get GPS latitude to out data
float GPScourse=data.GPS_course;
float GPSspeed=data.GPS_speed;
//----- print TEST signals to file -------------------//
// fprintf(fp,"%.3f,%.2f,%.4f,%.2f \r",time,Yaw,AccelX,GPSspeed);
pc.printf("time %.3f,Yaw %f, Speed %f, Lat %f, Long %f \n",time,Yaw,GPSspeed,GPSlat,GPSlong);
// pc.printf("0x%08X, %f\n", *(int *)&GPSlong, GPSlong);
//----- print ALL signals to file --------------------//
fprintf(fp, "%3.3f, %3.1f,%3.1f,%3.1f, %3.2f,%3.2f,%3.2f, %3.4f,%3.4f,%3.4f, %3.1f,%3.2f,%f,%f\r",time,Yaw,Roll,Pitch,GyroX,GyroY,GyroZ,AccelX,AccelY,AccelZ,GPScourse,GPSspeed,GPSlat,GPSlong);
flag=0; // recents LogData interrupt flag
pc_led = !pc_led; // Lights LED1 when transmitting to PC screen
} // end if(flag=1) loop
if(enable==0) {
break; // breaks while loop if enable switched off
}
} // end while(1) loop
pc.printf(" done. \n"); // prints 'done when logging is finished/enable switched off
log_led=0; // turns off LED logging is finished/enable switched off
wait(0.5); // debug wait for pc.printf
fclose(fp); // closes log file
} // end main() program
/* opening a file BEFORE calling interrupts OK
opening a file and print to it BEFORE calling interrupts NOT OK (stops rest of program)
open a (local) file and print to it AFTER calling interrupts NOT OK (stops rest of program)
open a (sd) file and print to it AFTER calling interrupts OK
*/