80 int8_t sckpin, uint32_t frequency) {
106 }
else if (
_cs != -1) {
112 SPI_BITORDER_MSBFIRST,
118 SPI_BITORDER_MSBFIRST,
133 Adafruit_BusIO_Register _ctrl1 = Adafruit_BusIO_Register(
140 Adafruit_BusIO_Register _ctrl4 = Adafruit_BusIO_Register(
148 Adafruit_BusIO_Register _tmp_cfg = Adafruit_BusIO_Register(
150 _tmp_cfg.write(0x80);
160 Adafruit_BusIO_Register _chip_id = Adafruit_BusIO_Register(
163 return _chip_id.read();
170 Adafruit_BusIO_Register status_2 = Adafruit_BusIO_Register(
172 Adafruit_BusIO_RegisterBits zyx_data_available =
173 Adafruit_BusIO_RegisterBits(&status_2, 1, 3);
174 return zyx_data_available.read();
184 register_address |= 0x80;
186 register_address |= 0x40;
187 register_address |= 0x80;
190 Adafruit_BusIO_Register xl_data = Adafruit_BusIO_Register(
194 xl_data.read(buffer, 6);
197 x |= ((uint16_t)buffer[1]) << 8;
199 y |= ((uint16_t)buffer[3]) << 8;
201 z |= ((uint16_t)buffer[5]) << 8;
216 uint8_t lsb_value = 1;
226 float convert_from_LSB16 = 64000.0;
228 lsb_value = lsb_value / 4;
233 lsb_value = lsb_value * 4;
236 x_g = lsb_value * ((float)
x / convert_from_LSB16);
237 y_g = lsb_value * ((float)
y / convert_from_LSB16);
238 z_g = lsb_value * ((float)
z / convert_from_LSB16);
248 if ((
adc < 1) || (
adc > 3))
263 Adafruit_BusIO_Register adc_data =
266 adc_data.read(buffer, 2);
269 value |= ((uint16_t)buffer[1]) << 8;
291 uint8_t timelimit, uint8_t timelatency,
292 uint8_t timewindow) {
294 Adafruit_BusIO_Register ctrl3 = Adafruit_BusIO_Register(
296 Adafruit_BusIO_RegisterBits i1_click =
297 Adafruit_BusIO_RegisterBits(&ctrl3, 1, 7);
299 Adafruit_BusIO_Register click_cfg = Adafruit_BusIO_Register(
312 Adafruit_BusIO_Register ctrl5 = Adafruit_BusIO_Register(
315 Adafruit_BusIO_RegisterBits int1_latch_bit =
316 Adafruit_BusIO_RegisterBits(&ctrl5, 1, 3);
317 int1_latch_bit.write(
true);
320 click_cfg.write(0x15);
322 click_cfg.write(0x2A);
324 Adafruit_BusIO_Register click_ths = Adafruit_BusIO_Register(
326 click_ths.write(clickthresh);
328 Adafruit_BusIO_Register time_limit = Adafruit_BusIO_Register(
330 time_limit.write(timelimit);
332 Adafruit_BusIO_Register time_latency = Adafruit_BusIO_Register(
334 time_latency.write(timelatency);
336 Adafruit_BusIO_Register time_window = Adafruit_BusIO_Register(
338 time_window.write(timewindow);
346 Adafruit_BusIO_Register click_reg = Adafruit_BusIO_Register(
349 return click_reg.read();
368 Adafruit_BusIO_Register ctrl2 = Adafruit_BusIO_Register(
374 Adafruit_BusIO_Register ref = Adafruit_BusIO_Register(
380 Adafruit_BusIO_Register int1_cfg = Adafruit_BusIO_Register(
382 int1_cfg.write(0x2A);
385 Adafruit_BusIO_Register int1_ths = Adafruit_BusIO_Register(
387 int1_ths.write(ths & 0x7F);
389 Adafruit_BusIO_Register int1_dur = Adafruit_BusIO_Register(
391 int1_dur.write(dur & 0x7F);
394 Adafruit_BusIO_Register ctrl3 = Adafruit_BusIO_Register(
399 Adafruit_BusIO_Register ctrl5 = Adafruit_BusIO_Register(
409 Adafruit_BusIO_Register int_reg = Adafruit_BusIO_Register(
412 return int_reg.read();
424 Adafruit_BusIO_Register _ctrl3 = Adafruit_BusIO_Register(
426 Adafruit_BusIO_RegisterBits _drdy1_int_enable =
427 Adafruit_BusIO_RegisterBits(&_ctrl3, 1, 4);
428 Adafruit_BusIO_RegisterBits _drdy2_int_enable =
429 Adafruit_BusIO_RegisterBits(&_ctrl3, 1, 3);
432 return _drdy1_int_enable.write(enable_drdy);
433 }
else if (int_pin == 2) {
434 return _drdy2_int_enable.write(enable_drdy);
451 Adafruit_BusIO_Register _ctrl1 = Adafruit_BusIO_Register(
453 Adafruit_BusIO_RegisterBits ctrl1_mode_bits =
454 Adafruit_BusIO_RegisterBits(&_ctrl1, 1, 3);
456 Adafruit_BusIO_Register _ctrl4 = Adafruit_BusIO_Register(
458 Adafruit_BusIO_RegisterBits ctrl4_mode_bits =
459 Adafruit_BusIO_RegisterBits(&_ctrl4, 1, 3);
463 ctrl4_mode_bits.write(0);
464 ctrl1_mode_bits.write(1);
469 ctrl1_mode_bits.write(0);
470 ctrl4_mode_bits.write(0);
475 ctrl1_mode_bits.write(0);
476 ctrl4_mode_bits.write(1);
488 Adafruit_BusIO_Register _ctrl1 = Adafruit_BusIO_Register(
490 Adafruit_BusIO_RegisterBits ctrl1_mode_bits =
491 Adafruit_BusIO_RegisterBits(&_ctrl1, 1, 3);
493 Adafruit_BusIO_Register _ctrl4 = Adafruit_BusIO_Register(
495 Adafruit_BusIO_RegisterBits ctrl4_mode_bits =
496 Adafruit_BusIO_RegisterBits(&_ctrl4, 1, 3);
498 bool lp = ctrl1_mode_bits.read() == 1;
499 bool hr = ctrl4_mode_bits.read() == 1;
502 }
else if (lp && !hr) {
515 Adafruit_BusIO_Register _ctrl4 = Adafruit_BusIO_Register(
518 Adafruit_BusIO_RegisterBits range_bits =
519 Adafruit_BusIO_RegisterBits(&_ctrl4, 2, 4);
520 range_bits.write(range);
529 Adafruit_BusIO_Register _ctrl4 = Adafruit_BusIO_Register(
532 Adafruit_BusIO_RegisterBits range_bits =
533 Adafruit_BusIO_RegisterBits(&_ctrl4, 2, 4);
543 Adafruit_BusIO_Register _ctrl1 = Adafruit_BusIO_Register(
545 Adafruit_BusIO_RegisterBits data_rate_bits =
546 Adafruit_BusIO_RegisterBits(&_ctrl1, 4, 4);
548 data_rate_bits.write(dataRate);
556 Adafruit_BusIO_Register _ctrl1 = Adafruit_BusIO_Register(
558 Adafruit_BusIO_RegisterBits data_rate_bits =
559 Adafruit_BusIO_RegisterBits(&_ctrl1, 4, 4);
572 memset(event, 0,
sizeof(sensors_event_t));
574 event->version =
sizeof(sensors_event_t);
576 event->type = SENSOR_TYPE_ACCELEROMETER;
577 event->timestamp = 0;
581 event->acceleration.x =
x_g * SENSORS_GRAVITY_STANDARD;
582 event->acceleration.y =
y_g * SENSORS_GRAVITY_STANDARD;
583 event->acceleration.z =
z_g * SENSORS_GRAVITY_STANDARD;
595 memset(sensor, 0,
sizeof(sensor_t));
598 strncpy(sensor->name,
"LIS3DH",
sizeof(sensor->name) - 1);
599 sensor->name[
sizeof(sensor->name) - 1] = 0;
602 sensor->type = SENSOR_TYPE_ACCELEROMETER;
603 sensor->min_delay = 0;
604 sensor->max_value = 0;
605 sensor->min_value = 0;
606 sensor->resolution = 0;
This is a library for the Adafruit LIS3DH Accel breakout board.
#define LIS3DH_REG_INT1DUR
INT1_DURATION [0, D6, D5, D4, D3, D2, D1, D0].
lis3dh_range_t
A structure to represent scales.
#define LIS3DH_REG_WHOAMI
Device identification register.
#define LIS3DH_REG_CTRL3
CTRL_REG3 [I1_CLICK, I1_AOI1, I1_AOI2, I1_DRDY1, I1_DRDY2, I1_WTM, I1_OVERRUN, –] I1_CLICK CLICK inte...
#define LIS3DH_LSB16_TO_KILO_LSB12
Scalar to convert from 16-bit lsb to 12-bit and divide by 1k to convert from milli-gs to gs.
#define LIS3DH_REG_TEMPCFG
TEMP_CFG_REG Temperature configuration register.
#define LIS3DH_REG_OUT_X_L
X-axis acceleration data.
lis3dh_dataRate_t
Data rate selection Used with register 0x2A (LIS3DH_REG_CTRL_REG1) to set bandwidth.
#define LIS3DH_LSB16_TO_KILO_LSB8
Scalar to convert from 16-bit lsb to 8-bit and divide by 1k to convert from milli-gs to gs.
#define LIS3DH_REG_CLICKCFG
CLICK_CFG [–, –, ZD, ZS, YD, YS, XD, XS] ZD Enable interrupt double CLICK-CLICK on Z axis.
#define LIS3DH_REG_INT1THS
INT1_THS register [0, THS6, THS5, THS4, THS3, THS1, THS0].
#define LIS3DH_REG_CLICKTHS
CLICK_THS [-, Ths6, Ths5, Ths4, Ths3, Ths2, Ths1, Ths0] Ths6-Ths0 CLICK-CLICK threshold.
#define LIS3DH_REG_REFERENCE
REFERENCE/DATACAPTURE.
#define LIS3DH_REG_CLICKSRC
CLICK_SRC [-, IA, DCLICK, SCLICK, Sign, Z, Y, X] IA Interrupt active.
#define LIS3DH_REG_STATUS2
STATUS_REG [ZYXOR, ZOR, YOR, XOR, ZYXDA, ZDA, YDA, XDA] ZYXOR X, Y and Z axis data overrun.
#define LIS3DH_LSB16_TO_KILO_LSB10
Scalar to convert from 16-bit lsb to 10-bit and divide by 1k to convert from milli-gs to gs.
#define LIS3DH_REG_CTRL2
CTRL_REG2 [HPM1, HPM0, HPCF2, HPCF1, FDS, HPCLICK, HPIS2, HPIS1] HPM1-0 High pass filter mode selecti...
#define LIS3DH_REG_TIMELIMIT
TIME_LIMIT [-, TLI6, TLI5, TLI4, TLI3, TLI2, TLI1, TLI0] TLI7-TLI0 CLICK-CLICK Time Limit.
#define LIS3DH_REG_CTRL1
CTRL_REG1 [ODR3, ODR2, ODR1, ODR0, LPen, Zen, Yen, Xen] ODR3-0 Data rate selection.
#define LIS3DH_REG_TIMELATENCY
TIME_LATANCY [-, TLA6, TLIA5, TLA4, TLA3, TLA2, TLA1, TLA0] TLA7-TLA0 CLICK-CLICK Time Latency.
#define LIS3DH_REG_CTRL5
CTRL_REG5 [BOOT, FIFO_EN, –, –, LIR_INT1, D4D_INT1, 0, 0] BOOT Reboot memory content.
#define LIS3DH_REG_OUTADC1_L
1-axis acceleration data.
#define LIS3DH_REG_INT1SRC
INT1_SRC [0, IA, ZH, ZL, YH, YL, XH, XL] IA Interrupt active.
#define LIS3DH_REG_TIMEWINDOW
TIME_WINDOW [TW7, TW6, TW5, TW4, TW3, TW2, TW1, TW0] TW7-TW0 CLICK-CLICK Time window.
#define LIS3DH_REG_CTRL4
CTRL_REG4 [BDU, BLE, FS1, FS0, HR, ST1, ST0, SIM] BDU Block data update.
lis3dh_mode_t
Operational / performance modes.
@ LIS3DH_MODE_HIGH_RESOLUTION
#define LIS3DH_REG_INT1CFG
INT1_CFG [AOI, 6D, ZHIE/ZUPE, ZLIE/ZDOWNE, YHIE/YUPE, XHIE/XUPE, XLIE/XDOWNE] AOI And/Or combination ...
float z_g
z_g axis value (calculated by selected range)
lis3dh_mode_t getPerformanceMode(void)
Gets the performance mode for the LIS3DH.
bool begin(uint8_t addr=LIS3DH_DEFAULT_ADDRESS, uint8_t nWAI=0x33)
Setups the HW (reads coefficients values, etc.).
Adafruit_LIS3DH(TwoWire *Wi=&Wire)
Instantiates a new LIS3DH class in I2C.
lis3dh_dataRate_t getDataRate(void)
Gets the data rate for the LIS3DH (controls power consumption).
bool getEvent(sensors_event_t *event)
Gets the most recent sensor event.
void getSensor(sensor_t *sensor)
Gets the sensor_t data.
void setPerformanceMode(lis3dh_mode_t mode)
Sets the performance mode for the LIS3DH.
Adafruit_SPIDevice * spi_dev
Pointer to SPI bus interface.
void read(void)
Reads x y z values at once.
Adafruit_I2CDevice * i2c_dev
Pointer to I2C bus interface.
float x_g
x_g axis value (calculated by selected range)
lis3dh_range_t getRange(void)
Gets the g range for the accelerometer.
uint8_t readAndClearInterrupt(void)
Get uint8_t for INT1 source and clear interrupt.
void configureHighGInterrupt(uint8_t ths, uint8_t dur)
Configure INT1 for high-G threshold interrupt with high-pass filter.
uint8_t getDeviceID(void)
Get Device ID from LIS3DH_REG_WHOAMI.
int16_t readADC(uint8_t a)
Read the auxilary ADC.
void setRange(lis3dh_range_t range)
Sets the g range for the accelerometer.
bool haveNewData(void)
Check to see if new data available.
bool enableDRDY(bool enable_drdy=true, uint8_t int_pin=1)
Enable or disable the Data Ready interupt.
void setDataRate(lis3dh_dataRate_t dataRate)
Sets the data rate for the LIS3DH (controls power consumption).
void setClick(uint8_t c, uint8_t clickthresh, uint8_t timelimit=10, uint8_t timelatency=20, uint8_t timewindow=255)
Set INT to output for single or double click.
uint8_t getClick(void)
Get uint8_t for single or double click.
float y_g
y_g axis value (calculated by selected range)
static STAR_MCP3201 adc(MCP3201_CS_PIN, &mcp_spi)