a program i made a while back to log gps/accelerometer data
Dependencies: FatFileSystem mbed
main.cpp@0:82a02991476c, 2012-09-08 (annotated)
- Committer:
- Xach
- Date:
- Sat Sep 08 20:40:58 2012 +0000
- Revision:
- 0:82a02991476c
a program i made a while back to log gps/accelerometer data
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Xach | 0:82a02991476c | 1 | #include "mbed.h" |
Xach | 0:82a02991476c | 2 | #include "SerialBuffered.h" |
Xach | 0:82a02991476c | 3 | #include "globals.h" |
Xach | 0:82a02991476c | 4 | #include "SDFileSystem.h" |
Xach | 0:82a02991476c | 5 | #include "string.h" |
Xach | 0:82a02991476c | 6 | |
Xach | 0:82a02991476c | 7 | #define SDWrite(STR) ((fp == NULL) ? fprintf(fp, STR) : errorled=1) |
Xach | 0:82a02991476c | 8 | |
Xach | 0:82a02991476c | 9 | PwmOut Red(p25); |
Xach | 0:82a02991476c | 10 | PwmOut Green(p23); |
Xach | 0:82a02991476c | 11 | PwmOut Blue(p21); |
Xach | 0:82a02991476c | 12 | |
Xach | 0:82a02991476c | 13 | |
Xach | 0:82a02991476c | 14 | SDFileSystem sd(p11, p12, p13, p10, "sd"); |
Xach | 0:82a02991476c | 15 | DigitalOut myled(LED1); |
Xach | 0:82a02991476c | 16 | DigitalOut genled(LED2); |
Xach | 0:82a02991476c | 17 | DigitalOut errorled(LED3); |
Xach | 0:82a02991476c | 18 | DigitalOut successled(LED4); |
Xach | 0:82a02991476c | 19 | Serial pc (USBTX,USBRX); |
Xach | 0:82a02991476c | 20 | //FILE *fp = fopen("/sd/foo.txt", "w"); |
Xach | 0:82a02991476c | 21 | |
Xach | 0:82a02991476c | 22 | |
Xach | 0:82a02991476c | 23 | |
Xach | 0:82a02991476c | 24 | |
Xach | 0:82a02991476c | 25 | int main() { |
Xach | 0:82a02991476c | 26 | Red.period_us(100); |
Xach | 0:82a02991476c | 27 | Green.period_us(100); |
Xach | 0:82a02991476c | 28 | Blue.period_us(100); |
Xach | 0:82a02991476c | 29 | Red = 0; |
Xach | 0:82a02991476c | 30 | Green = 0; |
Xach | 0:82a02991476c | 31 | Blue = 0; |
Xach | 0:82a02991476c | 32 | |
Xach | 0:82a02991476c | 33 | int flushCount = 0; |
Xach | 0:82a02991476c | 34 | int fileStartTime = 0; |
Xach | 0:82a02991476c | 35 | |
Xach | 0:82a02991476c | 36 | errorled = 0; |
Xach | 0:82a02991476c | 37 | initAccel(); |
Xach | 0:82a02991476c | 38 | |
Xach | 0:82a02991476c | 39 | while (devid == 0) { |
Xach | 0:82a02991476c | 40 | initAccel(); |
Xach | 0:82a02991476c | 41 | pc.printf("devid=%u\n",devid); |
Xach | 0:82a02991476c | 42 | } |
Xach | 0:82a02991476c | 43 | pc.printf("devid=%u\n",devid); |
Xach | 0:82a02991476c | 44 | fp = fopen("/sd/clbr.txt", "a"); |
Xach | 0:82a02991476c | 45 | int j = 0; |
Xach | 0:82a02991476c | 46 | while (j<6400) { |
Xach | 0:82a02991476c | 47 | if (accelRdy) { |
Xach | 0:82a02991476c | 48 | accelRdy = false; |
Xach | 0:82a02991476c | 49 | |
Xach | 0:82a02991476c | 50 | convertAccel; |
Xach | 0:82a02991476c | 51 | j++; |
Xach | 0:82a02991476c | 52 | } |
Xach | 0:82a02991476c | 53 | } |
Xach | 0:82a02991476c | 54 | pc.printf("NMEA data from LS20031:\n"); |
Xach | 0:82a02991476c | 55 | char * pva_sent = (char *)calloc(255, sizeof(char)); |
Xach | 0:82a02991476c | 56 | char * titlePath = (char *)calloc(255, sizeof(char)); |
Xach | 0:82a02991476c | 57 | |
Xach | 0:82a02991476c | 58 | SerialBuffered *b = new SerialBuffered( 256, p28, p27); |
Xach | 0:82a02991476c | 59 | b->baud( 56000 ); |
Xach | 0:82a02991476c | 60 | //only need to do this once to set up rmc |
Xach | 0:82a02991476c | 61 | // char setup[] = "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*%x\r\n"; |
Xach | 0:82a02991476c | 62 | // pc.printf("checksum : %x", checkSum(setup)); |
Xach | 0:82a02991476c | 63 | // b->printf(setup, checkSum(setup)); |
Xach | 0:82a02991476c | 64 | |
Xach | 0:82a02991476c | 65 | b->startReadStrings('\n'); |
Xach | 0:82a02991476c | 66 | b->setTimeout( 0.1 );//stupid , shouldnt need this |
Xach | 0:82a02991476c | 67 | char* line[32]; |
Xach | 0:82a02991476c | 68 | |
Xach | 0:82a02991476c | 69 | myled = 1; |
Xach | 0:82a02991476c | 70 | genled = 1; |
Xach | 0:82a02991476c | 71 | |
Xach | 0:82a02991476c | 72 | while (b->stringsAvailable()<=0); // we need to wait for gps string |
Xach | 0:82a02991476c | 73 | char * firstMsg = b->getString(); |
Xach | 0:82a02991476c | 74 | while (!NMEA_parse(firstMsg)) { |
Xach | 0:82a02991476c | 75 | |
Xach | 0:82a02991476c | 76 | if (b->stringsAvailable()>0) |
Xach | 0:82a02991476c | 77 | firstMsg = b->getString(); |
Xach | 0:82a02991476c | 78 | } |
Xach | 0:82a02991476c | 79 | while (b->stringsAvailable()>0) { |
Xach | 0:82a02991476c | 80 | firstMsg = b->getString(); |
Xach | 0:82a02991476c | 81 | NMEA_parse(firstMsg); |
Xach | 0:82a02991476c | 82 | } |
Xach | 0:82a02991476c | 83 | |
Xach | 0:82a02991476c | 84 | myled = 0; |
Xach | 0:82a02991476c | 85 | genled = 0; |
Xach | 0:82a02991476c | 86 | |
Xach | 0:82a02991476c | 87 | fileStartTime = (int)timeG/10000; |
Xach | 0:82a02991476c | 88 | sprintf (titlePath, "/sd/%i_%i.txt",(int)date/10000 , (int)timeG/10000); |
Xach | 0:82a02991476c | 89 | pc.printf(titlePath); |
Xach | 0:82a02991476c | 90 | FILE *fp = fopen(titlePath, "a"); |
Xach | 0:82a02991476c | 91 | |
Xach | 0:82a02991476c | 92 | while (fp == NULL) { |
Xach | 0:82a02991476c | 93 | wait (1); |
Xach | 0:82a02991476c | 94 | errorled = 1; |
Xach | 0:82a02991476c | 95 | successled = 1; |
Xach | 0:82a02991476c | 96 | genled = 1; |
Xach | 0:82a02991476c | 97 | myled = 1; |
Xach | 0:82a02991476c | 98 | wait(1); |
Xach | 0:82a02991476c | 99 | errorled = 0; |
Xach | 0:82a02991476c | 100 | successled = 0; |
Xach | 0:82a02991476c | 101 | genled = 0; |
Xach | 0:82a02991476c | 102 | myled = 0; |
Xach | 0:82a02991476c | 103 | if (b->stringsAvailable()>0) { |
Xach | 0:82a02991476c | 104 | firstMsg = b->getString(); |
Xach | 0:82a02991476c | 105 | NMEA_parse(firstMsg); |
Xach | 0:82a02991476c | 106 | } |
Xach | 0:82a02991476c | 107 | fileStartTime = (int)timeG/10000; |
Xach | 0:82a02991476c | 108 | sprintf (titlePath, "/sd/%i_%i.txt",(int)date/10000 , (int)timeG/10000); |
Xach | 0:82a02991476c | 109 | fp = fopen(titlePath, "a"); |
Xach | 0:82a02991476c | 110 | } |
Xach | 0:82a02991476c | 111 | |
Xach | 0:82a02991476c | 112 | pc.printf(titlePath); |
Xach | 0:82a02991476c | 113 | fprintf(fp,"break,\n"); |
Xach | 0:82a02991476c | 114 | |
Xach | 0:82a02991476c | 115 | timer.start(); |
Xach | 0:82a02991476c | 116 | while (1) { |
Xach | 0:82a02991476c | 117 | if (accelRdy) { |
Xach | 0:82a02991476c | 118 | accelRdy = false; |
Xach | 0:82a02991476c | 119 | convertAccel(); |
Xach | 0:82a02991476c | 120 | sprintf (pva_sent,"A,%i,%f,%f,%f\n",accelTime,xaxis,yaxis,zaxis); |
Xach | 0:82a02991476c | 121 | // sprintf (pva_sent,"%f,%f,%f\n", xaxis,yaxis,zaxis); |
Xach | 0:82a02991476c | 122 | // pc.printf(pva_sent); |
Xach | 0:82a02991476c | 123 | fprintf(fp,pva_sent); |
Xach | 0:82a02991476c | 124 | Red = abs(yaxis); |
Xach | 0:82a02991476c | 125 | Blue = abs(zaxis); |
Xach | 0:82a02991476c | 126 | Green = abs(xaxis); |
Xach | 0:82a02991476c | 127 | successled = 1; |
Xach | 0:82a02991476c | 128 | } |
Xach | 0:82a02991476c | 129 | |
Xach | 0:82a02991476c | 130 | int i= 0; |
Xach | 0:82a02991476c | 131 | while (b->stringsAvailable()>0) { |
Xach | 0:82a02991476c | 132 | updateAccel(); |
Xach | 0:82a02991476c | 133 | timer.reset(); |
Xach | 0:82a02991476c | 134 | if (i<STRING_BUFFERS) |
Xach | 0:82a02991476c | 135 | line[i++] = b->getString(); |
Xach | 0:82a02991476c | 136 | else |
Xach | 0:82a02991476c | 137 | break; |
Xach | 0:82a02991476c | 138 | } |
Xach | 0:82a02991476c | 139 | |
Xach | 0:82a02991476c | 140 | // pc.printf("\n\navailable:%i\n", i); //if i>1 it would be a good idea to throw an error |
Xach | 0:82a02991476c | 141 | |
Xach | 0:82a02991476c | 142 | while (i>=1) { |
Xach | 0:82a02991476c | 143 | flushCount++; |
Xach | 0:82a02991476c | 144 | if (flushCount > 150) { |
Xach | 0:82a02991476c | 145 | |
Xach | 0:82a02991476c | 146 | flushCount = 0; |
Xach | 0:82a02991476c | 147 | fclose(fp); |
Xach | 0:82a02991476c | 148 | |
Xach | 0:82a02991476c | 149 | if (fileStartTime - (int)timeG/10000 != 0) { |
Xach | 0:82a02991476c | 150 | fileStartTime = (int)timeG/10000; |
Xach | 0:82a02991476c | 151 | if (date != 0) |
Xach | 0:82a02991476c | 152 | sprintf (titlePath, "/sd/%i_%i.txt",(int)date/10000 , (int)timeG/10000); |
Xach | 0:82a02991476c | 153 | } |
Xach | 0:82a02991476c | 154 | fp = fopen(titlePath, "a"); |
Xach | 0:82a02991476c | 155 | while (fp == NULL) { |
Xach | 0:82a02991476c | 156 | wait (1); |
Xach | 0:82a02991476c | 157 | errorled = 1; |
Xach | 0:82a02991476c | 158 | successled = 1; |
Xach | 0:82a02991476c | 159 | genled = 1; |
Xach | 0:82a02991476c | 160 | myled = 1; |
Xach | 0:82a02991476c | 161 | wait(1); |
Xach | 0:82a02991476c | 162 | errorled = 0; |
Xach | 0:82a02991476c | 163 | successled = 0; |
Xach | 0:82a02991476c | 164 | genled = 0; |
Xach | 0:82a02991476c | 165 | myled = 0; |
Xach | 0:82a02991476c | 166 | |
Xach | 0:82a02991476c | 167 | fp = fopen(titlePath, "a"); |
Xach | 0:82a02991476c | 168 | } |
Xach | 0:82a02991476c | 169 | |
Xach | 0:82a02991476c | 170 | } |
Xach | 0:82a02991476c | 171 | NMEA_parse(line[--i]); |
Xach | 0:82a02991476c | 172 | |
Xach | 0:82a02991476c | 173 | //sprintf (pva_sent,"\ngot line:%i\nDate:%f Time:%f Lat:%f Lon:%f Speed:%f Ax:%f Ay:%f Az:%f", i ,date,timeG,latitude,longitude,speed_knotts,xaxis,yaxis,zaxis); |
Xach | 0:82a02991476c | 174 | sprintf (pva_sent,"G,%i,%f,%f,%f,%f,%f,%f,%f\n",(int)date,timeG,latitude,longitude,speed_knotts,xaxis,yaxis,zaxis); |
Xach | 0:82a02991476c | 175 | // pc.printf(pva_sent); |
Xach | 0:82a02991476c | 176 | successled = 1; |
Xach | 0:82a02991476c | 177 | fprintf(fp,pva_sent); |
Xach | 0:82a02991476c | 178 | successled = 0; |
Xach | 0:82a02991476c | 179 | //pc.printf("A X=%f, Y=%f, Z=%f\n",xaxis,yaxis,zaxis); |
Xach | 0:82a02991476c | 180 | |
Xach | 0:82a02991476c | 181 | } |
Xach | 0:82a02991476c | 182 | |
Xach | 0:82a02991476c | 183 | |
Xach | 0:82a02991476c | 184 | } |
Xach | 0:82a02991476c | 185 | } |
Xach | 0:82a02991476c | 186 | |
Xach | 0:82a02991476c | 187 | |
Xach | 0:82a02991476c | 188 |