I2C sensor test program, derived from testI2C program. Simple test for FXOS8700CQ, HIH6130, MAG3110, MMA8451Q, MMA8452Q, MPL3115A2, MAX44000, MAX44005, MAX44008, MAX30101 included beside simple I2C read/write from testI2C.

Dependencies:   FXOS8700CQ HIH6130 IS31SE5000 MAG3110 MAX44000 MAX44005 MAX44008 MMA8451Q MMA8452Q MPL3115A2 VEML6040 VEML6075 mbed vt100 LM75B FXAS21002 MAX30101 VCNL4020 VCNL4100

Committer:
Rhyme
Date:
Thu Dec 28 07:32:28 2017 +0000
Revision:
19:dfd1f76515c5
Parent:
18:ee6f43cbfcc1
test of AK9752, AK9753, AK009970N added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:d4bbd473a83c 1 #include "mbed.h"
Rhyme 0:d4bbd473a83c 2 #include "vt100.h"
Rhyme 0:d4bbd473a83c 3 #include "MSS.h"
Rhyme 0:d4bbd473a83c 4 #include "MSU.h"
Rhyme 0:d4bbd473a83c 5 #include "MMA8451Q.h"
Rhyme 0:d4bbd473a83c 6 #include "MMA8452Q.h"
Rhyme 0:d4bbd473a83c 7 #include "MAG3110.h"
Rhyme 0:d4bbd473a83c 8 #include "HIH6130.h"
Rhyme 0:d4bbd473a83c 9 #include "FXOS8700CQ.h"
Rhyme 0:d4bbd473a83c 10 #include "MAX44000.h"
Rhyme 0:d4bbd473a83c 11 #include "MAX44005.h"
Rhyme 0:d4bbd473a83c 12 #include "MAX44008.h"
Rhyme 0:d4bbd473a83c 13 #include "MPL3115A2.h"
Rhyme 0:d4bbd473a83c 14 #include "VEML6040.h"
Rhyme 0:d4bbd473a83c 15 #include "VEML6075.h"
Rhyme 3:be01d9e0fa3e 16 #include "LM75B.h"
Rhyme 7:8f438094f8cc 17 #include "FXAS21002.h"
Rhyme 10:710ba5364779 18 #include "S11059.h"
Rhyme 14:1e6e4fdf90d0 19 #include "MAX30101.h"
Rhyme 17:514f67d94d12 20 #include "VCNL4100.h"
Rhyme 18:ee6f43cbfcc1 21 #include "AK9752.h"
Rhyme 18:ee6f43cbfcc1 22 #include "AK9753.h"
Rhyme 19:dfd1f76515c5 23 #include "AK09970N.h"
Rhyme 0:d4bbd473a83c 24
Rhyme 0:d4bbd473a83c 25 extern int test_loop ;
Rhyme 9:d4f76e6fa35f 26 extern int interval ; /* wait interval ms */
Rhyme 0:d4bbd473a83c 27
Rhyme 0:d4bbd473a83c 28 extern vt100 *tty ;
Rhyme 0:d4bbd473a83c 29
Rhyme 0:d4bbd473a83c 30 i2c_sensor_type i2c_sensor[] = {
Rhyme 0:d4bbd473a83c 31 {MSU_MMA8451Q_ADDRESS, "MMA8451Q", testMMA8451Q},
Rhyme 0:d4bbd473a83c 32 {MSU_MMA8452Q_ADDRESS, "MMA8452Q", testMMA8452Q},
Rhyme 0:d4bbd473a83c 33 {MSU_MAG3110_ADDRESS, "MAG3110", testMAG3110},
Rhyme 0:d4bbd473a83c 34 {MSU_HIH6130_ADDRESS, "HIH6130", testHIH6130},
Rhyme 0:d4bbd473a83c 35 {MSU_FXOS8700CQ_ADDRESS, "FXOS8700CQ", testFXOS8700CQ},
Rhyme 0:d4bbd473a83c 36 {MSU_MAX44000_ADDRESS, "MAX44000", testMAX44000},
Rhyme 0:d4bbd473a83c 37 {MSU_MAX44005_ADDRESS, "MAX44005", testMAX44005},
Rhyme 0:d4bbd473a83c 38 {MSU_MAX44008_ADDRESS, "MAX44008", testMAX44008},
Rhyme 0:d4bbd473a83c 39 {MSU_MAX30101_ADDRESS, "MAX30101", testMAX30101},
Rhyme 0:d4bbd473a83c 40 {MSU_MPL3115A2_ADDRESS, "MPL3115A2", testMPL3115A2},
Rhyme 0:d4bbd473a83c 41 {MSU_IS31SE5000_ADDRESS, "IS31SE5000", testIS31SE5000},
Rhyme 17:514f67d94d12 42 // {MSU_VCNL4020_ADDRESS, "VCNL4020", testVCNL4020"},
Rhyme 0:d4bbd473a83c 43 {MSU_VEML6040A_ADDRESS, "VEML6040A", testVEML6040A},
Rhyme 15:17416bd1b51c 44 {MSU_VEML6075_ADDRESS, "VEML6075", testVEML6075},
Rhyme 3:be01d9e0fa3e 45 {MSU_LM75B_ADDRESS, "LM75B", testLM75B},
Rhyme 7:8f438094f8cc 46 {MSU_FXAS21002_ADDRESS, "FXAS21002", testFXAS21002},
Rhyme 10:710ba5364779 47 {MSU_S11059_ADDRESS, "S11059", testS11059},
Rhyme 17:514f67d94d12 48 {MSU_VCNL4100_I2C_ADDRESS, "VCNL4100", testVCNL4100},
Rhyme 18:ee6f43cbfcc1 49 {MSU_AK9752_I2C_ADDRESS, "AK9752", testAK9752},
Rhyme 18:ee6f43cbfcc1 50 {MSU_AK9753_I2C_ADDRESS, "AK9753", testAK9753},
Rhyme 19:dfd1f76515c5 51 {MSU_AK09970N_I2C_ADDRESS, "AK09970N", testAK09970N},
Rhyme 0:d4bbd473a83c 52 {0x00, 0, 0}
Rhyme 0:d4bbd473a83c 53 } ;
Rhyme 0:d4bbd473a83c 54
Rhyme 14:1e6e4fdf90d0 55 MAX30101 *max30101 = 0 ;
Rhyme 14:1e6e4fdf90d0 56 #ifndef FIFO_DEPTH
Rhyme 14:1e6e4fdf90d0 57 #define FIFO_DEPTH 32
Rhyme 14:1e6e4fdf90d0 58 #endif
Rhyme 14:1e6e4fdf90d0 59
Rhyme 14:1e6e4fdf90d0 60 void doDemo(void)
Rhyme 14:1e6e4fdf90d0 61 {
Rhyme 14:1e6e4fdf90d0 62 int i ;
Rhyme 14:1e6e4fdf90d0 63 float humidity = 0 ;
Rhyme 14:1e6e4fdf90d0 64 float temperature = 0 ;
Rhyme 14:1e6e4fdf90d0 65 uint8_t mode ;
Rhyme 14:1e6e4fdf90d0 66 uint8_t txdata, rxdata ;
Rhyme 14:1e6e4fdf90d0 67 uint16_t als ;
Rhyme 14:1e6e4fdf90d0 68 uint8_t prox, overflow ;
Rhyme 14:1e6e4fdf90d0 69 uint32_t data, alt, bar, tmp ;
Rhyme 14:1e6e4fdf90d0 70 uint16_t sample_time ;
Rhyme 14:1e6e4fdf90d0 71
Rhyme 14:1e6e4fdf90d0 72 HIH6130 *hih6130 = new HIH6130(PIN_SDA, PIN_SCL, MSU_HIH6130_ADDRESS) ;
Rhyme 14:1e6e4fdf90d0 73 MMA8452Q *mma8452q = new MMA8452Q(PIN_SDA, PIN_SCL, MSU_MMA8452Q_ADDRESS) ;
Rhyme 14:1e6e4fdf90d0 74 MAX44000 *max44000 = new MAX44000(PIN_SDA, PIN_SCL, MSU_MAX44000_ADDRESS) ;
Rhyme 14:1e6e4fdf90d0 75 rxdata = 0xF1 ;
Rhyme 14:1e6e4fdf90d0 76 max44000->setRxConfig(rxdata) ;
Rhyme 14:1e6e4fdf90d0 77 txdata = 0x0F ; /* light LED! */
Rhyme 14:1e6e4fdf90d0 78 max44000->setTxConfig(txdata) ;
Rhyme 14:1e6e4fdf90d0 79 mode = 0x30 ; // ALS & PROX mode
Rhyme 14:1e6e4fdf90d0 80 max44000->setMainConfig(mode) ;
Rhyme 14:1e6e4fdf90d0 81
Rhyme 14:1e6e4fdf90d0 82 MPL3115A2 *mpl3115a2 = new MPL3115A2(PIN_SDA, PIN_SCL, MSU_MPL3115A2_ADDRESS) ;
Rhyme 14:1e6e4fdf90d0 83 tty->cls() ;
Rhyme 14:1e6e4fdf90d0 84 tty->locate(10, 1) ;
Rhyme 14:1e6e4fdf90d0 85 printf("=== Multi Sensor Demo (%s) ===\n", BOARD_NAME) ;
Rhyme 14:1e6e4fdf90d0 86 tty->putStr(2, 3, "MMA8451Q") ;
Rhyme 14:1e6e4fdf90d0 87 tty->putStr(2, 10, "MAX44000") ;
Rhyme 14:1e6e4fdf90d0 88 tty->putStr(40, 3, "HIH6130") ;
Rhyme 14:1e6e4fdf90d0 89 tty->putStr(40, 10, "MPL3115A2") ;
Rhyme 14:1e6e4fdf90d0 90 for (i = 0 ; i < test_loop ; i++ ) {
Rhyme 14:1e6e4fdf90d0 91
Rhyme 14:1e6e4fdf90d0 92 /* MMA8451Q */
Rhyme 14:1e6e4fdf90d0 93 tty->locate(2, 5) ;
Rhyme 14:1e6e4fdf90d0 94 printf("X:%.2f Y:%.2f Z:%.2f",
Rhyme 14:1e6e4fdf90d0 95 mma8452q->getAccX(),
Rhyme 14:1e6e4fdf90d0 96 mma8452q->getAccY(),
Rhyme 14:1e6e4fdf90d0 97 mma8452q->getAccZ()) ;
Rhyme 14:1e6e4fdf90d0 98
Rhyme 14:1e6e4fdf90d0 99 if ((i % 10) == 0) {
Rhyme 14:1e6e4fdf90d0 100 /* HIH6130 */
Rhyme 14:1e6e4fdf90d0 101 tty->locate(40, 5) ;
Rhyme 14:1e6e4fdf90d0 102 hih6130->getValue(&humidity, &temperature) ;
Rhyme 14:1e6e4fdf90d0 103 printf("Temp %.1f C", temperature) ;
Rhyme 14:1e6e4fdf90d0 104 tty->locate(40, 7) ;
Rhyme 14:1e6e4fdf90d0 105 printf("Humidity %.1f %%\n", humidity) ;
Rhyme 14:1e6e4fdf90d0 106 /* MAX44000 */
Rhyme 14:1e6e4fdf90d0 107 tty->locate(2, 12) ;
Rhyme 14:1e6e4fdf90d0 108 max44000->getADC(&overflow, &als, &prox) ;
Rhyme 14:1e6e4fdf90d0 109 printf("ALS[ %04X ]", als) ;
Rhyme 14:1e6e4fdf90d0 110 if (overflow) {
Rhyme 14:1e6e4fdf90d0 111 printf(" overflow ") ;
Rhyme 14:1e6e4fdf90d0 112 } else {
Rhyme 14:1e6e4fdf90d0 113 printf(" ") ;
Rhyme 14:1e6e4fdf90d0 114 }
Rhyme 14:1e6e4fdf90d0 115 tty->locate(2, 14) ;
Rhyme 14:1e6e4fdf90d0 116 printf("PRX[ %02X ]\n", prox) ;
Rhyme 14:1e6e4fdf90d0 117 /* MPL3115A2 */
Rhyme 14:1e6e4fdf90d0 118
Rhyme 14:1e6e4fdf90d0 119 mpl3115a2->modeAlt() ;
Rhyme 14:1e6e4fdf90d0 120 sample_time = mpl3115a2->OneShot() ;
Rhyme 14:1e6e4fdf90d0 121 wait(((double)sample_time)/1000.0) ;
Rhyme 14:1e6e4fdf90d0 122 alt = mpl3115a2->getAltitude() ;
Rhyme 14:1e6e4fdf90d0 123 mpl3115a2->modeBar() ;
Rhyme 14:1e6e4fdf90d0 124 sample_time = mpl3115a2->OneShot() ;
Rhyme 14:1e6e4fdf90d0 125 wait(((double)sample_time)/1000.0) ;
Rhyme 14:1e6e4fdf90d0 126 bar = mpl3115a2->getPressure() ;
Rhyme 14:1e6e4fdf90d0 127 tmp = mpl3115a2->getTemperature() ;
Rhyme 14:1e6e4fdf90d0 128 tty->locate(40, 11) ;
Rhyme 14:1e6e4fdf90d0 129 printf("Altitude: %d", (alt >> 16)&0xFFFF) ;
Rhyme 14:1e6e4fdf90d0 130 tty->locate(40, 13) ;
Rhyme 14:1e6e4fdf90d0 131 printf("Pressure: %d", (bar >> 6)) ;
Rhyme 14:1e6e4fdf90d0 132 tty->locate(40, 15) ;
Rhyme 14:1e6e4fdf90d0 133 printf("Temperature: %d", (tmp >> 8) ) ;
Rhyme 14:1e6e4fdf90d0 134 }
Rhyme 14:1e6e4fdf90d0 135 }
Rhyme 14:1e6e4fdf90d0 136 txdata = 0x00 ; /* dim LED! */
Rhyme 14:1e6e4fdf90d0 137 max44000->setTxConfig(txdata) ;
Rhyme 14:1e6e4fdf90d0 138 tty->locate(1, 20) ;
Rhyme 14:1e6e4fdf90d0 139 delete mpl3115a2 ;
Rhyme 14:1e6e4fdf90d0 140 delete max44000 ;
Rhyme 14:1e6e4fdf90d0 141 delete mma8452q ;
Rhyme 14:1e6e4fdf90d0 142 delete hih6130 ;
Rhyme 14:1e6e4fdf90d0 143 }
Rhyme 14:1e6e4fdf90d0 144
Rhyme 3:be01d9e0fa3e 145 void testLM75B(void)
Rhyme 3:be01d9e0fa3e 146 {
Rhyme 3:be01d9e0fa3e 147 int8_t itemp = 0 ;
Rhyme 3:be01d9e0fa3e 148 float ftemp = 0.0 ;
Rhyme 3:be01d9e0fa3e 149 printf("test LM75B\n") ;
Rhyme 3:be01d9e0fa3e 150 LM75B *lm75b = new LM75B(PIN_SDA, PIN_SCL, MSU_LM75B_ADDRESS) ;
Rhyme 3:be01d9e0fa3e 151 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 3:be01d9e0fa3e 152 itemp = lm75b->temp() ;
Rhyme 3:be01d9e0fa3e 153 lm75b->getTemp(&ftemp) ;
Rhyme 3:be01d9e0fa3e 154 printf("Temp = %d C degree, %.3f C degree\n", itemp, ftemp) ;
Rhyme 9:d4f76e6fa35f 155 wait_ms(interval) ;
Rhyme 3:be01d9e0fa3e 156 }
Rhyme 7:8f438094f8cc 157 delete lm75b ;
Rhyme 3:be01d9e0fa3e 158 }
Rhyme 3:be01d9e0fa3e 159
Rhyme 7:8f438094f8cc 160 void testFXAS21002(void)
Rhyme 7:8f438094f8cc 161 {
Rhyme 7:8f438094f8cc 162 int16_t data[3] ;
Rhyme 7:8f438094f8cc 163
Rhyme 7:8f438094f8cc 164 printf("test FXAS21002\n") ;
Rhyme 7:8f438094f8cc 165 FXAS21002 *fxas = new FXAS21002(PIN_SDA, PIN_SCL, MSU_FXAS21002_ADDRESS) ;
Rhyme 7:8f438094f8cc 166 fxas->activate(true) ;
Rhyme 7:8f438094f8cc 167
Rhyme 7:8f438094f8cc 168 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 7:8f438094f8cc 169 data[0] = fxas->getX() ;
Rhyme 7:8f438094f8cc 170 data[1] = fxas->getY() ;
Rhyme 7:8f438094f8cc 171 data[2] = fxas->getZ() ;
Rhyme 7:8f438094f8cc 172 printf("X[%6d], Y[%6d], Z[%6d]\n",
Rhyme 7:8f438094f8cc 173 data[0], data[1], data[2]) ;
Rhyme 9:d4f76e6fa35f 174 wait_ms(interval) ;
Rhyme 7:8f438094f8cc 175 }
Rhyme 7:8f438094f8cc 176 delete fxas ;
Rhyme 7:8f438094f8cc 177 }
Rhyme 7:8f438094f8cc 178
Rhyme 0:d4bbd473a83c 179 void testMMA8451Q(void)
Rhyme 0:d4bbd473a83c 180 {
Rhyme 0:d4bbd473a83c 181 uint16_t ix, iy, iz ;
Rhyme 0:d4bbd473a83c 182 float fx, fy, fz ;
Rhyme 0:d4bbd473a83c 183
Rhyme 0:d4bbd473a83c 184 printf("test MMA8451Q\n") ;
Rhyme 0:d4bbd473a83c 185 MMA8451Q *acc = new MMA8451Q(PIN_SDA, PIN_SCL, MSU_MMA8451Q_ADDRESS) ;
Rhyme 0:d4bbd473a83c 186 for(int i = 0 ; i < test_loop ; i++) {
Rhyme 0:d4bbd473a83c 187 ix = acc->getRawX() ;
Rhyme 0:d4bbd473a83c 188 iy = acc->getRawY() ;
Rhyme 0:d4bbd473a83c 189 iz = acc->getRawZ() ;
Rhyme 0:d4bbd473a83c 190 fx = acc->getAccX() ;
Rhyme 0:d4bbd473a83c 191 fy = acc->getAccY() ;
Rhyme 0:d4bbd473a83c 192 fz = acc->getAccZ() ;
Rhyme 0:d4bbd473a83c 193 printf("X = %d [ %.2f ], Y = %d [ %.2f ], Z = %d [ %.2f ]\n",
Rhyme 0:d4bbd473a83c 194 ix, fx, iy, fy, iz, fz ) ;
Rhyme 9:d4f76e6fa35f 195 wait_ms(interval) ;
Rhyme 0:d4bbd473a83c 196 }
Rhyme 0:d4bbd473a83c 197 delete acc ;
Rhyme 0:d4bbd473a83c 198 }
Rhyme 0:d4bbd473a83c 199
Rhyme 0:d4bbd473a83c 200 void testMMA8452Q(void)
Rhyme 0:d4bbd473a83c 201 {
Rhyme 0:d4bbd473a83c 202 float x, y, z ;
Rhyme 0:d4bbd473a83c 203 printf("test MMA8452Q\n") ;
Rhyme 0:d4bbd473a83c 204 MMA8452Q *acc = new MMA8452Q(PIN_SDA, PIN_SCL, MSU_MMA8452Q_ADDRESS) ;
Rhyme 0:d4bbd473a83c 205 for(int i = 0 ; i < test_loop ; i++) {
Rhyme 0:d4bbd473a83c 206 x = acc->getAccX() ;
Rhyme 0:d4bbd473a83c 207 y = acc->getAccY() ;
Rhyme 0:d4bbd473a83c 208 z = acc->getAccZ() ;
Rhyme 0:d4bbd473a83c 209 printf("X[%.2f] Y[%.2f] Z[%.2f]\n",x, y, z) ;
Rhyme 9:d4f76e6fa35f 210 wait_ms(interval) ;
Rhyme 0:d4bbd473a83c 211 }
Rhyme 0:d4bbd473a83c 212 delete acc ;
Rhyme 0:d4bbd473a83c 213 }
Rhyme 0:d4bbd473a83c 214
Rhyme 0:d4bbd473a83c 215 void testMAG3110(void)
Rhyme 0:d4bbd473a83c 216 {
Rhyme 0:d4bbd473a83c 217 uint8_t status = 0 ;
Rhyme 0:d4bbd473a83c 218 int16_t mX, mY, mZ ;
Rhyme 0:d4bbd473a83c 219 float fx, fy, fz ;
Rhyme 0:d4bbd473a83c 220 int x = 10 ;
Rhyme 0:d4bbd473a83c 221 int y = 5 ;
Rhyme 0:d4bbd473a83c 222 MAG3110 *mag = new MAG3110(PIN_SDA, PIN_SCL, MSU_MAG3110_ADDRESS) ;
Rhyme 0:d4bbd473a83c 223 mag->activate() ;
Rhyme 0:d4bbd473a83c 224 tty->cls() ;
Rhyme 0:d4bbd473a83c 225 printf("test MAG3110\n") ;
Rhyme 0:d4bbd473a83c 226 for (int i = 0 ; i < test_loop ; i++) {
Rhyme 9:d4f76e6fa35f 227 wait_ms(interval) ;
Rhyme 0:d4bbd473a83c 228 status = mag->getStatus() ;
Rhyme 0:d4bbd473a83c 229 while((status & 0x80) == 0) { // wait for ZYXOW
Rhyme 0:d4bbd473a83c 230 wait(0.01) ;
Rhyme 0:d4bbd473a83c 231 status = mag->getStatus() ;
Rhyme 0:d4bbd473a83c 232 }
Rhyme 0:d4bbd473a83c 233
Rhyme 0:d4bbd473a83c 234 tty->locate(x+5, y) ;
Rhyme 0:d4bbd473a83c 235 printf("--- MAG3110 ---") ;
Rhyme 0:d4bbd473a83c 236 tty->locate(x, y+4) ;
Rhyme 0:d4bbd473a83c 237 printf("Temperature: %02X",mag->getTemp()) ;
Rhyme 0:d4bbd473a83c 238 tty->locate(x, y+5) ;
Rhyme 0:d4bbd473a83c 239 printf("status: 0x%02X",mag->getStatus()) ;
Rhyme 0:d4bbd473a83c 240 tty->locate(x, y+6) ;
Rhyme 0:d4bbd473a83c 241 printf("ctrl reg1: 0x%02X ", mag->getCtrlReg1()) ;
Rhyme 0:d4bbd473a83c 242 printf("reg2: 0x%02X", mag->getCtrlReg2()) ;
Rhyme 0:d4bbd473a83c 243 mX = mag->getX() ; // here reset takes place!
Rhyme 0:d4bbd473a83c 244 mY = mag->getY() ;
Rhyme 0:d4bbd473a83c 245 mZ = mag->getZ() ;
Rhyme 0:d4bbd473a83c 246 fx = 10000 * (float)mX / (float)0x7FFF ;
Rhyme 0:d4bbd473a83c 247 fy = 10000 * (float)mY / (float)0x7FFF ;
Rhyme 0:d4bbd473a83c 248 fz = 10000 * (float)mZ / (float)0x7FFF ;
Rhyme 0:d4bbd473a83c 249 tty->locate(x, y+1) ;
Rhyme 0:d4bbd473a83c 250 printf("X : ") ;
Rhyme 0:d4bbd473a83c 251 if (fx >= 0) { printf(" ") ; }
Rhyme 0:d4bbd473a83c 252 printf("%.2f uT : 0x%08X ", fx, mX) ;
Rhyme 0:d4bbd473a83c 253
Rhyme 0:d4bbd473a83c 254 tty->locate(x, y+2) ;
Rhyme 0:d4bbd473a83c 255 printf("Y : ") ;
Rhyme 0:d4bbd473a83c 256 if (fy >= 0) { printf(" ") ; }
Rhyme 0:d4bbd473a83c 257 printf("%.2f uT : 0x%08X ", fy, mY) ;
Rhyme 0:d4bbd473a83c 258
Rhyme 0:d4bbd473a83c 259 tty->locate(x, y+3) ;
Rhyme 0:d4bbd473a83c 260 printf("Z : ") ;
Rhyme 0:d4bbd473a83c 261 if (fz >= 0) { printf(" ") ; }
Rhyme 0:d4bbd473a83c 262 printf("%.2f uT : 0x%08X ", fz, mZ) ;
Rhyme 0:d4bbd473a83c 263 }
Rhyme 0:d4bbd473a83c 264 tty->locate(0, 20) ;
Rhyme 0:d4bbd473a83c 265 mag->standby() ;
Rhyme 0:d4bbd473a83c 266 delete mag ;
Rhyme 0:d4bbd473a83c 267 }
Rhyme 0:d4bbd473a83c 268
Rhyme 0:d4bbd473a83c 269 void testHIH6130(void)
Rhyme 0:d4bbd473a83c 270 {
Rhyme 0:d4bbd473a83c 271 uint16_t result = 0 ;
Rhyme 0:d4bbd473a83c 272 float humidity = 0 ;
Rhyme 0:d4bbd473a83c 273 float temperature = 0 ;
Rhyme 0:d4bbd473a83c 274 HIH6130 *hih = new HIH6130(PIN_SDA, PIN_SCL, MSU_HIH6130_ADDRESS) ;
Rhyme 0:d4bbd473a83c 275 printf("test HIH6130\n") ;
Rhyme 0:d4bbd473a83c 276 for (int i = 0 ; i < test_loop ; i++) {
Rhyme 0:d4bbd473a83c 277 result = hih->getValue(&humidity, &temperature) ;
Rhyme 0:d4bbd473a83c 278 printf("Temp %.1f C Humidity %.1f %%\n", temperature, humidity) ;
Rhyme 9:d4f76e6fa35f 279 wait_ms(interval) ;
Rhyme 0:d4bbd473a83c 280 }
Rhyme 0:d4bbd473a83c 281 }
Rhyme 0:d4bbd473a83c 282
Rhyme 0:d4bbd473a83c 283 void testFXOS8700CQ(void)
Rhyme 0:d4bbd473a83c 284 {
Rhyme 0:d4bbd473a83c 285 int16_t accData[3], mgnData[3] ;
Rhyme 0:d4bbd473a83c 286
Rhyme 0:d4bbd473a83c 287 printf("test FXOS8700CQ\n") ;
Rhyme 0:d4bbd473a83c 288 FXOS8700CQ *fxos = new FXOS8700CQ(PIN_SDA, PIN_SCL, MSU_FXOS8700CQ_ADDRESS) ;
Rhyme 0:d4bbd473a83c 289 fxos->init() ;
Rhyme 0:d4bbd473a83c 290
Rhyme 0:d4bbd473a83c 291 for (int i = 0 ; i < test_loop ; i++) {
Rhyme 0:d4bbd473a83c 292 fxos->readAccMgnData(accData, mgnData) ;
Rhyme 0:d4bbd473a83c 293 printf("ACC X[%d], Y[%d], Z[%d], MGN X[%d], Y[%d], Z[%d]\n",
Rhyme 0:d4bbd473a83c 294 accData[0], accData[1], accData[2],
Rhyme 0:d4bbd473a83c 295 mgnData[0], mgnData[1], mgnData[2]) ;
Rhyme 9:d4f76e6fa35f 296 wait_ms(interval) ;
Rhyme 0:d4bbd473a83c 297 }
Rhyme 0:d4bbd473a83c 298 delete fxos ;
Rhyme 0:d4bbd473a83c 299 }
Rhyme 0:d4bbd473a83c 300
Rhyme 1:9450e20cf688 301 void testMAX44000(void)
Rhyme 1:9450e20cf688 302 {
Rhyme 1:9450e20cf688 303 uint8_t mode ;
Rhyme 1:9450e20cf688 304 uint8_t txdata, rxdata ;
Rhyme 1:9450e20cf688 305 uint16_t als ;
Rhyme 1:9450e20cf688 306 uint8_t prox, overflow ;
Rhyme 1:9450e20cf688 307 int x = 10 ;
Rhyme 1:9450e20cf688 308 int y = 5 ;
Rhyme 1:9450e20cf688 309
Rhyme 1:9450e20cf688 310 tty->cls() ;
Rhyme 1:9450e20cf688 311 printf("test MAX44000\n") ;
Rhyme 1:9450e20cf688 312 MAX44000 *max44000 = new MAX44000(PIN_SDA, PIN_SCL, MSU_MAX44000_ADDRESS) ;
Rhyme 1:9450e20cf688 313
Rhyme 1:9450e20cf688 314 rxdata = 0xF1 ;
Rhyme 1:9450e20cf688 315 max44000->setRxConfig(rxdata) ;
Rhyme 6:897f32c6ef7d 316 txdata = 0x0F ; /* light LED! */
Rhyme 1:9450e20cf688 317 max44000->setTxConfig(txdata) ;
Rhyme 6:897f32c6ef7d 318 mode = 0x30 ; // ALS & PROX mode
Rhyme 1:9450e20cf688 319 max44000->setMainConfig(mode) ;
Rhyme 1:9450e20cf688 320
Rhyme 1:9450e20cf688 321 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 1:9450e20cf688 322 max44000->getADC(&overflow, &als, &prox) ;
Rhyme 1:9450e20cf688 323 printf("ALS[ %04X ]", als) ;
Rhyme 1:9450e20cf688 324 if (overflow) {
Rhyme 5:cdac8329b22c 325 printf(" overflow ") ;
Rhyme 1:9450e20cf688 326 } else {
Rhyme 5:cdac8329b22c 327 printf(" ") ;
Rhyme 1:9450e20cf688 328 }
Rhyme 5:cdac8329b22c 329 printf("PRX[ %02X ]\n", prox) ;
Rhyme 9:d4f76e6fa35f 330 wait_ms(interval) ;
Rhyme 1:9450e20cf688 331 }
Rhyme 6:897f32c6ef7d 332 txdata = 0x00 ; /* dim LED! */
Rhyme 6:897f32c6ef7d 333 max44000->setTxConfig(txdata) ;
Rhyme 1:9450e20cf688 334 delete max44000 ;
Rhyme 1:9450e20cf688 335 }
Rhyme 1:9450e20cf688 336
Rhyme 1:9450e20cf688 337 void testMAX44005(void)
Rhyme 1:9450e20cf688 338 {
Rhyme 1:9450e20cf688 339 uint16_t amb_c, amb_r, amb_g, amb_b, amb_ir, amb_ircomp, amb_temp ;
Rhyme 1:9450e20cf688 340 MAX44005 *max44005 = new MAX44005(PIN_SDA, PIN_SCL, MSU_MAX44005_ADDRESS) ;
Rhyme 1:9450e20cf688 341 max44005->enableTEMP() ;
Rhyme 1:9450e20cf688 342 max44005->setMode(0x04) ;
Rhyme 1:9450e20cf688 343 printf("test MAX44005\n") ;
Rhyme 1:9450e20cf688 344
Rhyme 1:9450e20cf688 345 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 1:9450e20cf688 346 amb_c = max44005->getAMB_CLEAR() ;
Rhyme 1:9450e20cf688 347 amb_r = max44005->getAMB_RED() ;
Rhyme 1:9450e20cf688 348 amb_g = max44005->getAMB_GREEN() ;
Rhyme 1:9450e20cf688 349 amb_b = max44005->getAMB_BLUE() ;
Rhyme 1:9450e20cf688 350 amb_ir = max44005->getIR() ;
Rhyme 1:9450e20cf688 351 amb_ircomp = max44005->getIRCOMP() ;
Rhyme 1:9450e20cf688 352 amb_temp = max44005->getTEMP() ;
Rhyme 1:9450e20cf688 353 printf("--- MAX44005 ---\n") ;
Rhyme 1:9450e20cf688 354 printf(" C[ %04X ]\n", amb_c) ;
Rhyme 1:9450e20cf688 355 printf("R[ %04X ] G[ %04X ] B[ %04X ]\n",amb_r, amb_g, amb_b) ;
Rhyme 1:9450e20cf688 356 printf("IR[ %04X ] IRCOMP [ %04X ]\n",amb_ir, amb_ircomp) ;
Rhyme 1:9450e20cf688 357 printf(" TEMP [ %04X ]\n",amb_temp) ;
Rhyme 1:9450e20cf688 358 printf("\n") ;
Rhyme 9:d4f76e6fa35f 359 wait_ms(interval) ;
Rhyme 1:9450e20cf688 360 }
Rhyme 1:9450e20cf688 361 delete max44005 ;
Rhyme 1:9450e20cf688 362 }
Rhyme 1:9450e20cf688 363
Rhyme 1:9450e20cf688 364 #define MODE_CLEAR_RGB_IR 0x02
Rhyme 1:9450e20cf688 365 void testMAX44008(void)
Rhyme 1:9450e20cf688 366 {
Rhyme 1:9450e20cf688 367 uint16_t amb_c, amb_r, amb_g, amb_b, amb_ir, amb_ircomp, amb_temp ;
Rhyme 1:9450e20cf688 368
Rhyme 1:9450e20cf688 369 MAX44008 *max44008 = new MAX44008(PIN_SDA, PIN_SCL, MSU_MAX44008_ADDRESS) ;
Rhyme 1:9450e20cf688 370 max44008->setMode(MODE_CLEAR_RGB_IR) ;
Rhyme 1:9450e20cf688 371 printf("test MAX44008\n") ;
Rhyme 1:9450e20cf688 372
Rhyme 1:9450e20cf688 373 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 1:9450e20cf688 374 amb_c = max44008->getAMB_CLEAR() ;
Rhyme 1:9450e20cf688 375 amb_r = max44008->getAMB_RED() ;
Rhyme 1:9450e20cf688 376 amb_g = max44008->getAMB_GREEN() ;
Rhyme 1:9450e20cf688 377 amb_b = max44008->getAMB_BLUE() ;
Rhyme 1:9450e20cf688 378 amb_ir = max44008->getIR() ;
Rhyme 1:9450e20cf688 379 amb_ircomp = max44008->getIRCOMP() ;
Rhyme 1:9450e20cf688 380 amb_temp = max44008->getTEMP() ;
Rhyme 1:9450e20cf688 381 printf("--- MAX44008 ---\n") ;
Rhyme 1:9450e20cf688 382 printf(" C[ %04X ]\n", amb_c) ;
Rhyme 1:9450e20cf688 383 printf("R[ %04X ] G[ %04X ] B[ %04X ]\n",amb_r, amb_g, amb_b) ;
Rhyme 1:9450e20cf688 384 printf("IR[ %04X ] IRCOMP [ %04X ]\n",amb_ir, amb_ircomp) ;
Rhyme 1:9450e20cf688 385 printf(" TEMP [ %04X ]\n",amb_temp) ;
Rhyme 1:9450e20cf688 386 printf("\n") ;
Rhyme 9:d4f76e6fa35f 387 wait_ms(interval) ;
Rhyme 1:9450e20cf688 388 }
Rhyme 1:9450e20cf688 389 delete max44008 ;
Rhyme 1:9450e20cf688 390 }
Rhyme 1:9450e20cf688 391
Rhyme 1:9450e20cf688 392 void testMPL3115A2(void)
Rhyme 1:9450e20cf688 393 {
Rhyme 1:9450e20cf688 394 uint32_t data, alt, bar, tmp ;
Rhyme 1:9450e20cf688 395 uint16_t sample_time ;
Rhyme 1:9450e20cf688 396 MPL3115A2 *mpl = new MPL3115A2(PIN_SDA, PIN_SCL, MSU_MPL3115A2_ADDRESS) ;
Rhyme 1:9450e20cf688 397
Rhyme 1:9450e20cf688 398 printf("test MPL3115A2\n") ;
Rhyme 1:9450e20cf688 399 for (int i = 0 ; i < test_loop ; i++) {
Rhyme 1:9450e20cf688 400 mpl->modeAlt() ;
Rhyme 1:9450e20cf688 401 sample_time = mpl->OneShot() ;
Rhyme 1:9450e20cf688 402 wait(((double)sample_time)/1000.0) ;
Rhyme 1:9450e20cf688 403 alt = mpl->getAltitude() ;
Rhyme 1:9450e20cf688 404 mpl->modeBar() ;
Rhyme 1:9450e20cf688 405 sample_time = mpl->OneShot() ;
Rhyme 1:9450e20cf688 406 wait(((double)sample_time)/1000.0) ;
Rhyme 1:9450e20cf688 407 bar = mpl->getPressure() ;
Rhyme 1:9450e20cf688 408 tmp = mpl->getTemperature() ;
Rhyme 1:9450e20cf688 409 printf("Altitude: %d, Pressure: %d, Temperature: %d\n",
Rhyme 1:9450e20cf688 410 (alt >> 16)&0xFFFF,
Rhyme 1:9450e20cf688 411 (bar >> 6),
Rhyme 1:9450e20cf688 412 (tmp >> 8) ) ;
Rhyme 9:d4f76e6fa35f 413 wait_ms(interval) ;
Rhyme 1:9450e20cf688 414 }
Rhyme 1:9450e20cf688 415 delete mpl ;
Rhyme 1:9450e20cf688 416 }
Rhyme 1:9450e20cf688 417
Rhyme 1:9450e20cf688 418 void testIS31SE5000(void)
Rhyme 1:9450e20cf688 419 {
Rhyme 1:9450e20cf688 420 printf("test ISI31SE5000\n") ;
Rhyme 1:9450e20cf688 421 printf("Sorry not implemented yet\n") ;
Rhyme 1:9450e20cf688 422 }
Rhyme 1:9450e20cf688 423
Rhyme 1:9450e20cf688 424 void testVEML6040A(void)
Rhyme 1:9450e20cf688 425 {
Rhyme 9:d4f76e6fa35f 426 uint16_t uR, uG, uB, uW ;
Rhyme 9:d4f76e6fa35f 427 VEML6040 *veml = new VEML6040(PIN_SDA, PIN_SCL, MSU_VEML6040A_ADDRESS) ;
Rhyme 9:d4f76e6fa35f 428
Rhyme 9:d4f76e6fa35f 429 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 9:d4f76e6fa35f 430 veml->setCOLORConf(0x04) ; /* one time trigger, other wise write 0 */
Rhyme 9:d4f76e6fa35f 431 wait(0.1) ;
Rhyme 9:d4f76e6fa35f 432 veml->getRData(&uR) ;
Rhyme 9:d4f76e6fa35f 433 veml->getGData(&uG) ;
Rhyme 9:d4f76e6fa35f 434 veml->getBData(&uB) ;
Rhyme 9:d4f76e6fa35f 435 veml->getWData(&uW) ;
Rhyme 9:d4f76e6fa35f 436 printf("VEML6040A R[%d], G[%d], B[%d], W[%d]\n", uR, uG, uB, uW) ;
Rhyme 9:d4f76e6fa35f 437 wait_ms(interval) ;
Rhyme 9:d4f76e6fa35f 438 }
Rhyme 10:710ba5364779 439 delete veml ;
Rhyme 1:9450e20cf688 440 }
Rhyme 1:9450e20cf688 441
Rhyme 15:17416bd1b51c 442 void testVEML6075(void)
Rhyme 1:9450e20cf688 443 {
Rhyme 15:17416bd1b51c 444 float uvi ;
Rhyme 15:17416bd1b51c 445 float uva, uvb, uva_cie, uvb_cie ;
Rhyme 15:17416bd1b51c 446 VEML6075 *veml = new VEML6075(PIN_SDA, PIN_SCL, MSU_VEML6075_ADDRESS) ;
Rhyme 15:17416bd1b51c 447
Rhyme 15:17416bd1b51c 448 veml->setUVConf(0x00) ;
Rhyme 15:17416bd1b51c 449 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 16:84a856643eab 450 uvi = veml->UVI() ;
Rhyme 16:84a856643eab 451 uva = veml->getUVA() ;
Rhyme 16:84a856643eab 452 uva_cie = veml->getUVA_CIE() ;
Rhyme 16:84a856643eab 453 uvb = veml->getUVB() ;
Rhyme 16:84a856643eab 454 uvb_cie = veml->getUVB_CIE() ;
Rhyme 16:84a856643eab 455
Rhyme 16:84a856643eab 456 printf("VEML6075 UVI[%.4f] UVA[%.4f] UVA_CIE[%.4f] UVB[%.4f] UVB_CIE[%.4f]\n",
Rhyme 15:17416bd1b51c 457 uvi, uva, uva_cie, uvb, uvb_cie) ;
Rhyme 15:17416bd1b51c 458 wait_ms(interval) ;
Rhyme 15:17416bd1b51c 459 }
Rhyme 15:17416bd1b51c 460 delete veml ;
Rhyme 10:710ba5364779 461 }
Rhyme 10:710ba5364779 462
Rhyme 17:514f67d94d12 463 void testVCNL4100(void)
Rhyme 17:514f67d94d12 464 {
Rhyme 17:514f67d94d12 465 uint8_t psData = 0x00 ;
Rhyme 17:514f67d94d12 466 uint16_t alsData = 0x00 ;
Rhyme 17:514f67d94d12 467 VCNL4100 *vcnl4100 = 0 ;
Rhyme 17:514f67d94d12 468
Rhyme 17:514f67d94d12 469 vcnl4100 = new VCNL4100(PIN_SDA, PIN_SCL, MSU_VCNL4100_I2C_ADDRESS) ;
Rhyme 17:514f67d94d12 470
Rhyme 17:514f67d94d12 471 printf("=== test VCNL4100 for %s (%s)\n", BOARD_NAME, __DATE__) ;
Rhyme 17:514f67d94d12 472 printf("Proximity, Ambient Light\n") ;
Rhyme 17:514f67d94d12 473
Rhyme 17:514f67d94d12 474 vcnl4100->setAlsConf(0x00) ;
Rhyme 17:514f67d94d12 475 vcnl4100->setPsConf12(0x0000) ;
Rhyme 17:514f67d94d12 476 vcnl4100->setSpo(0xA0) ;
Rhyme 17:514f67d94d12 477 wait(0.1) ;
Rhyme 17:514f67d94d12 478
Rhyme 17:514f67d94d12 479 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 17:514f67d94d12 480 psData = vcnl4100->getPsData() ;
Rhyme 17:514f67d94d12 481 alsData = vcnl4100->getAlsData() ;
Rhyme 17:514f67d94d12 482 printf("0x%02X, 0x%04X\n", psData, alsData) ;
Rhyme 17:514f67d94d12 483 wait(1);
Rhyme 17:514f67d94d12 484 }
Rhyme 17:514f67d94d12 485 delete vcnl4100 ;
Rhyme 17:514f67d94d12 486 }
Rhyme 17:514f67d94d12 487
Rhyme 17:514f67d94d12 488
Rhyme 10:710ba5364779 489 void testS11059(void)
Rhyme 10:710ba5364779 490 {
Rhyme 12:b3dff3bbb1eb 491 uint16_t uR, uG, uB, uIR ;
Rhyme 10:710ba5364779 492 uint8_t ctrl ;
Rhyme 10:710ba5364779 493 S11059 *s11059 = new S11059(PIN_SDA, PIN_SCL, MSU_S11059_ADDRESS) ;
Rhyme 10:710ba5364779 494
Rhyme 10:710ba5364779 495 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 10:710ba5364779 496 ctrl = 0x89 ; /* ADC reset, High Gain, integration time 1.4ms */
Rhyme 10:710ba5364779 497 s11059->setControl(ctrl) ;
Rhyme 10:710ba5364779 498 ctrl = 0x09 ; /* Release ADC reset, High Gain, integration time 1.4ms */
Rhyme 10:710ba5364779 499 s11059->setControl(ctrl) ; /* start measure */
Rhyme 10:710ba5364779 500 wait(0.02) ;
Rhyme 10:710ba5364779 501 s11059->getRData(&uR) ;
Rhyme 10:710ba5364779 502 s11059->getGData(&uG) ;
Rhyme 10:710ba5364779 503 s11059->getBData(&uB) ;
Rhyme 12:b3dff3bbb1eb 504 s11059->getIRData(&uIR) ;
Rhyme 12:b3dff3bbb1eb 505 printf("S11059 R[%d], G[%d], B[%d], IR[%d]\n", uR, uG, uB, uIR) ;
Rhyme 10:710ba5364779 506 wait_ms(interval) ;
Rhyme 10:710ba5364779 507 }
Rhyme 10:710ba5364779 508 delete s11059 ;
Rhyme 14:1e6e4fdf90d0 509 }
Rhyme 14:1e6e4fdf90d0 510
Rhyme 14:1e6e4fdf90d0 511 void init_max30101(void)
Rhyme 14:1e6e4fdf90d0 512 {
Rhyme 14:1e6e4fdf90d0 513 uint32_t slot_config = 0 ;
Rhyme 14:1e6e4fdf90d0 514 uint8_t mode ;
Rhyme 14:1e6e4fdf90d0 515
Rhyme 14:1e6e4fdf90d0 516 max30101 = new MAX30101(PIN_SDA, PIN_SCL, MAX30101_I2C_ADDRESS) ;
Rhyme 14:1e6e4fdf90d0 517 max30101->reset() ;
Rhyme 14:1e6e4fdf90d0 518
Rhyme 14:1e6e4fdf90d0 519 /* config for Mode Configuration (0x09) */
Rhyme 14:1e6e4fdf90d0 520
Rhyme 14:1e6e4fdf90d0 521 mode = 0x07 ; /* Green, Red, and/or IR */
Rhyme 14:1e6e4fdf90d0 522 // mode = 0x03 ; /* SpO2 mode */
Rhyme 14:1e6e4fdf90d0 523 max30101->setMODE_CONFIG(mode) ;
Rhyme 14:1e6e4fdf90d0 524
Rhyme 14:1e6e4fdf90d0 525 /* config for FIFO Configuration (0x08) */
Rhyme 14:1e6e4fdf90d0 526 mode =
Rhyme 14:1e6e4fdf90d0 527 // (0x02 << 5) /* SMP_AVE = 2 -> avarage of 4 data */
Rhyme 14:1e6e4fdf90d0 528 (0x05 << 5) /* SMP_AVE = 5 -> avarage of 32 data */
Rhyme 14:1e6e4fdf90d0 529 // | (0x01 << 4) /* FIFO_ROLLOVER_EN = 1 */
Rhyme 14:1e6e4fdf90d0 530 | (0x00 << 4) /* FIFO_ROLLOVER_EN = 0 */
Rhyme 14:1e6e4fdf90d0 531 | (0x0C) /* FIFO ALMOST FULL at 12 (0x0C) */
Rhyme 14:1e6e4fdf90d0 532 ;
Rhyme 14:1e6e4fdf90d0 533 max30101->setFIFO_CONFIG(mode) ;
Rhyme 14:1e6e4fdf90d0 534
Rhyme 14:1e6e4fdf90d0 535 max30101->setLED1_PA(0x80) ;
Rhyme 14:1e6e4fdf90d0 536 max30101->setLED2_PA(0x80) ;
Rhyme 14:1e6e4fdf90d0 537 // max30101->setLED3_PA(0x80) ;
Rhyme 14:1e6e4fdf90d0 538 // max30101->setPILOT_PA(0x80) ;
Rhyme 14:1e6e4fdf90d0 539 #if 0
Rhyme 14:1e6e4fdf90d0 540 slot_config =
Rhyme 14:1e6e4fdf90d0 541 (0x02 << 24) /* SLOT2 LED2(IR) */
Rhyme 14:1e6e4fdf90d0 542 | (0x01 << 16) /* SLOT1 LED1(RED) */
Rhyme 14:1e6e4fdf90d0 543 | (0x00 << 8) /* SLOT4 none */
Rhyme 14:1e6e4fdf90d0 544 | (0x03) /* SLOT3 LED3(GREEN) */
Rhyme 14:1e6e4fdf90d0 545 ;
Rhyme 14:1e6e4fdf90d0 546 max30101->setSLOT(slot_config) ;
Rhyme 14:1e6e4fdf90d0 547 #endif
Rhyme 14:1e6e4fdf90d0 548 mode = 0x01 ;
Rhyme 14:1e6e4fdf90d0 549 max30101->setPROX_INT_THR(mode) ;
Rhyme 14:1e6e4fdf90d0 550 }
Rhyme 14:1e6e4fdf90d0 551
Rhyme 14:1e6e4fdf90d0 552 void readSPO2_FIFO(void)
Rhyme 14:1e6e4fdf90d0 553 {
Rhyme 14:1e6e4fdf90d0 554 uint32_t data[2] ;
Rhyme 14:1e6e4fdf90d0 555 uint8_t fifo_wr_ptr, fifo_rd_ptr ;
Rhyme 14:1e6e4fdf90d0 556 int num_available_samples = 0 ;
Rhyme 14:1e6e4fdf90d0 557 int num_samples_to_read = 6 ;
Rhyme 14:1e6e4fdf90d0 558 int i ;
Rhyme 14:1e6e4fdf90d0 559
Rhyme 14:1e6e4fdf90d0 560 fifo_wr_ptr = max30101->getFIFO_WR_PTR() ;
Rhyme 14:1e6e4fdf90d0 561 fifo_rd_ptr = max30101->getFIFO_RD_PTR() ;
Rhyme 14:1e6e4fdf90d0 562 num_available_samples = (fifo_wr_ptr + FIFO_DEPTH - fifo_rd_ptr) % FIFO_DEPTH ;
Rhyme 14:1e6e4fdf90d0 563
Rhyme 14:1e6e4fdf90d0 564 if (num_available_samples < num_samples_to_read) {
Rhyme 14:1e6e4fdf90d0 565 num_samples_to_read = num_available_samples / 2 ;
Rhyme 14:1e6e4fdf90d0 566 } else {
Rhyme 14:1e6e4fdf90d0 567 num_samples_to_read = num_available_samples ;
Rhyme 14:1e6e4fdf90d0 568 }
Rhyme 14:1e6e4fdf90d0 569 printf("=== %d data %d to read===\n",
Rhyme 14:1e6e4fdf90d0 570 num_available_samples, num_samples_to_read) ;
Rhyme 14:1e6e4fdf90d0 571 for (i = 0 ; i < num_samples_to_read ; i++ ) {
Rhyme 14:1e6e4fdf90d0 572 data[0] = max30101->readFIFO() ; /* LED1 */
Rhyme 14:1e6e4fdf90d0 573 data[1] = max30101->readFIFO() ; /* IR */
Rhyme 14:1e6e4fdf90d0 574 // printf("LED1: 0x%05X, IR: 0x%05X\n", data[0], data[1]) ;
Rhyme 14:1e6e4fdf90d0 575 }
Rhyme 14:1e6e4fdf90d0 576 // max30101->setFIFO_WR_PTR(0) ;
Rhyme 14:1e6e4fdf90d0 577 // max30101->setFIFO_RD_PTR(0) ;
Rhyme 14:1e6e4fdf90d0 578 }
Rhyme 14:1e6e4fdf90d0 579
Rhyme 14:1e6e4fdf90d0 580 void SPO2_isr(void)
Rhyme 14:1e6e4fdf90d0 581 {
Rhyme 14:1e6e4fdf90d0 582 uint16_t flag, config ;
Rhyme 14:1e6e4fdf90d0 583 float temp ;
Rhyme 14:1e6e4fdf90d0 584 int temp_int, temp_frac ;
Rhyme 14:1e6e4fdf90d0 585
Rhyme 14:1e6e4fdf90d0 586 flag = max30101->getIntStatus() ;
Rhyme 14:1e6e4fdf90d0 587 config = max30101->getIntEnable() ;
Rhyme 14:1e6e4fdf90d0 588 // printf("Int: 0x%04X Enable: 0x%04X\n", flag, config) ;
Rhyme 14:1e6e4fdf90d0 589 if (flag & INT_ST_A_FULL) { /* A_FULL_EN */
Rhyme 14:1e6e4fdf90d0 590 // printf("FIFO almost full!\n") ;
Rhyme 14:1e6e4fdf90d0 591 readSPO2_FIFO() ;
Rhyme 14:1e6e4fdf90d0 592 }
Rhyme 14:1e6e4fdf90d0 593 if (flag & INT_ST_PPG_RGY) { /* New FIFO Data Ready */
Rhyme 14:1e6e4fdf90d0 594 printf("New FIFO Data Ready\n") ;
Rhyme 14:1e6e4fdf90d0 595 }
Rhyme 14:1e6e4fdf90d0 596 if (flag & INT_ST_ALC_OVF) { /* Ambient Light Cancellaration Overflow */
Rhyme 14:1e6e4fdf90d0 597 printf("Ambient Light Cancellaration Overflow\n") ;
Rhyme 14:1e6e4fdf90d0 598 }
Rhyme 14:1e6e4fdf90d0 599 if (flag & INT_ST_PROX_INT) {/* Proximity Threshold Triggered */
Rhyme 14:1e6e4fdf90d0 600 printf("Proximity Threshold Triggered\n") ;
Rhyme 14:1e6e4fdf90d0 601 }
Rhyme 14:1e6e4fdf90d0 602 if (flag & INT_ST_PWR_RDY) {/* Power Ready Flag */
Rhyme 14:1e6e4fdf90d0 603 printf("Power Ready!\n") ;
Rhyme 14:1e6e4fdf90d0 604 }
Rhyme 14:1e6e4fdf90d0 605 if (flag & INT_ST_DIE_TEMP_RDY) {/* Internal Temperature Ready Flag */
Rhyme 14:1e6e4fdf90d0 606 printf("DIE Temperature Ready!\n") ;
Rhyme 14:1e6e4fdf90d0 607 temp_int = max30101->getTEMP_INT() ;
Rhyme 14:1e6e4fdf90d0 608 temp_frac = max30101->getTEMP_FRAC() ;
Rhyme 14:1e6e4fdf90d0 609 temp = ((float)temp_int)+(((float)temp_frac)/16.0) ;
Rhyme 14:1e6e4fdf90d0 610 printf("Temp: %.2f\n", temp) ;
Rhyme 14:1e6e4fdf90d0 611 }
Rhyme 14:1e6e4fdf90d0 612 }
Rhyme 14:1e6e4fdf90d0 613
Rhyme 14:1e6e4fdf90d0 614 void initSPO2(void)
Rhyme 14:1e6e4fdf90d0 615 {
Rhyme 14:1e6e4fdf90d0 616 uint8_t config_byte = 0 ;
Rhyme 14:1e6e4fdf90d0 617 uint16_t slot_config = 0 ;
Rhyme 14:1e6e4fdf90d0 618
Rhyme 14:1e6e4fdf90d0 619 /* config for SPO2 (0x0A) */
Rhyme 14:1e6e4fdf90d0 620 config_byte =
Rhyme 14:1e6e4fdf90d0 621 (0x01 << 5) /* SPO2_ADC_RGE */
Rhyme 14:1e6e4fdf90d0 622 // | (0x05 << 3) /* SPO2_SR 101 = 1000 samples/sec */
Rhyme 14:1e6e4fdf90d0 623 | (0x00 << 3) /* SPO2_SR 000 = 50 samples/sec */
Rhyme 14:1e6e4fdf90d0 624 | (0x00) /* LED_PW 00 = 69us */
Rhyme 14:1e6e4fdf90d0 625 ;
Rhyme 14:1e6e4fdf90d0 626 max30101->setSPO2_CONFIG(config_byte) ;
Rhyme 14:1e6e4fdf90d0 627
Rhyme 14:1e6e4fdf90d0 628 /* slot configuration */
Rhyme 14:1e6e4fdf90d0 629 slot_config =
Rhyme 14:1e6e4fdf90d0 630 (0x02 << 12) /* SLOT2 LED2(IR) */
Rhyme 14:1e6e4fdf90d0 631 | (0x01 << 8) /* SLOT1 LED1(RED) */
Rhyme 14:1e6e4fdf90d0 632 | (0x00 << 4) /* SLOT4 none */
Rhyme 14:1e6e4fdf90d0 633 | (0x00) /* SLOT3 none */
Rhyme 14:1e6e4fdf90d0 634 ;
Rhyme 14:1e6e4fdf90d0 635 max30101->setSLOT(slot_config) ;
Rhyme 14:1e6e4fdf90d0 636
Rhyme 14:1e6e4fdf90d0 637 /* Inititalize FIFO */
Rhyme 14:1e6e4fdf90d0 638 /* config for FIFO Configuration (0x08) */
Rhyme 14:1e6e4fdf90d0 639 config_byte =
Rhyme 14:1e6e4fdf90d0 640 (0x02 << 5) /* SMP_AVE = 2 -> avarage of 4 data */
Rhyme 14:1e6e4fdf90d0 641 | (0x01 << 4) /* FIFO_ROLLOVER_EN = 1 */
Rhyme 14:1e6e4fdf90d0 642 // | (0x0C) /* FIFO ALMOST FULL at 12 (0x0C) */
Rhyme 14:1e6e4fdf90d0 643 | (0x09) /* FIFO ALMOST FULL at 9 */
Rhyme 14:1e6e4fdf90d0 644 ;
Rhyme 14:1e6e4fdf90d0 645 max30101->setFIFO_CONFIG(config_byte) ;
Rhyme 14:1e6e4fdf90d0 646
Rhyme 14:1e6e4fdf90d0 647
Rhyme 14:1e6e4fdf90d0 648 }
Rhyme 14:1e6e4fdf90d0 649
Rhyme 14:1e6e4fdf90d0 650 void testMAX30101(void)
Rhyme 14:1e6e4fdf90d0 651 {
Rhyme 14:1e6e4fdf90d0 652 uint16_t int_config = 0 ;
Rhyme 14:1e6e4fdf90d0 653 uint8_t flag = 0 ;
Rhyme 14:1e6e4fdf90d0 654 float temp = 0.0 ;
Rhyme 14:1e6e4fdf90d0 655 uint8_t id, rev ;
Rhyme 14:1e6e4fdf90d0 656 InterruptIn *int0 ;
Rhyme 14:1e6e4fdf90d0 657 MAX30101 *max30101 ;
Rhyme 14:1e6e4fdf90d0 658
Rhyme 14:1e6e4fdf90d0 659 int0 = new InterruptIn(PIN_INT1) ;
Rhyme 14:1e6e4fdf90d0 660
Rhyme 14:1e6e4fdf90d0 661 max30101 = new MAX30101(PIN_SDA, PIN_SCL, MSU_MAX30101_ADDRESS) ;
Rhyme 14:1e6e4fdf90d0 662
Rhyme 14:1e6e4fdf90d0 663 init_max30101() ;
Rhyme 14:1e6e4fdf90d0 664 id = max30101->getID() ;
Rhyme 14:1e6e4fdf90d0 665 rev = max30101->getRev() ;
Rhyme 14:1e6e4fdf90d0 666 printf("MAX30101 ID: 0x%02X, Rev: 0x%02X\n", id, rev) ;
Rhyme 14:1e6e4fdf90d0 667
Rhyme 14:1e6e4fdf90d0 668 initSPO2() ;
Rhyme 14:1e6e4fdf90d0 669 int0->fall(&SPO2_isr) ;
Rhyme 14:1e6e4fdf90d0 670 max30101->setMODE_CONFIG(MODE_SPO2) ;
Rhyme 14:1e6e4fdf90d0 671 max30101->setIntEnable( INT_EN_A_FULL | INT_EN_DIE_TEMP_RDY ) ;
Rhyme 14:1e6e4fdf90d0 672 int_config = max30101->getIntEnable() ;
Rhyme 14:1e6e4fdf90d0 673 printf("Int enable: 0x%04X\n", int_config) ;
Rhyme 14:1e6e4fdf90d0 674 flag = max30101->getIntStatus() ;
Rhyme 14:1e6e4fdf90d0 675
Rhyme 14:1e6e4fdf90d0 676 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 14:1e6e4fdf90d0 677 max30101->setTEMP_EN() ; /* trigger temperature read */
Rhyme 14:1e6e4fdf90d0 678 temp = max30101->getTEMP() ;
Rhyme 14:1e6e4fdf90d0 679 flag = max30101->getIntStatus() ;
Rhyme 14:1e6e4fdf90d0 680 printf("Temp = %.2f interrupt flags = 0x%02X\n", temp, flag) ;
Rhyme 14:1e6e4fdf90d0 681 wait(1) ;
Rhyme 14:1e6e4fdf90d0 682 }
Rhyme 14:1e6e4fdf90d0 683
Rhyme 14:1e6e4fdf90d0 684 delete max30101 ;
Rhyme 14:1e6e4fdf90d0 685 delete int0 ;
Rhyme 18:ee6f43cbfcc1 686 }
Rhyme 18:ee6f43cbfcc1 687
Rhyme 18:ee6f43cbfcc1 688 void testAK9752(void)
Rhyme 18:ee6f43cbfcc1 689 {
Rhyme 18:ee6f43cbfcc1 690 int companyID, deviceID ;
Rhyme 18:ee6f43cbfcc1 691 float temp, ir ;
Rhyme 18:ee6f43cbfcc1 692 AK9752 *ak9752 = 0 ;
Rhyme 18:ee6f43cbfcc1 693 ak9752 = new AK9752(PIN_SDA, PIN_SCL, MSU_AK9752_I2C_ADDRESS) ;
Rhyme 18:ee6f43cbfcc1 694 companyID = ak9752->getCompanyCode() ;
Rhyme 18:ee6f43cbfcc1 695 deviceID = ak9752->getDeviceID() ;
Rhyme 18:ee6f43cbfcc1 696 printf("=== AK9752 ===\n") ;
Rhyme 18:ee6f43cbfcc1 697 printf("Company Code = 0x%02X [should be 0x48]\n", companyID) ;
Rhyme 18:ee6f43cbfcc1 698 printf("Device ID = 0x%02X [should be 0x14]\n", deviceID) ;
Rhyme 18:ee6f43cbfcc1 699 printf("Temp IR\n") ;
Rhyme 18:ee6f43cbfcc1 700 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 18:ee6f43cbfcc1 701 ak9752->setCNTL2(0xFE) ; /* single shot */
Rhyme 18:ee6f43cbfcc1 702 while(ak9752->dataReady() != true) {
Rhyme 18:ee6f43cbfcc1 703 ;
Rhyme 18:ee6f43cbfcc1 704 }
Rhyme 18:ee6f43cbfcc1 705 ir = ak9752->getIR() ;
Rhyme 18:ee6f43cbfcc1 706 temp = ak9752->getTMP() ;
Rhyme 18:ee6f43cbfcc1 707 ak9752->dataOverRun() ; /* clear data ready */
Rhyme 18:ee6f43cbfcc1 708 printf("%.2f %.2f\n", temp, ir) ;
Rhyme 18:ee6f43cbfcc1 709 wait(0.1) ;
Rhyme 18:ee6f43cbfcc1 710 }
Rhyme 18:ee6f43cbfcc1 711 delete ak9752 ;
Rhyme 18:ee6f43cbfcc1 712 }
Rhyme 18:ee6f43cbfcc1 713
Rhyme 18:ee6f43cbfcc1 714 void testAK9753(void)
Rhyme 18:ee6f43cbfcc1 715 {
Rhyme 18:ee6f43cbfcc1 716 int companyID, deviceID ;
Rhyme 18:ee6f43cbfcc1 717 float temp, ir[4] ;
Rhyme 18:ee6f43cbfcc1 718 AK9753 *ak9753 = 0 ;
Rhyme 18:ee6f43cbfcc1 719 ak9753 = new AK9753(PIN_SDA, PIN_SCL, MSU_AK9753_I2C_ADDRESS) ;
Rhyme 18:ee6f43cbfcc1 720 ak9753->software_reset() ;
Rhyme 18:ee6f43cbfcc1 721 companyID = ak9753->getCompanyCode() ;
Rhyme 18:ee6f43cbfcc1 722 deviceID = ak9753->getDeviceID() ;
Rhyme 18:ee6f43cbfcc1 723 printf("=== AK9753 ===\n") ;
Rhyme 18:ee6f43cbfcc1 724 printf("Company Code = 0x%02X [should be 0x48]\n", companyID) ;
Rhyme 18:ee6f43cbfcc1 725 printf("Device ID = 0x%02X [should be 0x13]\n", deviceID) ;
Rhyme 18:ee6f43cbfcc1 726 printf("Temp IR1 IR2 IR3 IR4\n") ;
Rhyme 18:ee6f43cbfcc1 727 ak9753->setEINTEN(0x01) ;
Rhyme 18:ee6f43cbfcc1 728 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 18:ee6f43cbfcc1 729 ak9753->setECNTL1(0xAA) ; /* single shot */
Rhyme 18:ee6f43cbfcc1 730 while(ak9753->dataReady() != true) {
Rhyme 18:ee6f43cbfcc1 731 ;
Rhyme 18:ee6f43cbfcc1 732 }
Rhyme 18:ee6f43cbfcc1 733 temp = ak9753->getTMP() ;
Rhyme 18:ee6f43cbfcc1 734 ir[0] = ak9753->getIR1() ;
Rhyme 18:ee6f43cbfcc1 735 ir[1] = ak9753->getIR2() ;
Rhyme 18:ee6f43cbfcc1 736 ir[2] = ak9753->getIR3() ;
Rhyme 18:ee6f43cbfcc1 737 ir[3] = ak9753->getIR4() ;
Rhyme 18:ee6f43cbfcc1 738 ak9753->dataOverRun() ; /* clear data ready */
Rhyme 18:ee6f43cbfcc1 739 printf("%.2f %.2f %.2f %.2f %.2f\n",
Rhyme 18:ee6f43cbfcc1 740 temp, ir[0], ir[1], ir[2], ir[3]) ;
Rhyme 18:ee6f43cbfcc1 741 wait(0.2) ;
Rhyme 18:ee6f43cbfcc1 742 }
Rhyme 18:ee6f43cbfcc1 743 delete ak9753 ;
Rhyme 18:ee6f43cbfcc1 744 }
Rhyme 18:ee6f43cbfcc1 745
Rhyme 19:dfd1f76515c5 746 void testAK09970N(void)
Rhyme 18:ee6f43cbfcc1 747 {
Rhyme 19:dfd1f76515c5 748 uint16_t companyID, deviceID ;
Rhyme 19:dfd1f76515c5 749 uint16_t status ;
Rhyme 19:dfd1f76515c5 750 float x, y, z ;
Rhyme 19:dfd1f76515c5 751 int result ;
Rhyme 19:dfd1f76515c5 752
Rhyme 19:dfd1f76515c5 753 AK09970N *ak09970n = 0 ;
Rhyme 19:dfd1f76515c5 754 ak09970n = new AK09970N(PIN_SDA, PIN_SCL, MSU_AK09970N_I2C_ADDRESS) ;
Rhyme 19:dfd1f76515c5 755 ak09970n->software_reset() ;
Rhyme 19:dfd1f76515c5 756 ak09970n->getID(&companyID, &deviceID) ;
Rhyme 19:dfd1f76515c5 757 printf("=== AK09970N ===\n") ;
Rhyme 19:dfd1f76515c5 758 printf("Company ID = 0x%02X (expected 0x48)\n", companyID) ;
Rhyme 19:dfd1f76515c5 759 printf("Device ID = 0x%02X (expected 0xC0)\n", deviceID) ;
Rhyme 19:dfd1f76515c5 760 printf(" X Y Z\n") ;
Rhyme 19:dfd1f76515c5 761 // status = ak09970n->getStatus() ;
Rhyme 19:dfd1f76515c5 762 // printf("Status = 0x%04X\n", status) ;
Rhyme 19:dfd1f76515c5 763
Rhyme 19:dfd1f76515c5 764 for (int i = 0 ; i < test_loop ; i++ ) {
Rhyme 19:dfd1f76515c5 765 // result = ak09970n->setConfig(0x08) ; /* 10Hz continuous mode */
Rhyme 19:dfd1f76515c5 766 result = ak09970n->singleShot() ;
Rhyme 19:dfd1f76515c5 767 status = ak09970n->getStatus() ;
Rhyme 19:dfd1f76515c5 768 while((status & 0x01) != 0x01) { /* wait for data ready */
Rhyme 19:dfd1f76515c5 769 wait_ms(10) ;
Rhyme 19:dfd1f76515c5 770 status = ak09970n->getStatus() ;
Rhyme 19:dfd1f76515c5 771 }
Rhyme 19:dfd1f76515c5 772 ak09970n->getX_Y_Z(&status, &x, &y, &z) ;
Rhyme 19:dfd1f76515c5 773 printf("%2.4f %2.4f %2.4f\n", x, y, z) ;
Rhyme 19:dfd1f76515c5 774 wait_ms(100) ;
Rhyme 19:dfd1f76515c5 775 }
Rhyme 19:dfd1f76515c5 776 delete ak09970n ;
Rhyme 1:9450e20cf688 777 }