PNI / Mbed 2 deprecated VSG_DataLogger1_VariableSpeed

Dependencies:   SDFileSystemVSG mbed

Fork of VSG_DataLogger1 by PNI

Committer:
jtrojan
Date:
Mon Aug 13 21:19:30 2018 +0000
Revision:
5:e4b1de08bb87
Parent:
4:ea7c4356f84c
Child:
6:bd675690d831
System now samples in batches determined by slow sampling speed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JoeMiller 2:d2c2e2d3f1e5 1 // VSG Board 18-axes mag Datalogger prototype
JoeMiller 2:d2c2e2d3f1e5 2 // install debug jumper for console output only
JoeMiller 2:d2c2e2d3f1e5 3 // remove debug jumper to log data to SDcard only
JoeMiller 2:d2c2e2d3f1e5 4
JoeMiller 2:d2c2e2d3f1e5 5 // set system parameters -------------------------
jtrojan 4:ea7c4356f84c 6 #define SAMPLE_RATE (4) //Hz
jtrojan 4:ea7c4356f84c 7 #define SAMPLE_RATE_HIGH (240) //Hz
jtrojan 4:ea7c4356f84c 8 #define TMRC_VLOW (0x99) // TMRC hex value corresponding to reading/rate
jtrojan 5:e4b1de08bb87 9 #define TMRC_VHIGH (0x93) // TMRC hex value corresponding to reading/rate
jtrojan 4:ea7c4356f84c 10 #define SAMPLE_PERIOD (60) // seconds
jtrojan 4:ea7c4356f84c 11 #define SAMPLE_DELAY (5) // seconds -to allow time to seal unit and place in the field
JoeMiller 2:d2c2e2d3f1e5 12 #define CYCLE_COUNT (50)
JoeMiller 2:d2c2e2d3f1e5 13 //------------------------------------------------
JoeMiller 2:d2c2e2d3f1e5 14
JoeMiller 2:d2c2e2d3f1e5 15
mbed_official 0:bdbd3d6fc5d5 16 #include "mbed.h"
mbed_official 0:bdbd3d6fc5d5 17 #include "SDFileSystem.h"
JoeMiller 2:d2c2e2d3f1e5 18 // NOTICE: SDFileSystem.cpp was modified. See //JM comments
JoeMiller 2:d2c2e2d3f1e5 19 #include "main.h"
mbed_official 0:bdbd3d6fc5d5 20
JoeMiller 2:d2c2e2d3f1e5 21 #define SAMPLE_INTERVAL (1.0/SAMPLE_RATE)
jtrojan 4:ea7c4356f84c 22 #define MAX_COUNT (SAMPLE_PERIOD * SAMPLE_RATE * 4)
JoeMiller 2:d2c2e2d3f1e5 23 #define MCC ((CYCLE_COUNT >> 8) & 0xff)
JoeMiller 2:d2c2e2d3f1e5 24 #define LCC (CYCLE_COUNT & 0xff)
JoeMiller 2:d2c2e2d3f1e5 25 #define MAX_MAG_VALUE (8388608) // positive 23 bits
JoeMiller 2:d2c2e2d3f1e5 26 #define NEGATIVE_ADJUST (MAX_MAG_VALUE + MAX_MAG_VALUE) //signed 24 bits
JoeMiller 2:d2c2e2d3f1e5 27
JoeMiller 2:d2c2e2d3f1e5 28 // resource assignments
JoeMiller 2:d2c2e2d3f1e5 29 DigitalIn rdy1a(DRDY1A);
JoeMiller 2:d2c2e2d3f1e5 30 DigitalIn rdy1b(DRDY1B);
JoeMiller 2:d2c2e2d3f1e5 31 DigitalIn rdy1c(DRDY1C);
JoeMiller 2:d2c2e2d3f1e5 32 DigitalIn rdy2a(DRDY2A);
JoeMiller 2:d2c2e2d3f1e5 33 DigitalIn rdy2b(DRDY2B);
JoeMiller 2:d2c2e2d3f1e5 34 DigitalIn rdy2c(DRDY2C);
JoeMiller 2:d2c2e2d3f1e5 35 DigitalIn debugPin(DEBUG_MODE);
JoeMiller 2:d2c2e2d3f1e5 36
JoeMiller 2:d2c2e2d3f1e5 37 DigitalOut sel1a(SSM1A);
JoeMiller 2:d2c2e2d3f1e5 38 DigitalOut sel1b(SSM1B);
JoeMiller 2:d2c2e2d3f1e5 39 DigitalOut sel1c(SSM1C);
JoeMiller 2:d2c2e2d3f1e5 40 DigitalOut sel2a(SSM2A);
JoeMiller 2:d2c2e2d3f1e5 41 DigitalOut sel2b(SSM2B);
JoeMiller 2:d2c2e2d3f1e5 42 DigitalOut sel2c(SSM2C);
JoeMiller 2:d2c2e2d3f1e5 43
JoeMiller 2:d2c2e2d3f1e5 44 DigitalOut LED(DEBUG_LED);
jtrojan 4:ea7c4356f84c 45
jtrojan 4:ea7c4356f84c 46 // sample code from mbed nucleo library
jtrojan 4:ea7c4356f84c 47 //mbed Declaration left here as example
jtrojan 4:ea7c4356f84c 48 AnalogIn analog_value(A0);
jtrojan 4:ea7c4356f84c 49 DigitalOut selt(LED1);
jtrojan 4:ea7c4356f84c 50 //ST HAL For ADC since we want to access the internal channels
jtrojan 4:ea7c4356f84c 51 ADC_HandleTypeDef hadc1;
mbed_official 0:bdbd3d6fc5d5 52
JoeMiller 2:d2c2e2d3f1e5 53 SPI mag(SPI_MOSI, SPI_MISO, SPI_SCK);
JoeMiller 2:d2c2e2d3f1e5 54 SDFileSystem sd(SD_MOSI, SD_MISO, SD_SCK, SD_CSN, "sd"); // the pinout on the mbed Cool Components workshop board
JoeMiller 2:d2c2e2d3f1e5 55 Serial console(PA_2, PA_3,115200); // debug port
JoeMiller 2:d2c2e2d3f1e5 56 Ticker magTimer;
jtrojan 4:ea7c4356f84c 57 Timer t;
JoeMiller 2:d2c2e2d3f1e5 58
JoeMiller 2:d2c2e2d3f1e5 59 char takeAsample_F;
jtrojan 4:ea7c4356f84c 60 int islow = 1;
jtrojan 4:ea7c4356f84c 61 int nhigh = 0;
jtrojan 4:ea7c4356f84c 62 float tprev = 0;
JoeMiller 2:d2c2e2d3f1e5 63
JoeMiller 2:d2c2e2d3f1e5 64 void sampletimer() {
JoeMiller 2:d2c2e2d3f1e5 65 takeAsample_F = 1;
JoeMiller 2:d2c2e2d3f1e5 66 // printf("*");
JoeMiller 2:d2c2e2d3f1e5 67 }
JoeMiller 2:d2c2e2d3f1e5 68
JoeMiller 2:d2c2e2d3f1e5 69
mbed_official 0:bdbd3d6fc5d5 70 int main() {
jtrojan 4:ea7c4356f84c 71 t.start();
jtrojan 4:ea7c4356f84c 72 ADC_ChannelConfTypeDef sConfig; //Declare the ST HAL ADC object
JoeMiller 2:d2c2e2d3f1e5 73
jtrojan 4:ea7c4356f84c 74 /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
jtrojan 4:ea7c4356f84c 75 */
jtrojan 4:ea7c4356f84c 76 hadc1.Instance = ADC1;
jtrojan 4:ea7c4356f84c 77 hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4;
jtrojan 4:ea7c4356f84c 78 hadc1.Init.Resolution = ADC_RESOLUTION12b;
jtrojan 4:ea7c4356f84c 79 hadc1.Init.ScanConvMode = DISABLE;
jtrojan 4:ea7c4356f84c 80 hadc1.Init.ContinuousConvMode = DISABLE;
jtrojan 4:ea7c4356f84c 81 hadc1.Init.DiscontinuousConvMode = DISABLE;
jtrojan 4:ea7c4356f84c 82 hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
jtrojan 4:ea7c4356f84c 83 hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
jtrojan 4:ea7c4356f84c 84 hadc1.Init.NbrOfConversion = 1;
jtrojan 4:ea7c4356f84c 85 hadc1.Init.DMAContinuousRequests = DISABLE;
jtrojan 4:ea7c4356f84c 86 hadc1.Init.EOCSelection = EOC_SINGLE_CONV;
jtrojan 4:ea7c4356f84c 87 HAL_ADC_Init(&hadc1); //Go turn on the ADC
jtrojan 4:ea7c4356f84c 88
jtrojan 4:ea7c4356f84c 89 sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; //ADC_CHANNEL_VREFINT, ADC_CHANNEL_VBAT
jtrojan 4:ea7c4356f84c 90 sConfig.Rank = 1;
jtrojan 4:ea7c4356f84c 91
JoeMiller 2:d2c2e2d3f1e5 92 int response;
JoeMiller 2:d2c2e2d3f1e5 93 unsigned int count = 0;
JoeMiller 2:d2c2e2d3f1e5 94 char SDOK;
jtrojan 5:e4b1de08bb87 95 char disp_buffer[128];
jtrojan 5:e4b1de08bb87 96 char disp_char[32];
jtrojan 5:e4b1de08bb87 97 int dbuf_size = 0;
jtrojan 5:e4b1de08bb87 98 int X,Y,Z;
JoeMiller 2:d2c2e2d3f1e5 99 mag.lock();
jtrojan 4:ea7c4356f84c 100 // magTimer.attach(&sampletimer,SAMPLE_INTERVAL);
JoeMiller 2:d2c2e2d3f1e5 101
JoeMiller 2:d2c2e2d3f1e5 102 sel1a = sel1b = sel1c = sel2a = sel2b = sel2c = 1;
JoeMiller 2:d2c2e2d3f1e5 103
JoeMiller 2:d2c2e2d3f1e5 104
JoeMiller 2:d2c2e2d3f1e5 105 printf("\r\nVSG Datalogger\r\n");
JoeMiller 2:d2c2e2d3f1e5 106 printf("Timer interval = %f (sec)\r\n",SAMPLE_INTERVAL);
JoeMiller 2:d2c2e2d3f1e5 107 printf("Cycle Counts = %d \r\n", CYCLE_COUNT);
JoeMiller 2:d2c2e2d3f1e5 108
JoeMiller 2:d2c2e2d3f1e5 109 for(char i=0; i<6; i++) { //wakeup blink 6 times
JoeMiller 2:d2c2e2d3f1e5 110 LED = !LED;
JoeMiller 2:d2c2e2d3f1e5 111 wait(0.1F);
JoeMiller 2:d2c2e2d3f1e5 112 }
JoeMiller 2:d2c2e2d3f1e5 113 wait(1.0F);
JoeMiller 2:d2c2e2d3f1e5 114
JoeMiller 2:d2c2e2d3f1e5 115 if (debugPin == 0){
JoeMiller 2:d2c2e2d3f1e5 116 SDOK = 1; //initialize
JoeMiller 2:d2c2e2d3f1e5 117 }
JoeMiller 2:d2c2e2d3f1e5 118
JoeMiller 2:d2c2e2d3f1e5 119 printf("\r\nOpening log file for append write\r\n");
JoeMiller 2:d2c2e2d3f1e5 120 // cannot make fopen conditional on debugPin - compiler does not understand
JoeMiller 2:d2c2e2d3f1e5 121 FILE *sd = fopen("/sd/sdtest.txt", "a");
JoeMiller 2:d2c2e2d3f1e5 122 if(sd == NULL) {
JoeMiller 2:d2c2e2d3f1e5 123 printf("\r\nRetry opening log file\r\n");
JoeMiller 2:d2c2e2d3f1e5 124 wait(2);
JoeMiller 2:d2c2e2d3f1e5 125 FILE *sd = fopen("/sd/sdtest.txt", "a");
JoeMiller 2:d2c2e2d3f1e5 126 if(sd == NULL) {
JoeMiller 2:d2c2e2d3f1e5 127 printf("\r\n....one more retry opening log file\r\n");
JoeMiller 2:d2c2e2d3f1e5 128 wait(2);
JoeMiller 2:d2c2e2d3f1e5 129 FILE *sd = fopen("/sd/sdtest.txt", "a");
JoeMiller 2:d2c2e2d3f1e5 130 if(sd == NULL) {
JoeMiller 2:d2c2e2d3f1e5 131 printf("\r\n>>>>>> Could not open file for write try restarting\r\n");
JoeMiller 2:d2c2e2d3f1e5 132 SDOK = 0;
JoeMiller 2:d2c2e2d3f1e5 133 while(!debugPin); // stay here if in log mode
JoeMiller 2:d2c2e2d3f1e5 134 }
JoeMiller 2:d2c2e2d3f1e5 135 }
JoeMiller 2:d2c2e2d3f1e5 136 }
JoeMiller 2:d2c2e2d3f1e5 137
mbed_official 0:bdbd3d6fc5d5 138
JoeMiller 2:d2c2e2d3f1e5 139
JoeMiller 2:d2c2e2d3f1e5 140 if (SDOK) {
JoeMiller 2:d2c2e2d3f1e5 141 printf("LOGGING MODE\r\n");
JoeMiller 2:d2c2e2d3f1e5 142 for(char i=0; i<6; i++) { //blink 6 times to show logging mode has been initiated
JoeMiller 2:d2c2e2d3f1e5 143 LED = !LED;
JoeMiller 2:d2c2e2d3f1e5 144 wait(0.1F);
JoeMiller 2:d2c2e2d3f1e5 145 }
jtrojan 4:ea7c4356f84c 146 //fprintf(sd, "count,temp,X1a,Y1a,Z1a,X1b,Y1b,Z1b,X1c,Y1c,Z1c,X2a,Y2a,Z2a,X2b,Y2b,Z2b,X2c,Y2c,Z2c\r\n");
JoeMiller 2:d2c2e2d3f1e5 147 }
JoeMiller 2:d2c2e2d3f1e5 148
JoeMiller 2:d2c2e2d3f1e5 149
JoeMiller 2:d2c2e2d3f1e5 150 // BIST Built-In-Self-Test Mag senosrs and ASIC
JoeMiller 2:d2c2e2d3f1e5 151 // only in debug mode. Print axis OK bit flags for ZYX in that order
JoeMiller 2:d2c2e2d3f1e5 152 if (debugPin == 1) {
JoeMiller 2:d2c2e2d3f1e5 153 printf("Starting BIST (7 = all axes on this device are OK)\r\n");
JoeMiller 2:d2c2e2d3f1e5 154
JoeMiller 2:d2c2e2d3f1e5 155 sel1a = 0;
JoeMiller 2:d2c2e2d3f1e5 156 response = mag.write(BIST_REG); // BIST register addr
JoeMiller 2:d2c2e2d3f1e5 157 response = mag.write(0x8F); // Set Self test enable bit
JoeMiller 2:d2c2e2d3f1e5 158 sel1a = 1;
JoeMiller 2:d2c2e2d3f1e5 159 sel1a = 0;
JoeMiller 2:d2c2e2d3f1e5 160 response = mag.write(MAG_REG); // Mag single measurement Register
JoeMiller 2:d2c2e2d3f1e5 161 response = mag.write(ALL_AXES); // start single measurement - all Axes
JoeMiller 2:d2c2e2d3f1e5 162 sel1a = 1;
JoeMiller 2:d2c2e2d3f1e5 163 while (!rdy1a);
JoeMiller 2:d2c2e2d3f1e5 164 sel1a = 0;
JoeMiller 2:d2c2e2d3f1e5 165 response = mag.write(BIST_REG); // BIST register addr
JoeMiller 2:d2c2e2d3f1e5 166 response = mag.write(0); // Read back BIST results
JoeMiller 2:d2c2e2d3f1e5 167 sel1a = 1;
JoeMiller 2:d2c2e2d3f1e5 168 printf("1a = %d\r\n",((response>>4) & 0x07));
JoeMiller 2:d2c2e2d3f1e5 169 sel1a = 0;
JoeMiller 2:d2c2e2d3f1e5 170 response = mag.write(BIST_REG); // BIST register addr
JoeMiller 2:d2c2e2d3f1e5 171 response = mag.write(0); // Set Self test enable bit
JoeMiller 2:d2c2e2d3f1e5 172 sel1a = 1;
JoeMiller 2:d2c2e2d3f1e5 173
JoeMiller 2:d2c2e2d3f1e5 174 }
JoeMiller 2:d2c2e2d3f1e5 175
JoeMiller 2:d2c2e2d3f1e5 176
JoeMiller 2:d2c2e2d3f1e5 177 // BIST Complete
JoeMiller 2:d2c2e2d3f1e5 178
JoeMiller 2:d2c2e2d3f1e5 179 // Set Cycle Count on all 6 devices simultaniously
jtrojan 4:ea7c4356f84c 180 sel1a = 0;
JoeMiller 2:d2c2e2d3f1e5 181 response = mag.write(CC_REG); // Mag single measurement Register
JoeMiller 2:d2c2e2d3f1e5 182 for (char i=0; i<3;i++) {
jtrojan 4:ea7c4356f84c 183 response = mag.write(MCC);
jtrojan 4:ea7c4356f84c 184 response = mag.write(LCC);
JoeMiller 2:d2c2e2d3f1e5 185 }
jtrojan 4:ea7c4356f84c 186 sel1a = 1;
JoeMiller 2:d2c2e2d3f1e5 187
JoeMiller 2:d2c2e2d3f1e5 188
jtrojan 4:ea7c4356f84c 189 //if (debugPin) printf("count,temp,X1a,Y1a,Z1a,X1b,Y1b,Z1b,X1c,Y1c,Z1c,X2a,Y2a,Z2a,X2b,Y2b,Z2b,X2c,Y2c,Z2c\r\n");
JoeMiller 2:d2c2e2d3f1e5 190
JoeMiller 2:d2c2e2d3f1e5 191 // log start delay when Flash card datalogging to give to to button up and place unit
JoeMiller 2:d2c2e2d3f1e5 192 if (SDOK) {
JoeMiller 2:d2c2e2d3f1e5 193 LED = 1; // LED to show logging is in wait phase
JoeMiller 2:d2c2e2d3f1e5 194 wait(SAMPLE_DELAY);
mbed_official 0:bdbd3d6fc5d5 195 }
jtrojan 4:ea7c4356f84c 196
jtrojan 4:ea7c4356f84c 197 sel1a = 0;
jtrojan 4:ea7c4356f84c 198 response = mag.write(CMM_REG); // Mag single measurement Register
jtrojan 4:ea7c4356f84c 199 response = mag.write(ALL_AXES+START_BIT); // start single measurement - all Axes
jtrojan 4:ea7c4356f84c 200 sel1a = 1;
jtrojan 5:e4b1de08bb87 201 //Now go read the STM internal channel selected above
jtrojan 5:e4b1de08bb87 202 HAL_ADC_ConfigChannel(&hadc1, &sConfig);
jtrojan 5:e4b1de08bb87 203 HAL_ADC_Start(&hadc1); // Start conversion
jtrojan 5:e4b1de08bb87 204
JoeMiller 2:d2c2e2d3f1e5 205
JoeMiller 2:d2c2e2d3f1e5 206 while(count < MAX_COUNT) {
jtrojan 4:ea7c4356f84c 207 if (islow > 0) {
jtrojan 4:ea7c4356f84c 208 sel1a = 0;
jtrojan 4:ea7c4356f84c 209 response = mag.write(TMRC_REG); // Mag continuous measurement Register
jtrojan 4:ea7c4356f84c 210 response = mag.write(TMRC_VLOW); // start continuous measurement - all Axes
jtrojan 4:ea7c4356f84c 211 sel1a = 1;
jtrojan 4:ea7c4356f84c 212 islow = 0;
jtrojan 4:ea7c4356f84c 213 nhigh = 0;
JoeMiller 2:d2c2e2d3f1e5 214 }
jtrojan 4:ea7c4356f84c 215 else {
jtrojan 4:ea7c4356f84c 216 if (nhigh < 1) {
jtrojan 4:ea7c4356f84c 217 sel1a = 0;
jtrojan 4:ea7c4356f84c 218 response = mag.write(TMRC_REG); // Mag continuous measurement Register
jtrojan 4:ea7c4356f84c 219 response = mag.write(TMRC_VHIGH); // start continuous measurement - all Axes
jtrojan 4:ea7c4356f84c 220 sel1a = 1;
jtrojan 4:ea7c4356f84c 221 }
jtrojan 4:ea7c4356f84c 222 nhigh++;
jtrojan 4:ea7c4356f84c 223 if (nhigh > 2) islow = 1;
jtrojan 4:ea7c4356f84c 224 }
jtrojan 4:ea7c4356f84c 225
jtrojan 4:ea7c4356f84c 226
jtrojan 4:ea7c4356f84c 227 while (!(rdy1a)){
jtrojan 4:ea7c4356f84c 228 wait_us(10); // required
jtrojan 4:ea7c4356f84c 229 // spin here until all Data Ready signals go high
jtrojan 4:ea7c4356f84c 230 }
jtrojan 4:ea7c4356f84c 231
jtrojan 4:ea7c4356f84c 232 /*while(!takeAsample_F){
jtrojan 4:ea7c4356f84c 233 wait_us(10); // required
jtrojan 4:ea7c4356f84c 234 }*/
JoeMiller 2:d2c2e2d3f1e5 235 takeAsample_F = 0;
JoeMiller 2:d2c2e2d3f1e5 236
jtrojan 4:ea7c4356f84c 237 // Wait end of conversion and get value
jtrojan 4:ea7c4356f84c 238 //if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
jtrojan 4:ea7c4356f84c 239 uint16_t value = HAL_ADC_GetValue(&hadc1); //}
jtrojan 5:e4b1de08bb87 240 //Now go read the STM internal channel selected above
jtrojan 5:e4b1de08bb87 241 HAL_ADC_Start(&hadc1); // Start conversion
jtrojan 5:e4b1de08bb87 242
jtrojan 5:e4b1de08bb87 243
JoeMiller 2:d2c2e2d3f1e5 244
JoeMiller 2:d2c2e2d3f1e5 245 sel1a = 0;
JoeMiller 2:d2c2e2d3f1e5 246 response = mag.write(MX_REG); // Read back mag data
JoeMiller 2:d2c2e2d3f1e5 247 response = mag.write(0);
jtrojan 5:e4b1de08bb87 248 X = response << 16;
JoeMiller 2:d2c2e2d3f1e5 249 response = mag.write(0);
jtrojan 5:e4b1de08bb87 250 X += (response << 8);
JoeMiller 2:d2c2e2d3f1e5 251 response = mag.write(0);
jtrojan 5:e4b1de08bb87 252 X += response;
JoeMiller 2:d2c2e2d3f1e5 253 response = mag.write(0);
jtrojan 5:e4b1de08bb87 254 Y = response << 16;
JoeMiller 2:d2c2e2d3f1e5 255 response = mag.write(0);
jtrojan 5:e4b1de08bb87 256 Y += (response << 8);
JoeMiller 2:d2c2e2d3f1e5 257 response = mag.write(0);
jtrojan 5:e4b1de08bb87 258 Y += response;
JoeMiller 2:d2c2e2d3f1e5 259 response = mag.write(0);
jtrojan 5:e4b1de08bb87 260 Z = response << 16;
JoeMiller 2:d2c2e2d3f1e5 261 response = mag.write(0);
jtrojan 5:e4b1de08bb87 262 Z += (response << 8);
jtrojan 5:e4b1de08bb87 263 response = mag.write(0);
jtrojan 5:e4b1de08bb87 264 Z += response;
JoeMiller 2:d2c2e2d3f1e5 265 sel1a = 1;
jtrojan 4:ea7c4356f84c 266
jtrojan 4:ea7c4356f84c 267 // send/save data after receiving it
jtrojan 5:e4b1de08bb87 268 if (X > (0x07FFFFF)) X -= 0x1000000;
jtrojan 5:e4b1de08bb87 269 if (Y > (0x07FFFFF)) Y -= 0x1000000;
jtrojan 5:e4b1de08bb87 270 if (Z > (0x07FFFFF)) Z -= 0x1000000;
jtrojan 5:e4b1de08bb87 271
jtrojan 5:e4b1de08bb87 272
jtrojan 5:e4b1de08bb87 273 if (SDOK) {
jtrojan 5:e4b1de08bb87 274 sprintf(disp_char,"%d,%0.3f,%i, %d,%d,%d\r\n",count,t.read(),value,X,Y,Z);
jtrojan 5:e4b1de08bb87 275 }
jtrojan 5:e4b1de08bb87 276 else {
jtrojan 5:e4b1de08bb87 277 sprintf(disp_char,"%d,%0.3f,%i, %d,%d,%d\r\n",count,t.read(),value,X,Y,Z);
jtrojan 5:e4b1de08bb87 278 }
JoeMiller 2:d2c2e2d3f1e5 279
jtrojan 5:e4b1de08bb87 280 if (nhigh == 0) {
jtrojan 5:e4b1de08bb87 281 strcpy(disp_buffer,disp_char);
jtrojan 5:e4b1de08bb87 282 }
jtrojan 5:e4b1de08bb87 283 else {
jtrojan 5:e4b1de08bb87 284 strcat(disp_buffer,disp_char);
jtrojan 5:e4b1de08bb87 285 }
jtrojan 5:e4b1de08bb87 286
jtrojan 5:e4b1de08bb87 287 if (nhigh > 2) {
jtrojan 5:e4b1de08bb87 288 if (debugPin) { //SDOK
jtrojan 5:e4b1de08bb87 289 printf("%s",disp_buffer);
jtrojan 4:ea7c4356f84c 290 }
jtrojan 5:e4b1de08bb87 291 else {
jtrojan 5:e4b1de08bb87 292 fprintf(sd,"%s",disp_buffer);
jtrojan 5:e4b1de08bb87 293 //printf("%s",disp_buffer);
jtrojan 5:e4b1de08bb87 294 }
jtrojan 4:ea7c4356f84c 295 }
jtrojan 5:e4b1de08bb87 296 count++;
JoeMiller 2:d2c2e2d3f1e5 297 LED = !LED;
JoeMiller 2:d2c2e2d3f1e5 298
JoeMiller 2:d2c2e2d3f1e5 299 } // end of while(1)
JoeMiller 2:d2c2e2d3f1e5 300
JoeMiller 2:d2c2e2d3f1e5 301
JoeMiller 2:d2c2e2d3f1e5 302 if (!debugPin) {
JoeMiller 2:d2c2e2d3f1e5 303 // optional get SDCard available space
JoeMiller 2:d2c2e2d3f1e5 304 // FATFS* fs;
JoeMiller 2:d2c2e2d3f1e5 305 // DWORD fre_clust;
JoeMiller 2:d2c2e2d3f1e5 306 // f_getfree("0:",&fre_clust,&fs);
JoeMiller 2:d2c2e2d3f1e5 307 // const float frs = float(fs->csize)*float(fs->free_clust)
JoeMiller 2:d2c2e2d3f1e5 308 // #if _MAX_SS != 512
JoeMiller 2:d2c2e2d3f1e5 309 // *(fs->ssize);
JoeMiller 2:d2c2e2d3f1e5 310 // #else
JoeMiller 2:d2c2e2d3f1e5 311 // *512;
JoeMiller 2:d2c2e2d3f1e5 312 // #endif
JoeMiller 2:d2c2e2d3f1e5 313 // printf("free space = %g MB, %g KB\r\n", frs/1048576.0, frs/1024.0);
JoeMiller 2:d2c2e2d3f1e5 314
JoeMiller 2:d2c2e2d3f1e5 315 fclose(sd);
JoeMiller 2:d2c2e2d3f1e5 316
JoeMiller 2:d2c2e2d3f1e5 317 }
JoeMiller 2:d2c2e2d3f1e5 318
JoeMiller 2:d2c2e2d3f1e5 319 LED = 0;
JoeMiller 2:d2c2e2d3f1e5 320 printf("\r\nDONE\r\n");
JoeMiller 2:d2c2e2d3f1e5 321
JoeMiller 2:d2c2e2d3f1e5 322 magTimer.detach();
JoeMiller 2:d2c2e2d3f1e5 323 mag.unlock();
jtrojan 4:ea7c4356f84c 324 t.stop();
mbed_official 0:bdbd3d6fc5d5 325 }