|
| 1 | +// Basic demo for accelerometer, gyro, and magnetometer readings from the Adafruit |
| 2 | +// LSM6DSOX+LIS3MDL Breakout or FeatherWing and the LSM6DSOX+LIS3MDL Breakout |
| 3 | + |
| 4 | +#include <Adafruit_LSM6DSOX.h> |
| 5 | +Adafruit_LSM6DSOX lsm6ds; |
| 6 | + |
| 7 | +// To use with the LSM6DS33+LIS3MDL breakout, uncomment these two lines |
| 8 | +// and comment out the lines referring to the LSM6DSOX above |
| 9 | +//#include <Adafruit_LSM6DS33.h> |
| 10 | +//Adafruit_LSM6DS33 lsm6ds; |
| 11 | + |
| 12 | +#include <Adafruit_LIS3MDL.h> |
| 13 | + |
| 14 | +Adafruit_LIS3MDL lis3mdl; |
| 15 | + |
| 16 | +void setup(void) { |
| 17 | + Serial.begin(115200); |
| 18 | + while (!Serial) |
| 19 | + delay(10); // will pause Zero, Leonardo, etc until serial console opens |
| 20 | + |
| 21 | + Serial.println("Adafruit LSM6DS+LIS3MDL test!"); |
| 22 | + |
| 23 | + bool lsm6ds_success, lis3mdl_success; |
| 24 | + |
| 25 | + // hardware I2C mode, can pass in address & alt Wire |
| 26 | + |
| 27 | + lsm6ds_success = lsm6ds.begin_I2C(); |
| 28 | + lis3mdl_success = lis3mdl.begin_I2C(); |
| 29 | + |
| 30 | + if (!lsm6ds_success){ |
| 31 | + Serial.println("Failed to find LSM6DS chip"); |
| 32 | + } |
| 33 | + if (!lis3mdl_success){ |
| 34 | + Serial.println("Failed to find LIS3MDL chip"); |
| 35 | + } |
| 36 | + if (!(lsm6ds_success && lis3mdl_success)) { |
| 37 | + while (1) { |
| 38 | + delay(10); |
| 39 | + } |
| 40 | + } |
| 41 | + |
| 42 | + Serial.println("LSM6DS and LIS3MDL Found!"); |
| 43 | + |
| 44 | + // lsm6ds.setAccelRange(LSM6DS_ACCEL_RANGE_2_G); |
| 45 | + Serial.print("Accelerometer range set to: "); |
| 46 | + switch (lsm6ds.getAccelRange()) { |
| 47 | + case LSM6DS_ACCEL_RANGE_2_G: |
| 48 | + Serial.println("+-2G"); |
| 49 | + break; |
| 50 | + case LSM6DS_ACCEL_RANGE_4_G: |
| 51 | + Serial.println("+-4G"); |
| 52 | + break; |
| 53 | + case LSM6DS_ACCEL_RANGE_8_G: |
| 54 | + Serial.println("+-8G"); |
| 55 | + break; |
| 56 | + case LSM6DS_ACCEL_RANGE_16_G: |
| 57 | + Serial.println("+-16G"); |
| 58 | + break; |
| 59 | + } |
| 60 | + |
| 61 | + // lsm6ds.setAccelDataRate(LSM6DS_RATE_12_5_HZ); |
| 62 | + Serial.print("Accelerometer data rate set to: "); |
| 63 | + switch (lsm6ds.getAccelDataRate()) { |
| 64 | + case LSM6DS_RATE_SHUTDOWN: |
| 65 | + Serial.println("0 Hz"); |
| 66 | + break; |
| 67 | + case LSM6DS_RATE_12_5_HZ: |
| 68 | + Serial.println("12.5 Hz"); |
| 69 | + break; |
| 70 | + case LSM6DS_RATE_26_HZ: |
| 71 | + Serial.println("26 Hz"); |
| 72 | + break; |
| 73 | + case LSM6DS_RATE_52_HZ: |
| 74 | + Serial.println("52 Hz"); |
| 75 | + break; |
| 76 | + case LSM6DS_RATE_104_HZ: |
| 77 | + Serial.println("104 Hz"); |
| 78 | + break; |
| 79 | + case LSM6DS_RATE_208_HZ: |
| 80 | + Serial.println("208 Hz"); |
| 81 | + break; |
| 82 | + case LSM6DS_RATE_416_HZ: |
| 83 | + Serial.println("416 Hz"); |
| 84 | + break; |
| 85 | + case LSM6DS_RATE_833_HZ: |
| 86 | + Serial.println("833 Hz"); |
| 87 | + break; |
| 88 | + case LSM6DS_RATE_1_66K_HZ: |
| 89 | + Serial.println("1.66 KHz"); |
| 90 | + break; |
| 91 | + case LSM6DS_RATE_3_33K_HZ: |
| 92 | + Serial.println("3.33 KHz"); |
| 93 | + break; |
| 94 | + case LSM6DS_RATE_6_66K_HZ: |
| 95 | + Serial.println("6.66 KHz"); |
| 96 | + break; |
| 97 | + } |
| 98 | + |
| 99 | + // lsm6ds.setGyroRange(LSM6DS_GYRO_RANGE_250_DPS ); |
| 100 | + Serial.print("Gyro range set to: "); |
| 101 | + switch (lsm6ds.getGyroRange()) { |
| 102 | + case LSM6DS_GYRO_RANGE_125_DPS: |
| 103 | + Serial.println("125 degrees/s"); |
| 104 | + break; |
| 105 | + case LSM6DS_GYRO_RANGE_250_DPS: |
| 106 | + Serial.println("250 degrees/s"); |
| 107 | + break; |
| 108 | + case LSM6DS_GYRO_RANGE_500_DPS: |
| 109 | + Serial.println("500 degrees/s"); |
| 110 | + break; |
| 111 | + case LSM6DS_GYRO_RANGE_1000_DPS: |
| 112 | + Serial.println("1000 degrees/s"); |
| 113 | + break; |
| 114 | + case LSM6DS_GYRO_RANGE_2000_DPS: |
| 115 | + Serial.println("2000 degrees/s"); |
| 116 | + break; |
| 117 | + case ISM330DHCT_GYRO_RANGE_4000_DPS: |
| 118 | + break; // unsupported range for the DSOX |
| 119 | + } |
| 120 | + // lsm6ds.setGyroDataRate(LSM6DS_RATE_12_5_HZ); |
| 121 | + Serial.print("Gyro data rate set to: "); |
| 122 | + switch (lsm6ds.getGyroDataRate()) { |
| 123 | + case LSM6DS_RATE_SHUTDOWN: |
| 124 | + Serial.println("0 Hz"); |
| 125 | + break; |
| 126 | + case LSM6DS_RATE_12_5_HZ: |
| 127 | + Serial.println("12.5 Hz"); |
| 128 | + break; |
| 129 | + case LSM6DS_RATE_26_HZ: |
| 130 | + Serial.println("26 Hz"); |
| 131 | + break; |
| 132 | + case LSM6DS_RATE_52_HZ: |
| 133 | + Serial.println("52 Hz"); |
| 134 | + break; |
| 135 | + case LSM6DS_RATE_104_HZ: |
| 136 | + Serial.println("104 Hz"); |
| 137 | + break; |
| 138 | + case LSM6DS_RATE_208_HZ: |
| 139 | + Serial.println("208 Hz"); |
| 140 | + break; |
| 141 | + case LSM6DS_RATE_416_HZ: |
| 142 | + Serial.println("416 Hz"); |
| 143 | + break; |
| 144 | + case LSM6DS_RATE_833_HZ: |
| 145 | + Serial.println("833 Hz"); |
| 146 | + break; |
| 147 | + case LSM6DS_RATE_1_66K_HZ: |
| 148 | + Serial.println("1.66 KHz"); |
| 149 | + break; |
| 150 | + case LSM6DS_RATE_3_33K_HZ: |
| 151 | + Serial.println("3.33 KHz"); |
| 152 | + break; |
| 153 | + case LSM6DS_RATE_6_66K_HZ: |
| 154 | + Serial.println("6.66 KHz"); |
| 155 | + break; |
| 156 | + } |
| 157 | + |
| 158 | + lis3mdl.setDataRate(LIS3MDL_DATARATE_155_HZ); |
| 159 | + // You can check the datarate by looking at the frequency of the DRDY pin |
| 160 | + Serial.print("Magnetometer data rate set to: "); |
| 161 | + switch (lis3mdl.getDataRate()) { |
| 162 | + case LIS3MDL_DATARATE_0_625_HZ: Serial.println("0.625 Hz"); break; |
| 163 | + case LIS3MDL_DATARATE_1_25_HZ: Serial.println("1.25 Hz"); break; |
| 164 | + case LIS3MDL_DATARATE_2_5_HZ: Serial.println("2.5 Hz"); break; |
| 165 | + case LIS3MDL_DATARATE_5_HZ: Serial.println("5 Hz"); break; |
| 166 | + case LIS3MDL_DATARATE_10_HZ: Serial.println("10 Hz"); break; |
| 167 | + case LIS3MDL_DATARATE_20_HZ: Serial.println("20 Hz"); break; |
| 168 | + case LIS3MDL_DATARATE_40_HZ: Serial.println("40 Hz"); break; |
| 169 | + case LIS3MDL_DATARATE_80_HZ: Serial.println("80 Hz"); break; |
| 170 | + case LIS3MDL_DATARATE_155_HZ: Serial.println("155 Hz"); break; |
| 171 | + case LIS3MDL_DATARATE_300_HZ: Serial.println("300 Hz"); break; |
| 172 | + case LIS3MDL_DATARATE_560_HZ: Serial.println("560 Hz"); break; |
| 173 | + case LIS3MDL_DATARATE_1000_HZ: Serial.println("1000 Hz"); break; |
| 174 | + } |
| 175 | + |
| 176 | + lis3mdl.setRange(LIS3MDL_RANGE_4_GAUSS); |
| 177 | + Serial.print("Range set to: "); |
| 178 | + switch (lis3mdl.getRange()) { |
| 179 | + case LIS3MDL_RANGE_4_GAUSS: Serial.println("+-4 gauss"); break; |
| 180 | + case LIS3MDL_RANGE_8_GAUSS: Serial.println("+-8 gauss"); break; |
| 181 | + case LIS3MDL_RANGE_12_GAUSS: Serial.println("+-12 gauss"); break; |
| 182 | + case LIS3MDL_RANGE_16_GAUSS: Serial.println("+-16 gauss"); break; |
| 183 | + } |
| 184 | + |
| 185 | + lis3mdl.setPerformanceMode(LIS3MDL_MEDIUMMODE); |
| 186 | + Serial.print("Magnetometer performance mode set to: "); |
| 187 | + switch (lis3mdl.getPerformanceMode()) { |
| 188 | + case LIS3MDL_LOWPOWERMODE: Serial.println("Low"); break; |
| 189 | + case LIS3MDL_MEDIUMMODE: Serial.println("Medium"); break; |
| 190 | + case LIS3MDL_HIGHMODE: Serial.println("High"); break; |
| 191 | + case LIS3MDL_ULTRAHIGHMODE: Serial.println("Ultra-High"); break; |
| 192 | + } |
| 193 | + |
| 194 | + lis3mdl.setOperationMode(LIS3MDL_CONTINUOUSMODE); |
| 195 | + Serial.print("Magnetometer operation mode set to: "); |
| 196 | + // Single shot mode will complete conversion and go into power down |
| 197 | + switch (lis3mdl.getOperationMode()) { |
| 198 | + case LIS3MDL_CONTINUOUSMODE: Serial.println("Continuous"); break; |
| 199 | + case LIS3MDL_SINGLEMODE: Serial.println("Single mode"); break; |
| 200 | + case LIS3MDL_POWERDOWNMODE: Serial.println("Power-down"); break; |
| 201 | + } |
| 202 | + |
| 203 | + lis3mdl.setIntThreshold(500); |
| 204 | + lis3mdl.configInterrupt(false, false, true, // enable z axis |
| 205 | + true, // polarity |
| 206 | + false, // don't latch |
| 207 | + true); // enabled! |
| 208 | + |
| 209 | +} |
| 210 | + |
| 211 | +void loop() { |
| 212 | + |
| 213 | + sensors_event_t accel, gyro, mag, temp; |
| 214 | + |
| 215 | + // /* Get new normalized sensor events */ |
| 216 | + lsm6ds.getEvent(&accel, &gyro, &temp); |
| 217 | + lis3mdl.getEvent(&mag); |
| 218 | + |
| 219 | + /* Display the results (acceleration is measured in m/s^2) */ |
| 220 | + Serial.print("\t\tAccel X: "); |
| 221 | + Serial.print(accel.acceleration.x, 4); |
| 222 | + Serial.print(" \tY: "); |
| 223 | + Serial.print(accel.acceleration.y, 4); |
| 224 | + Serial.print(" \tZ: "); |
| 225 | + Serial.print(accel.acceleration.z, 4); |
| 226 | + Serial.println(" \tm/s^2 "); |
| 227 | + |
| 228 | + /* Display the results (rotation is measured in rad/s) */ |
| 229 | + Serial.print("\t\tGyro X: "); |
| 230 | + Serial.print(gyro.gyro.x, 4); |
| 231 | + Serial.print(" \tY: "); |
| 232 | + Serial.print(gyro.gyro.y, 4); |
| 233 | + Serial.print(" \tZ: "); |
| 234 | + Serial.print(gyro.gyro.z, 4); |
| 235 | + Serial.println(" \tradians/s "); |
| 236 | + |
| 237 | + /* Display the results (magnetic field is measured in uTesla) */ |
| 238 | + Serial.print(" \t\tMag X: "); |
| 239 | + Serial.print(mag.magnetic.x, 4); |
| 240 | + Serial.print(" \tY: "); |
| 241 | + Serial.print(mag.magnetic.y, 4); |
| 242 | + Serial.print(" \tZ: "); |
| 243 | + Serial.print(mag.magnetic.z, 4); |
| 244 | + Serial.println(" \tuTesla "); |
| 245 | + |
| 246 | + Serial.print("\t\tTemp :\t\t\t\t\t"); |
| 247 | + Serial.print(temp.temperature); |
| 248 | + Serial.println(" \tdeg C"); |
| 249 | + Serial.println(); |
| 250 | + delay(1000); |
| 251 | + |
| 252 | +} |
0 commit comments