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