aggregator code initial version add plot menu to continuously print #sensor, V, I on uart

Dependencies:   mbed

Committer:
vincenxp
Date:
Tue Mar 26 08:37:58 2019 +0000
Revision:
0:667d2b410f9a
initial version; add plot menu to continuously print #sensor, V, I on uart

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vincenxp 0:667d2b410f9a 1 /*******************************************************************************
vincenxp 0:667d2b410f9a 2 *
vincenxp 0:667d2b410f9a 3 * MIT License (https://spdx.org/licenses/MIT.html)
vincenxp 0:667d2b410f9a 4 * Copyright 2018 NXP
vincenxp 0:667d2b410f9a 5 *
vincenxp 0:667d2b410f9a 6 * MBED code for FRDM-KL25Z aggregator. Configures and triggers "smart" sensors.
vincenxp 0:667d2b410f9a 7 * Aggregates data and sends up the line to a host computer over USB serial.
vincenxp 0:667d2b410f9a 8 * Other FRDM boards (K64F or K66F) may be used for ethernet connection or for
vincenxp 0:667d2b410f9a 9 * more local memory or faster processing speed.
vincenxp 0:667d2b410f9a 10 *
vincenxp 0:667d2b410f9a 11 *
vincenxp 0:667d2b410f9a 12 * !!! 3Dec18: This now appears to be fixed with current version of library..
vincenxp 0:667d2b410f9a 13 * !!! must use mbed-2 from 20 Mar 2018 or serial port won't work !!!
vincenxp 0:667d2b410f9a 14 * !!! do not update mbed library... !!!
vincenxp 0:667d2b410f9a 15 *
vincenxp 0:667d2b410f9a 16 ********************************************************************************/
vincenxp 0:667d2b410f9a 17
vincenxp 0:667d2b410f9a 18 #include "mbed.h"
vincenxp 0:667d2b410f9a 19
vincenxp 0:667d2b410f9a 20 // Custom setup
vincenxp 0:667d2b410f9a 21 #define CUSTOM 1
vincenxp 0:667d2b410f9a 22
vincenxp 0:667d2b410f9a 23 char version_info[] = "3 Dec 2018"; // date info...
vincenxp 0:667d2b410f9a 24
vincenxp 0:667d2b410f9a 25 Serial uart(USBTX, USBRX); // standard FRDM board USBx
vincenxp 0:667d2b410f9a 26
vincenxp 0:667d2b410f9a 27 // set up GPIO connections...
vincenxp 0:667d2b410f9a 28 DigitalOut reset(PTB0); // PTA1 on smart sensor board
vincenxp 0:667d2b410f9a 29 DigitalOut interrupt(PTB1); // PTA0 on smart sensor board
vincenxp 0:667d2b410f9a 30 const int sensors = 14;
vincenxp 0:667d2b410f9a 31 DigitalOut select[sensors] = // PTA2 on smart sensor board
vincenxp 0:667d2b410f9a 32 { (PTD4), (PTA12), (PTA4), (PTA5), (PTC8), (PTC9), (PTA13),
vincenxp 0:667d2b410f9a 33 (PTD5), (PTD0), (PTD2), (PTD3), (PTD1), (PTB3), (PTB2)};
vincenxp 0:667d2b410f9a 34 I2C i2c(PTE0, PTE1);
vincenxp 0:667d2b410f9a 35
vincenxp 0:667d2b410f9a 36 int addr8bit = 0x48 << 1; // default start addr for communication with sensors
vincenxp 0:667d2b410f9a 37
vincenxp 0:667d2b410f9a 38 // multipliers of ten used for decompressing data...
vincenxp 0:667d2b410f9a 39 // *note* this array fails when it's not a const. index 4 returns zero for some
vincenxp 0:667d2b410f9a 40 // reason... maybe mbed, not sure... seems to be mbed-2 related...
vincenxp 0:667d2b410f9a 41 const float pow10[14] = {1.0, 1.0e-1, 1.0e-2, 1.0e-3, 1.0e-4, 1.0e-5, 1.0e-6,
vincenxp 0:667d2b410f9a 42 1.0e-7, 1.0e-8, 1.0e-9, 1.0e-10, 1.0e-11, 1.0e-12, 1.0e-13};
vincenxp 0:667d2b410f9a 43
vincenxp 0:667d2b410f9a 44
vincenxp 0:667d2b410f9a 45 // some more variables...
vincenxp 0:667d2b410f9a 46 int n, i, j, k, status, temp;
vincenxp 0:667d2b410f9a 47 #if (CUSTOM == 1)
vincenxp 0:667d2b410f9a 48 int delay=0; // starting delay for measurement updates...
vincenxp 0:667d2b410f9a 49 #else
vincenxp 0:667d2b410f9a 50 int delay=500000; // starting delay for measurement updates...
vincenxp 0:667d2b410f9a 51 #endif
vincenxp 0:667d2b410f9a 52 long int count=0;
vincenxp 0:667d2b410f9a 53 char cmd[20]; // buffer for holding data sent to/from sensor boards
vincenxp 0:667d2b410f9a 54 char params[sensors][10];// array to keep sensor parameter data...
vincenxp 0:667d2b410f9a 55 bool deebug=false; // flag to print extra stuff for debug...
vincenxp 0:667d2b410f9a 56 float v1, v2, i1, i2; // for holding full float vs. compressed 3-sigfig measurements
vincenxp 0:667d2b410f9a 57 bool full = false; // boolean to control whether full binary numbers sent
vincenxp 0:667d2b410f9a 58 bool gui = true; // flag to print data out in compressed format
vincenxp 0:667d2b410f9a 59 bool plot = true; // flag use to send data in a plot-able format
vincenxp 0:667d2b410f9a 60 bool barg = false; // flag for bar graph...
vincenxp 0:667d2b410f9a 61
vincenxp 0:667d2b410f9a 62 // timer so we can time how long things take...
vincenxp 0:667d2b410f9a 63 Timer t;
vincenxp 0:667d2b410f9a 64
vincenxp 0:667d2b410f9a 65 // set up various arrays related to smart sensors...
vincenxp 0:667d2b410f9a 66 bool present[sensors] = { false, false }; // whether or not a sensor is present
vincenxp 0:667d2b410f9a 67 bool continuous = true; // flag for making continuous vs. triggered measurements...
vincenxp 0:667d2b410f9a 68 // this array of addresses also needed to be made a const array or
vincenxp 0:667d2b410f9a 69 // some values would inexplicably change and cause I2C errors
vincenxp 0:667d2b410f9a 70 // (because the address in the array gets changed somehow)... const fixes...
vincenxp 0:667d2b410f9a 71 // this seems to be mbed-2 related...
vincenxp 0:667d2b410f9a 72 const short int address[sensors] = // assigned address for each sensor
vincenxp 0:667d2b410f9a 73 { 0x50<<1, 0x51<<1, 0x52<<1, 0x53<<1, 0x54<<1,
vincenxp 0:667d2b410f9a 74 0x55<<1, 0x56<<1, 0x57<<1, 0x58<<1, 0x59<<1,
vincenxp 0:667d2b410f9a 75 0x5a<<1, 0x5b<<1, 0x5c<<1, 0x5d<<1 };
vincenxp 0:667d2b410f9a 76
vincenxp 0:667d2b410f9a 77 // this union allows easily converting float value to bare bytes and back again...
vincenxp 0:667d2b410f9a 78 union u_tag {
vincenxp 0:667d2b410f9a 79 char b[4];
vincenxp 0:667d2b410f9a 80 float fval;
vincenxp 0:667d2b410f9a 81 int bobo;
vincenxp 0:667d2b410f9a 82 } volt[2], curr[2]; // voltage and current value from sensor
vincenxp 0:667d2b410f9a 83
vincenxp 0:667d2b410f9a 84
vincenxp 0:667d2b410f9a 85
vincenxp 0:667d2b410f9a 86 // function that sends measurement trigger pulse to all sensors, singalling
vincenxp 0:667d2b410f9a 87 // them to take a measurement which will be subsequently and sequentially read...
vincenxp 0:667d2b410f9a 88 void send_trigger(){
vincenxp 0:667d2b410f9a 89 interrupt = 1;
vincenxp 0:667d2b410f9a 90 wait_us(50);
vincenxp 0:667d2b410f9a 91 interrupt = 0;
vincenxp 0:667d2b410f9a 92 }
vincenxp 0:667d2b410f9a 93
vincenxp 0:667d2b410f9a 94
vincenxp 0:667d2b410f9a 95
vincenxp 0:667d2b410f9a 96 // main code starts here...
vincenxp 0:667d2b410f9a 97 int main() {
vincenxp 0:667d2b410f9a 98
vincenxp 0:667d2b410f9a 99 // set things up...
vincenxp 0:667d2b410f9a 100 reset = 0; // place sensors in reset
vincenxp 0:667d2b410f9a 101 interrupt = 0; // place trigger line low
vincenxp 0:667d2b410f9a 102 for (k=0; k<sensors; k++) select[k] = 1; // set each sensor's select line high
vincenxp 0:667d2b410f9a 103
vincenxp 0:667d2b410f9a 104 i2c.frequency(400000); // set I2C frequency
vincenxp 0:667d2b410f9a 105 uart.baud(115200); // set UART baud rate
vincenxp 0:667d2b410f9a 106 uart.printf("\r\n\r\n\e[2J%s\r\nI'm here...\r\n ", version_info); // signal that we're off and running...
vincenxp 0:667d2b410f9a 107 // where \e[2J clears the screen...
vincenxp 0:667d2b410f9a 108
vincenxp 0:667d2b410f9a 109 // loop forever (although, as code has evolved, this loop never completes...)
vincenxp 0:667d2b410f9a 110 while(1) {
vincenxp 0:667d2b410f9a 111 reset = 0; // issue a global reset
vincenxp 0:667d2b410f9a 112 wait(0.01); // wait a bit
vincenxp 0:667d2b410f9a 113 reset = 1; // release reset
vincenxp 0:667d2b410f9a 114 count++; // overall iteration count
vincenxp 0:667d2b410f9a 115 uart.printf("\r\n\r\nReleased reset... %d\r\n", count);
vincenxp 0:667d2b410f9a 116
vincenxp 0:667d2b410f9a 117 wait(0.0005); // wait a little bit...
vincenxp 0:667d2b410f9a 118
vincenxp 0:667d2b410f9a 119 // iterate to identify and configure each connected sensor...
vincenxp 0:667d2b410f9a 120 for (k=0; k<sensors; k++){ // loop over all sensors
vincenxp 0:667d2b410f9a 121 present[k] = false; // set presence to false before looking for sensor...
vincenxp 0:667d2b410f9a 122
vincenxp 0:667d2b410f9a 123 select[k] = 0; // smake sensor select line low to start address reassignment
vincenxp 0:667d2b410f9a 124 uart.printf("Asserted select[%X] line low... \r\n", k);
vincenxp 0:667d2b410f9a 125
vincenxp 0:667d2b410f9a 126 wait(0.001); // wait a bit...
vincenxp 0:667d2b410f9a 127
vincenxp 0:667d2b410f9a 128 // write the new address to sensor and then read it back to verify...
vincenxp 0:667d2b410f9a 129 cmd[0] = address[k];
vincenxp 0:667d2b410f9a 130 n = i2c.write( addr8bit, cmd, 1);
vincenxp 0:667d2b410f9a 131 uart.printf("Wrote: %x error %d \r\n", cmd[0], n);
vincenxp 0:667d2b410f9a 132 if (n==0) present[k] = true; // a sensor IS connected on this select line, since it ACKed
vincenxp 0:667d2b410f9a 133 if (present[k]){
vincenxp 0:667d2b410f9a 134 cmd[0] = 0; // clear cmd...
vincenxp 0:667d2b410f9a 135 wait(0.0001);
vincenxp 0:667d2b410f9a 136 n = i2c.read( addr8bit, cmd, 1);
vincenxp 0:667d2b410f9a 137 uart.printf(" ===> Read back: %x error %d\r\n", cmd[0], n);
vincenxp 0:667d2b410f9a 138 // here we're reading it back but we're not actually checking the value...
vincenxp 0:667d2b410f9a 139 // just assuming that since we were able to write, we'll read the same
vincenxp 0:667d2b410f9a 140 // value back...
vincenxp 0:667d2b410f9a 141 } else i2c.stop(); // not present, error condition...
vincenxp 0:667d2b410f9a 142
vincenxp 0:667d2b410f9a 143 wait(0.0001);
vincenxp 0:667d2b410f9a 144 select[k] = 1; // set sensor's select line high, telling it to change its I2C addr
vincenxp 0:667d2b410f9a 145 uart.printf("Sending select[%X] back high to change address... \r\n", k);
vincenxp 0:667d2b410f9a 146
vincenxp 0:667d2b410f9a 147 if (present[k]) {
vincenxp 0:667d2b410f9a 148 // now check that the address change was successful...
vincenxp 0:667d2b410f9a 149 // write to the new address, there is currently no error out
vincenxp 0:667d2b410f9a 150 // if sensor does not respond...
vincenxp 0:667d2b410f9a 151 wait(0.0001);
vincenxp 0:667d2b410f9a 152 cmd[0]=0xff;
vincenxp 0:667d2b410f9a 153 n = i2c.write( address[k], cmd, 1);
vincenxp 0:667d2b410f9a 154 if (n==0) { uart.printf("\r\nSensor %X configured... now to test... \r\n\r\n", k); }
vincenxp 0:667d2b410f9a 155 else present[k]=false;
vincenxp 0:667d2b410f9a 156 } // endif
vincenxp 0:667d2b410f9a 157
vincenxp 0:667d2b410f9a 158 if (present[k]) {
vincenxp 0:667d2b410f9a 159 // read parameters from sensor
vincenxp 0:667d2b410f9a 160 // Need to do this sequence without a trigger, since that'll cause an interrupt
vincenxp 0:667d2b410f9a 161 // and clobber any pre-loaded paramter data...
vincenxp 0:667d2b410f9a 162 cmd[0] = 99; // make a dummy write in order to pre-load parameter buffer...
vincenxp 0:667d2b410f9a 163 n = i2c.write( address[k], cmd, 2 );
vincenxp 0:667d2b410f9a 164 wait(0.001);
vincenxp 0:667d2b410f9a 165 // here's where we actually read the parameters:
vincenxp 0:667d2b410f9a 166 n = i2c.read( address[k], params[k], 9 ); // select is already high from above, so we don't need to do it again...
vincenxp 0:667d2b410f9a 167 uart.printf("\r\n params %d %d %d %d %d %d \r\n", params[k][0], params[k][1]*8, params[k][2]*8, params[k][3]*8, params[k][4]*8, params[k][5]);
vincenxp 0:667d2b410f9a 168
vincenxp 0:667d2b410f9a 169 #if (CUSTOM == 0)
vincenxp 0:667d2b410f9a 170 // now add one to each parameter to make sure we can write them all...
vincenxp 0:667d2b410f9a 171 // will see below if it worked... (we'll see it down below)
vincenxp 0:667d2b410f9a 172 for (i=0; i<6; i++){
vincenxp 0:667d2b410f9a 173 cmd[0] = i;
vincenxp 0:667d2b410f9a 174 cmd[1] = params[k][i]+1;
vincenxp 0:667d2b410f9a 175 uart.printf(" %d, %d, %d %d \r\n", k, i, cmd[0], cmd[1]);
vincenxp 0:667d2b410f9a 176 n = i2c.write( address[k], cmd, 2 );
vincenxp 0:667d2b410f9a 177 wait(0.01);
vincenxp 0:667d2b410f9a 178 }
vincenxp 0:667d2b410f9a 179 #endif
vincenxp 0:667d2b410f9a 180
vincenxp 0:667d2b410f9a 181 }
vincenxp 0:667d2b410f9a 182
vincenxp 0:667d2b410f9a 183 } // for k
vincenxp 0:667d2b410f9a 184
vincenxp 0:667d2b410f9a 185 wait(0.0005);
vincenxp 0:667d2b410f9a 186
vincenxp 0:667d2b410f9a 187 // ******************************************************************
vincenxp 0:667d2b410f9a 188 // read data from all connected sensors...
vincenxp 0:667d2b410f9a 189 // ******************************************************************
vincenxp 0:667d2b410f9a 190 while (1) {
vincenxp 0:667d2b410f9a 191 //if (!gui) uart.printf("\r\nTriggering measurement... \r\n");
vincenxp 0:667d2b410f9a 192 //else uart.printf("\e[2J\r\n"); // # (A) (V)\r\n");
vincenxp 0:667d2b410f9a 193 t.start();
vincenxp 0:667d2b410f9a 194 send_trigger(); // trigger tells all connected sensors to make the measurements
vincenxp 0:667d2b410f9a 195 #if (CUSTOM == 0)
vincenxp 0:667d2b410f9a 196 wait_ms(8.75); // need to give enough time to make them...
vincenxp 0:667d2b410f9a 197 #endif
vincenxp 0:667d2b410f9a 198 for (k=0; k<sensors; k++){ // iterate over all sensors
vincenxp 0:667d2b410f9a 199 if (present[k]){ // if a sensor is present, read its data
vincenxp 0:667d2b410f9a 200
vincenxp 0:667d2b410f9a 201 if (full){
vincenxp 0:667d2b410f9a 202 // full floating point data tranfer...
vincenxp 0:667d2b410f9a 203 n = i2c.read( address[k], cmd, 9 );
vincenxp 0:667d2b410f9a 204 if (deebug && !gui) uart.printf(" I2C adddr: 0x%X %X\r\n", address[k], k);
vincenxp 0:667d2b410f9a 205 // unstuff the bytes back into floating point values...
vincenxp 0:667d2b410f9a 206 for (j=0; j<4; j++) curr[k].b[j] = cmd[j];
vincenxp 0:667d2b410f9a 207 for (j=0; j<4; j++) volt[k].b[j] = cmd[j+4];
vincenxp 0:667d2b410f9a 208 v1 = volt[k].fval; i1 = curr[k].fval;
vincenxp 0:667d2b410f9a 209 if (!gui) uart.printf(" Sensor %X: ===> %4.2e %4.2e 0x%x err %d\r\n", k, volt[k].fval, curr[k].fval, cmd[8], n);
vincenxp 0:667d2b410f9a 210 } // if (full)
vincenxp 0:667d2b410f9a 211
vincenxp 0:667d2b410f9a 212 // compressed data transfer with status nibble: 2 float values of 3 sig figs each + status nibble:
vincenxp 0:667d2b410f9a 213 // where each value is 3 digits, single digit exponent, and two status bits packed into 2 bytes
vincenxp 0:667d2b410f9a 214 // four bytes in total...
vincenxp 0:667d2b410f9a 215 select[k] = 0; // indicate that we want to read compressed data from sensor...
vincenxp 0:667d2b410f9a 216 n = i2c.read( address[k], cmd, 4 );
vincenxp 0:667d2b410f9a 217 select[k] = 1;
vincenxp 0:667d2b410f9a 218 // pull out status bits from the four received bytes...
vincenxp 0:667d2b410f9a 219 status = (cmd[0]&(1<<7))>>4 | (cmd[1]&(1<<7))>>5 | (cmd[2]&(1<<7))>>6 | (cmd[3]&(1<<7))>>7 ;
vincenxp 0:667d2b410f9a 220 if (deebug && !gui) uart.printf(" %02d %02d %02d %02d %8.6f %d %8.6f %d\r\n", cmd[0]&0x7f, cmd[1]&0x7f, cmd[2]&0x7f, cmd[3]&0x7f,
vincenxp 0:667d2b410f9a 221 pow10[(int)(((cmd[1]&(0x7f)) % 10)+2)], (int) (((cmd[1]&(0x7f)) % 10)+2),
vincenxp 0:667d2b410f9a 222 pow10[(int)(((cmd[3]&(0x7f)) % 10)+2)], (int) (((cmd[3]&(0x7f)) % 10)+2));
vincenxp 0:667d2b410f9a 223 // now reconstruct the two float values...
vincenxp 0:667d2b410f9a 224 curr[k].fval = (float) ( (cmd[0]&(0x7f))*10 + (cmd[1]&(0x7f))/10 ) * pow10[((cmd[1]&(0x7f)) % 10)+2];
vincenxp 0:667d2b410f9a 225 volt[k].fval = (float) ( (cmd[2]&(0x7f))*10 + (cmd[3]&(0x7f))/10 ) * pow10[((cmd[3]&(0x7f)) % 10)+2];
vincenxp 0:667d2b410f9a 226 v2 = volt[k].fval; i2 = curr[k].fval;
vincenxp 0:667d2b410f9a 227 if (!gui) uart.printf(" compd %X: ===> %4.2e V %4.2e A %d err %d\r\n", k, volt[k].fval, curr[k].fval, status, n);
vincenxp 0:667d2b410f9a 228 if (deebug && !gui) printf(" volt? %s current? %s \r\n",
vincenxp 0:667d2b410f9a 229 (abs(v1-v2)/v1 <0.05) ? "true" : "false",
vincenxp 0:667d2b410f9a 230 (abs(i1-i2)/i1 <0.05) ? "true" : "false");
vincenxp 0:667d2b410f9a 231
vincenxp 0:667d2b410f9a 232 // if we're in gui mode, this is the only line that'll print out for each attached sensor...
vincenxp 0:667d2b410f9a 233 if (gui && full) uart.printf(" %X %4.2e %4.2e %4.2e %4.2e \r\n", k, v1, v2, i1, i2);
vincenxp 0:667d2b410f9a 234 else {
vincenxp 0:667d2b410f9a 235 if (plot) uart.printf("%X %5.3f %8.6f\r\n", k , v2, i2);
vincenxp 0:667d2b410f9a 236 //uart.printf(" #%X %4.2e V %4.2e A ", k , v2, i2);
vincenxp 0:667d2b410f9a 237 if (barg) for (j=0; j<40*i2; j++) uart.printf("*");
vincenxp 0:667d2b410f9a 238 uart.printf("\r");
vincenxp 0:667d2b410f9a 239 } // else
vincenxp 0:667d2b410f9a 240
vincenxp 0:667d2b410f9a 241 // parameter readback from sensor
vincenxp 0:667d2b410f9a 242 // !! Smart Sensor's selelct line needs to be high while doing this !!
vincenxp 0:667d2b410f9a 243 // Need to do this sequence without a trigger, since that'll cause an interrupt
vincenxp 0:667d2b410f9a 244 // and clobber any pre-loaded paramter data...
vincenxp 0:667d2b410f9a 245 if (deebug && !gui) {
vincenxp 0:667d2b410f9a 246 cmd[0] = 99; // dummy write to pre-load parameter buffer...
vincenxp 0:667d2b410f9a 247 n = i2c.write( address[k], cmd, 2 );
vincenxp 0:667d2b410f9a 248 n = i2c.read( address[k], params[k], 9 ); // select is already high from above, so we don't need to do it again...
vincenxp 0:667d2b410f9a 249 uart.printf(" params %d %d %d %d %d %d \r\n", params[k][0], params[k][1]*8, params[k][2]*8, params[k][3]*8, params[k][4]*8, params[k][5]);
vincenxp 0:667d2b410f9a 250 }
vincenxp 0:667d2b410f9a 251 }
vincenxp 0:667d2b410f9a 252 else{
vincenxp 0:667d2b410f9a 253 //uart.printf(" !!! device %d missing... \r\n", k);
vincenxp 0:667d2b410f9a 254 } //endif
vincenxp 0:667d2b410f9a 255 } // for k
vincenxp 0:667d2b410f9a 256 // wait_ms(250);
vincenxp 0:667d2b410f9a 257 while (t.read_us()<delay){
vincenxp 0:667d2b410f9a 258 // wait until delay worth of time has elapsed...
vincenxp 0:667d2b410f9a 259 }
vincenxp 0:667d2b410f9a 260 t.stop();
vincenxp 0:667d2b410f9a 261 t.reset();
vincenxp 0:667d2b410f9a 262
vincenxp 0:667d2b410f9a 263 if (!continuous) while (!uart.readable()); // wait here until we get text, if in triggered mode...
vincenxp 0:667d2b410f9a 264 while (uart.readable()){
vincenxp 0:667d2b410f9a 265 temp = uart.getc();
vincenxp 0:667d2b410f9a 266 if (deebug) printf ("%d\r\n", temp);
vincenxp 0:667d2b410f9a 267 if (temp==(int) '+') {
vincenxp 0:667d2b410f9a 268 delay += 100000;
vincenxp 0:667d2b410f9a 269 if (delay > 2000000) delay = 2000000;
vincenxp 0:667d2b410f9a 270 }
vincenxp 0:667d2b410f9a 271 if (temp==(int) '-') {
vincenxp 0:667d2b410f9a 272 delay -=100000;
vincenxp 0:667d2b410f9a 273 #if (CUSTOM == 0)
vincenxp 0:667d2b410f9a 274 if (delay < 14300) delay = 14300;
vincenxp 0:667d2b410f9a 275 #else
vincenxp 0:667d2b410f9a 276 if (delay < 0) delay = 0;
vincenxp 0:667d2b410f9a 277 #endif
vincenxp 0:667d2b410f9a 278 }
vincenxp 0:667d2b410f9a 279 if (temp==(int) 't') {
vincenxp 0:667d2b410f9a 280 uart.printf ("\r\nDelay value = %d\r\n", delay);
vincenxp 0:667d2b410f9a 281 }
vincenxp 0:667d2b410f9a 282 if (temp==(int) '_') {
vincenxp 0:667d2b410f9a 283 delay = 500000;
vincenxp 0:667d2b410f9a 284 }
vincenxp 0:667d2b410f9a 285 if (temp==(int) 'c') {
vincenxp 0:667d2b410f9a 286 continuous = !continuous;
vincenxp 0:667d2b410f9a 287 }
vincenxp 0:667d2b410f9a 288 if (temp==(int) 'd') {
vincenxp 0:667d2b410f9a 289 deebug = !deebug;
vincenxp 0:667d2b410f9a 290 }
vincenxp 0:667d2b410f9a 291 if (temp==(int) 'g') {
vincenxp 0:667d2b410f9a 292 gui = false;
vincenxp 0:667d2b410f9a 293 }
vincenxp 0:667d2b410f9a 294 if (temp==(int) 'G') {
vincenxp 0:667d2b410f9a 295 gui = true;
vincenxp 0:667d2b410f9a 296 }
vincenxp 0:667d2b410f9a 297 if (temp==(int) 'p') {
vincenxp 0:667d2b410f9a 298 plot = true;
vincenxp 0:667d2b410f9a 299 }
vincenxp 0:667d2b410f9a 300 if (temp==(int) 'b') {
vincenxp 0:667d2b410f9a 301 barg = !barg;
vincenxp 0:667d2b410f9a 302 }
vincenxp 0:667d2b410f9a 303
vincenxp 0:667d2b410f9a 304 if (temp==(int) 'h') {
vincenxp 0:667d2b410f9a 305 uart.printf("\r\n\r\n");
vincenxp 0:667d2b410f9a 306 uart.printf("+/- add/remove update time\r\n");
vincenxp 0:667d2b410f9a 307 uart.printf("_ half second update rate\r\n");
vincenxp 0:667d2b410f9a 308 uart.printf("b toggle bar graph in gui mode\r\n");
vincenxp 0:667d2b410f9a 309 uart.printf("c toggle continuous/single trigger\r\n");
vincenxp 0:667d2b410f9a 310 uart.printf("t trigger and print current delay value\r\n");
vincenxp 0:667d2b410f9a 311 uart.printf("d toggle debug flag\r\n");
vincenxp 0:667d2b410f9a 312 uart.printf("g turn off gui mode\r\n");
vincenxp 0:667d2b410f9a 313 uart.printf("G turn on gui mode\r\n");
vincenxp 0:667d2b410f9a 314 uart.printf("p plot data\r\n");
vincenxp 0:667d2b410f9a 315 uart.printf("h print this help\r\n");
vincenxp 0:667d2b410f9a 316 uart.printf("\r\n");
vincenxp 0:667d2b410f9a 317 wait(5);
vincenxp 0:667d2b410f9a 318 }
vincenxp 0:667d2b410f9a 319
vincenxp 0:667d2b410f9a 320
vincenxp 0:667d2b410f9a 321 } // while uart.readable...
vincenxp 0:667d2b410f9a 322
vincenxp 0:667d2b410f9a 323 } // while read from sensors...
vincenxp 0:667d2b410f9a 324 // *****************************************************************
vincenxp 0:667d2b410f9a 325 // end data read
vincenxp 0:667d2b410f9a 326 // *****************************************************************
vincenxp 0:667d2b410f9a 327 } // while main, should never actually fall out to here...
vincenxp 0:667d2b410f9a 328
vincenxp 0:667d2b410f9a 329 } // main