adxl362 csv output format

Committer:
APS_Lab
Date:
Thu May 16 07:02:24 2019 +0000
Revision:
0:813b34a76f24
adxl362

Who changed what in which revision?

UserRevisionLine numberNew contents of line
APS_Lab 0:813b34a76f24 1 /* mbed Microcontroller Library
APS_Lab 0:813b34a76f24 2 * Copyright (c) 2018 ARM Limited
APS_Lab 0:813b34a76f24 3 * SPDX-License-Identifier: Apache-2.0
APS_Lab 0:813b34a76f24 4 */
APS_Lab 0:813b34a76f24 5
APS_Lab 0:813b34a76f24 6 #include "mbed.h"
APS_Lab 0:813b34a76f24 7 #include "stats_report.h"
APS_Lab 0:813b34a76f24 8 #include "ADXL362.h"
APS_Lab 0:813b34a76f24 9 #include "math.h"
APS_Lab 0:813b34a76f24 10
APS_Lab 0:813b34a76f24 11 #define G_2 1.0
APS_Lab 0:813b34a76f24 12 #define G_4 2.0
APS_Lab 0:813b34a76f24 13 #define G_8 4.0
APS_Lab 0:813b34a76f24 14
APS_Lab 0:813b34a76f24 15
APS_Lab 0:813b34a76f24 16
APS_Lab 0:813b34a76f24 17 #define MODE_NORMAL 0
APS_Lab 0:813b34a76f24 18 #define MODE_LOW_POWER 1
APS_Lab 0:813b34a76f24 19 #define MODE_ULTRA_LOW_POWER 2
APS_Lab 0:813b34a76f24 20
APS_Lab 0:813b34a76f24 21 DigitalOut led1(LED1);
APS_Lab 0:813b34a76f24 22 Serial PC(USBTX, USBRX);
APS_Lab 0:813b34a76f24 23
APS_Lab 0:813b34a76f24 24 char Buf[128];
APS_Lab 0:813b34a76f24 25 char command[8];
APS_Lab 0:813b34a76f24 26 char mode[8];
APS_Lab 0:813b34a76f24 27 char val[8];
APS_Lab 0:813b34a76f24 28 int f_val;
APS_Lab 0:813b34a76f24 29
APS_Lab 0:813b34a76f24 30 int set_mode(int m);
APS_Lab 0:813b34a76f24 31 int set_freq(int v);
APS_Lab 0:813b34a76f24 32 int set_grav(int v);
APS_Lab 0:813b34a76f24 33 void set_start(void);
APS_Lab 0:813b34a76f24 34 void set_stop(void);
APS_Lab 0:813b34a76f24 35 static void clearDisplay(void);
APS_Lab 0:813b34a76f24 36 static void drawCLI(ADXL362 *adxlCtrl, AccelTemp *getData);
APS_Lab 0:813b34a76f24 37 static void draw_Raw(ADXL362 *adxlCtrl, AccelTemp *getData);
APS_Lab 0:813b34a76f24 38
APS_Lab 0:813b34a76f24 39 volatile int f_run = 0;
APS_Lab 0:813b34a76f24 40 volatile int f_wake = 0;
APS_Lab 0:813b34a76f24 41 SPI *spi1;
APS_Lab 0:813b34a76f24 42 ADXL362 *adxlCtrl;
APS_Lab 0:813b34a76f24 43 AccelTemp GetData;
APS_Lab 0:813b34a76f24 44 DigitalIn ADXL_WAKE(WAKE2);
APS_Lab 0:813b34a76f24 45
APS_Lab 0:813b34a76f24 46 void help(void);
APS_Lab 0:813b34a76f24 47
APS_Lab 0:813b34a76f24 48 // main() runs in its own thread in the OS
APS_Lab 0:813b34a76f24 49 int main()
APS_Lab 0:813b34a76f24 50 {
APS_Lab 0:813b34a76f24 51 PC.baud(115200);
APS_Lab 0:813b34a76f24 52 PC.printf("EV-COG-AD4050LZ Demo\n");
APS_Lab 0:813b34a76f24 53
APS_Lab 0:813b34a76f24 54 spi1 = new SPI(SPI1_MOSI, SPI1_MISO, SPI1_SCLK);
APS_Lab 0:813b34a76f24 55 adxlCtrl = new ADXL362(&PC, spi1);
APS_Lab 0:813b34a76f24 56
APS_Lab 0:813b34a76f24 57 clearDisplay();
APS_Lab 0:813b34a76f24 58
APS_Lab 0:813b34a76f24 59 help();
APS_Lab 0:813b34a76f24 60
APS_Lab 0:813b34a76f24 61 while (true) {
APS_Lab 0:813b34a76f24 62 // Blink LED and wait 0.5 seconds
APS_Lab 0:813b34a76f24 63 led1 = !led1;
APS_Lab 0:813b34a76f24 64 wait_ms(500);
APS_Lab 0:813b34a76f24 65
APS_Lab 0:813b34a76f24 66 PC.scanf("%s", command);
APS_Lab 0:813b34a76f24 67
APS_Lab 0:813b34a76f24 68 if(strncmp(command, "set", 3) == 0)
APS_Lab 0:813b34a76f24 69 {
APS_Lab 0:813b34a76f24 70 PC.scanf("%s",mode);
APS_Lab 0:813b34a76f24 71
APS_Lab 0:813b34a76f24 72 if(strncmp(mode, "freq", 4) == 0)
APS_Lab 0:813b34a76f24 73 {
APS_Lab 0:813b34a76f24 74 PC.scanf("%s", val);
APS_Lab 0:813b34a76f24 75 f_val = atoi(val);
APS_Lab 0:813b34a76f24 76 set_freq(f_val);
APS_Lab 0:813b34a76f24 77 }
APS_Lab 0:813b34a76f24 78 else if(strncmp(mode, "mode", 4) == 0)
APS_Lab 0:813b34a76f24 79 {
APS_Lab 0:813b34a76f24 80 PC.scanf("%s", val);
APS_Lab 0:813b34a76f24 81 f_val = atoi(val);
APS_Lab 0:813b34a76f24 82 set_mode(f_val);
APS_Lab 0:813b34a76f24 83 }
APS_Lab 0:813b34a76f24 84 else if(strncmp(mode, "grav", 4) == 0)
APS_Lab 0:813b34a76f24 85 {
APS_Lab 0:813b34a76f24 86 PC.scanf("%s", val);
APS_Lab 0:813b34a76f24 87 f_val = atoi(val);
APS_Lab 0:813b34a76f24 88 set_grav(f_val);
APS_Lab 0:813b34a76f24 89 }
APS_Lab 0:813b34a76f24 90 else if(strncmp(mode, "wakeup", 6) == 0)
APS_Lab 0:813b34a76f24 91 {
APS_Lab 0:813b34a76f24 92 PC.printf("ADXL362 wakeup mode\n");
APS_Lab 0:813b34a76f24 93 adxlCtrl->set_wakeupmode();
APS_Lab 0:813b34a76f24 94 f_wake = 1;
APS_Lab 0:813b34a76f24 95 PC.printf("ADXL362 wakeup waiting......\n");
APS_Lab 0:813b34a76f24 96 while(f_wake)
APS_Lab 0:813b34a76f24 97 {
APS_Lab 0:813b34a76f24 98 if(ADXL_WAKE.read() == 1)
APS_Lab 0:813b34a76f24 99 {
APS_Lab 0:813b34a76f24 100 f_wake = 0;
APS_Lab 0:813b34a76f24 101 PC.printf("ADXL362 Wake-up\n");
APS_Lab 0:813b34a76f24 102 led1 = 1;
APS_Lab 0:813b34a76f24 103 PC.printf("ADXL362 Condition %d\n", ADXL_WAKE.read());
APS_Lab 0:813b34a76f24 104 adxlCtrl->GetStatus();
APS_Lab 0:813b34a76f24 105 }
APS_Lab 0:813b34a76f24 106 else
APS_Lab 0:813b34a76f24 107 {
APS_Lab 0:813b34a76f24 108 PC.printf(".");
APS_Lab 0:813b34a76f24 109 }
APS_Lab 0:813b34a76f24 110 wait_ms(100);
APS_Lab 0:813b34a76f24 111 }
APS_Lab 0:813b34a76f24 112
APS_Lab 0:813b34a76f24 113
APS_Lab 0:813b34a76f24 114 }else
APS_Lab 0:813b34a76f24 115 {
APS_Lab 0:813b34a76f24 116 PC.printf("Command Invalid\n");
APS_Lab 0:813b34a76f24 117 }
APS_Lab 0:813b34a76f24 118 }
APS_Lab 0:813b34a76f24 119 else if(strncmp(command, "start", 5) == 0)
APS_Lab 0:813b34a76f24 120 {
APS_Lab 0:813b34a76f24 121 set_start();
APS_Lab 0:813b34a76f24 122 while(f_run)
APS_Lab 0:813b34a76f24 123 {
APS_Lab 0:813b34a76f24 124 adxlCtrl->SensorRead(&GetData);
APS_Lab 0:813b34a76f24 125 draw_Raw(adxlCtrl, &GetData);
APS_Lab 0:813b34a76f24 126 wait(0.2);
APS_Lab 0:813b34a76f24 127 }
APS_Lab 0:813b34a76f24 128 }
APS_Lab 0:813b34a76f24 129 //else if(strncmp(command, "stop", 4) == 0)
APS_Lab 0:813b34a76f24 130 //{
APS_Lab 0:813b34a76f24 131 // set_stop();
APS_Lab 0:813b34a76f24 132 //}
APS_Lab 0:813b34a76f24 133 else
APS_Lab 0:813b34a76f24 134 {
APS_Lab 0:813b34a76f24 135 help();
APS_Lab 0:813b34a76f24 136 }
APS_Lab 0:813b34a76f24 137 // Following the main thread wait, report on the current system status
APS_Lab 0:813b34a76f24 138 //sys_state.report_state();
APS_Lab 0:813b34a76f24 139 }
APS_Lab 0:813b34a76f24 140 }
APS_Lab 0:813b34a76f24 141
APS_Lab 0:813b34a76f24 142 void help(void)
APS_Lab 0:813b34a76f24 143 {
APS_Lab 0:813b34a76f24 144 PC.printf("Command Usage\n");
APS_Lab 0:813b34a76f24 145 PC.printf("Command : only 'set'\n");
APS_Lab 0:813b34a76f24 146 PC.printf("Mode : 'freq' is ODR configuration\n");
APS_Lab 0:813b34a76f24 147 PC.printf(" : ODR frequency from 12, 25, 50, 100, 200, 400Hz\n");
APS_Lab 0:813b34a76f24 148 PC.printf("Mode : 'grav' is select gravity\n");
APS_Lab 0:813b34a76f24 149 PC.printf(" : 0:2g 1:4g 2:8g\n");
APS_Lab 0:813b34a76f24 150 PC.printf("Mode : 'mode' is power mode\n");
APS_Lab 0:813b34a76f24 151 PC.printf(" : 0:Normal 1:Low Power 2:Ultra Low Power(freq is fixed at 100Hz)\n");
APS_Lab 0:813b34a76f24 152 PC.printf("i.e. 'set mode 0'\n");
APS_Lab 0:813b34a76f24 153 PC.printf("i.e. 'set freq 1000'\n");
APS_Lab 0:813b34a76f24 154 PC.printf("i.e. 'start'\n");
APS_Lab 0:813b34a76f24 155 }
APS_Lab 0:813b34a76f24 156
APS_Lab 0:813b34a76f24 157 int set_freq(int v)
APS_Lab 0:813b34a76f24 158 {
APS_Lab 0:813b34a76f24 159 if((v < 12) || (v > 400))
APS_Lab 0:813b34a76f24 160 {
APS_Lab 0:813b34a76f24 161 PC.printf("ODR Freqency Range is over/under. Please configure for 12-400 Hz.\n");
APS_Lab 0:813b34a76f24 162 return 1;
APS_Lab 0:813b34a76f24 163 }
APS_Lab 0:813b34a76f24 164 else
APS_Lab 0:813b34a76f24 165 {
APS_Lab 0:813b34a76f24 166 PC.printf("Set Frequency %d Hz\n", v);
APS_Lab 0:813b34a76f24 167 return 0;
APS_Lab 0:813b34a76f24 168 }
APS_Lab 0:813b34a76f24 169 }
APS_Lab 0:813b34a76f24 170
APS_Lab 0:813b34a76f24 171 int set_grav(int v)
APS_Lab 0:813b34a76f24 172 {
APS_Lab 0:813b34a76f24 173 switch(v)
APS_Lab 0:813b34a76f24 174 {
APS_Lab 0:813b34a76f24 175 case 0:
APS_Lab 0:813b34a76f24 176 PC.printf("Set gravity 2g\n");
APS_Lab 0:813b34a76f24 177 adxlCtrl->set_gravity(GRAVITY_2G);
APS_Lab 0:813b34a76f24 178 break;
APS_Lab 0:813b34a76f24 179 case 1:
APS_Lab 0:813b34a76f24 180 PC.printf("Set gravity 4g\n");
APS_Lab 0:813b34a76f24 181 adxlCtrl->set_gravity(GRAVITY_4G);
APS_Lab 0:813b34a76f24 182 break;
APS_Lab 0:813b34a76f24 183 case 2:
APS_Lab 0:813b34a76f24 184 PC.printf("Set gravity 8g\n");
APS_Lab 0:813b34a76f24 185 adxlCtrl->set_gravity(GRAVITY_8G);
APS_Lab 0:813b34a76f24 186 break;
APS_Lab 0:813b34a76f24 187 default:
APS_Lab 0:813b34a76f24 188 PC.printf("Unknown Command\n");
APS_Lab 0:813b34a76f24 189 break;
APS_Lab 0:813b34a76f24 190 };
APS_Lab 0:813b34a76f24 191
APS_Lab 0:813b34a76f24 192 return 0;
APS_Lab 0:813b34a76f24 193 }
APS_Lab 0:813b34a76f24 194 int set_mode(int m)
APS_Lab 0:813b34a76f24 195 {
APS_Lab 0:813b34a76f24 196 switch(m)
APS_Lab 0:813b34a76f24 197 {
APS_Lab 0:813b34a76f24 198 case MODE_NORMAL:
APS_Lab 0:813b34a76f24 199 PC.printf("Set Normal Mode\n");
APS_Lab 0:813b34a76f24 200 adxlCtrl->set_powermode(POWER_CTL_PARAM_LOWNOISE_NORM);
APS_Lab 0:813b34a76f24 201 break;
APS_Lab 0:813b34a76f24 202 case MODE_LOW_POWER:
APS_Lab 0:813b34a76f24 203 PC.printf("Set Low Power Mode\n");
APS_Lab 0:813b34a76f24 204 adxlCtrl->set_powermode(POWER_CTL_PARAM_LOWNOISE_LOW);
APS_Lab 0:813b34a76f24 205 break;
APS_Lab 0:813b34a76f24 206 case MODE_ULTRA_LOW_POWER:
APS_Lab 0:813b34a76f24 207 PC.printf("Set Ultra Low Power Mode\n");
APS_Lab 0:813b34a76f24 208 adxlCtrl->set_powermode(POWER_CTL_PARAM_LOWNOISE_ULTRA);
APS_Lab 0:813b34a76f24 209 break;
APS_Lab 0:813b34a76f24 210 default:
APS_Lab 0:813b34a76f24 211 PC.printf("Unknown Command\n");
APS_Lab 0:813b34a76f24 212 break;
APS_Lab 0:813b34a76f24 213 };
APS_Lab 0:813b34a76f24 214
APS_Lab 0:813b34a76f24 215 return 0;
APS_Lab 0:813b34a76f24 216 }
APS_Lab 0:813b34a76f24 217
APS_Lab 0:813b34a76f24 218 void set_start(void)
APS_Lab 0:813b34a76f24 219 {
APS_Lab 0:813b34a76f24 220 f_run = 1;
APS_Lab 0:813b34a76f24 221 adxlCtrl->start();
APS_Lab 0:813b34a76f24 222 PC.printf("Start Accel\n");
APS_Lab 0:813b34a76f24 223 }
APS_Lab 0:813b34a76f24 224
APS_Lab 0:813b34a76f24 225 void set_stop(void)
APS_Lab 0:813b34a76f24 226 {
APS_Lab 0:813b34a76f24 227 f_run = 0;
APS_Lab 0:813b34a76f24 228 adxlCtrl->stop();
APS_Lab 0:813b34a76f24 229 PC.printf("Stop Accel\n");
APS_Lab 0:813b34a76f24 230 }
APS_Lab 0:813b34a76f24 231
APS_Lab 0:813b34a76f24 232 static void clearDisplay(void)
APS_Lab 0:813b34a76f24 233 {
APS_Lab 0:813b34a76f24 234 PC.printf("\033[2J");
APS_Lab 0:813b34a76f24 235 PC.printf("\033[0;0H");
APS_Lab 0:813b34a76f24 236 PC.printf("\033[0m\033[37m");
APS_Lab 0:813b34a76f24 237 }
APS_Lab 0:813b34a76f24 238
APS_Lab 0:813b34a76f24 239 static void drawCLI(ADXL362 *adxlCtrl, AccelTemp *getData)
APS_Lab 0:813b34a76f24 240 {
APS_Lab 0:813b34a76f24 241 AccelTemp *min = adxlCtrl->GetMinInfo();
APS_Lab 0:813b34a76f24 242 AccelTemp *max = adxlCtrl->GetMaxInfo();
APS_Lab 0:813b34a76f24 243 AccelTemp *p;
APS_Lab 0:813b34a76f24 244 float x, y, z, t;
APS_Lab 0:813b34a76f24 245
APS_Lab 0:813b34a76f24 246 PC.printf("\033[2J");
APS_Lab 0:813b34a76f24 247
APS_Lab 0:813b34a76f24 248 /* BLANK LINE */
APS_Lab 0:813b34a76f24 249
APS_Lab 0:813b34a76f24 250 PC.printf("\033[0m\033[33m\033[1m");
APS_Lab 0:813b34a76f24 251 PC.printf("\033[2;1H");
APS_Lab 0:813b34a76f24 252 PC.printf("\033[K");
APS_Lab 0:813b34a76f24 253 PC.printf("ACCELEROMETERs");
APS_Lab 0:813b34a76f24 254
APS_Lab 0:813b34a76f24 255 PC.printf("\033[0m\033[37m");
APS_Lab 0:813b34a76f24 256 PC.printf("\033[3;3H");
APS_Lab 0:813b34a76f24 257 PC.printf("\033[K");
APS_Lab 0:813b34a76f24 258 PC.printf("\033[3;10H-X---\033[3;20H-Y---\033[3;30H-Z---");
APS_Lab 0:813b34a76f24 259
APS_Lab 0:813b34a76f24 260 PC.printf("\033[0m\033[35m");
APS_Lab 0:813b34a76f24 261 PC.printf("\033[4;3H");
APS_Lab 0:813b34a76f24 262 PC.printf("\033[K");
APS_Lab 0:813b34a76f24 263 p = min;
APS_Lab 0:813b34a76f24 264 x = sin(adxlCtrl->ConvAccel(p->ax));
APS_Lab 0:813b34a76f24 265 y = adxlCtrl->ConvAccel(p->ay);
APS_Lab 0:813b34a76f24 266 z = adxlCtrl->ConvAccel(p->az);
APS_Lab 0:813b34a76f24 267 PC.printf("min\033[4;10H%04.2f\033[4;20H%04.2f\033[4;30H%04.2f", x, y, z);
APS_Lab 0:813b34a76f24 268
APS_Lab 0:813b34a76f24 269 PC.printf("\033[0m\033[37m\033[1m");
APS_Lab 0:813b34a76f24 270 PC.printf("\033[5;3H");
APS_Lab 0:813b34a76f24 271 PC.printf("\033[K");
APS_Lab 0:813b34a76f24 272 p = getData;
APS_Lab 0:813b34a76f24 273 x = adxlCtrl->ConvAccel(p->ax);
APS_Lab 0:813b34a76f24 274 y = adxlCtrl->ConvAccel(p->ay);
APS_Lab 0:813b34a76f24 275 z = adxlCtrl->ConvAccel(p->az);
APS_Lab 0:813b34a76f24 276 PC.printf("-->\033[5;10H%04.2f\033[5;20H%04.2f\033[5;30H%04.2f", x, y, z);
APS_Lab 0:813b34a76f24 277
APS_Lab 0:813b34a76f24 278 PC.printf("\033[0m\033[36m");
APS_Lab 0:813b34a76f24 279 PC.printf("\033[6;3H");
APS_Lab 0:813b34a76f24 280 PC.printf("\033[K");
APS_Lab 0:813b34a76f24 281 p = max;
APS_Lab 0:813b34a76f24 282 x = adxlCtrl->ConvAccel(p->ax);
APS_Lab 0:813b34a76f24 283 y = adxlCtrl->ConvAccel(p->ay);
APS_Lab 0:813b34a76f24 284 z = adxlCtrl->ConvAccel(p->az);
APS_Lab 0:813b34a76f24 285 PC.printf("max\033[6;10H%04.2f\033[6;20H%04.2f\033[6;30H%04.2f", x, y, z);
APS_Lab 0:813b34a76f24 286
APS_Lab 0:813b34a76f24 287 /* BLANK LINE */
APS_Lab 0:813b34a76f24 288
APS_Lab 0:813b34a76f24 289 PC.printf("\033[0m\033[31m\033[1m");
APS_Lab 0:813b34a76f24 290 PC.printf("\033[8;1H");
APS_Lab 0:813b34a76f24 291 PC.printf("\033[K");
APS_Lab 0:813b34a76f24 292 PC.printf("Temperature");
APS_Lab 0:813b34a76f24 293
APS_Lab 0:813b34a76f24 294 /* BLANK LINE */
APS_Lab 0:813b34a76f24 295
APS_Lab 0:813b34a76f24 296 PC.printf("\033[0m\033[35m");
APS_Lab 0:813b34a76f24 297 PC.printf("\033[10;3H");
APS_Lab 0:813b34a76f24 298 PC.printf("\033[K");
APS_Lab 0:813b34a76f24 299 p = min;
APS_Lab 0:813b34a76f24 300 t = adxlCtrl->ConvThermal(p->tm);
APS_Lab 0:813b34a76f24 301 PC.printf("min\033[10;10H%04.2f", t);
APS_Lab 0:813b34a76f24 302
APS_Lab 0:813b34a76f24 303 PC.printf("\033[0m\033[37m\033[1m");
APS_Lab 0:813b34a76f24 304 PC.printf("\033[11;3H");
APS_Lab 0:813b34a76f24 305 PC.printf("\033[K");
APS_Lab 0:813b34a76f24 306 p = getData;
APS_Lab 0:813b34a76f24 307 t = adxlCtrl->ConvThermal(p->tm);
APS_Lab 0:813b34a76f24 308 PC.printf("-->\033[11;10H%04.2f", t);
APS_Lab 0:813b34a76f24 309
APS_Lab 0:813b34a76f24 310 PC.printf("\033[0m\033[36m");
APS_Lab 0:813b34a76f24 311 PC.printf("\033[12;3H");
APS_Lab 0:813b34a76f24 312 PC.printf("\033[K");
APS_Lab 0:813b34a76f24 313 p = max;
APS_Lab 0:813b34a76f24 314 t = adxlCtrl->ConvThermal(p->tm);
APS_Lab 0:813b34a76f24 315 PC.printf("max\033[12;10H%04.2f", t);
APS_Lab 0:813b34a76f24 316 }
APS_Lab 0:813b34a76f24 317
APS_Lab 0:813b34a76f24 318 static void draw_Raw(ADXL362 *adxlCtrl, AccelTemp *getData)
APS_Lab 0:813b34a76f24 319 {
APS_Lab 0:813b34a76f24 320 AccelTemp *p;
APS_Lab 0:813b34a76f24 321 float x, y, z, t;
APS_Lab 0:813b34a76f24 322
APS_Lab 0:813b34a76f24 323 /* BLANK LINE */
APS_Lab 0:813b34a76f24 324 p = getData;
APS_Lab 0:813b34a76f24 325 t = adxlCtrl->ConvThermal(p->tm);
APS_Lab 0:813b34a76f24 326 x = adxlCtrl->ConvAccel(p->ax);
APS_Lab 0:813b34a76f24 327 y = adxlCtrl->ConvAccel(p->ay);
APS_Lab 0:813b34a76f24 328 z = adxlCtrl->ConvAccel(p->az);
APS_Lab 0:813b34a76f24 329 PC.printf("%04.2f, %04.2f, %04.2f, %04.2f\n", x, y, z, t);
APS_Lab 0:813b34a76f24 330 }
APS_Lab 0:813b34a76f24 331
APS_Lab 0:813b34a76f24 332
APS_Lab 0:813b34a76f24 333