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
MSU.cpp@19:dfd1f76515c5, 2017-12-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |