Hi,
thanks for your response! It works now!
Marta
1. Yes. I am using version before commit(a23022cc3208fe367d886c65df2f025e80203037).
2. Configuration sequence is:
3. I would.
4. I can do that, but every time I made a call of function bmi160_set_int_config with given parameters, BMI_OK result was returned every time.
5. I read that in datasheet and I am aware of that fact. But, sometimes no matter what you do with device, interrupt is never triggered.
Looking forward to your answer.
Any update on this topic?
Regards,
Josip
Hi! I'm having problems with the first part:
I'm using a gy-bmi160 like this https://es.banggood.com/GY-BMI160-Module-6DOF-6-Axis-Angular-Velocity-Gyroscope-Gravity-Acceleration...
I've tried to turn on a LED with the INT1 interrupt but I'm getting the 'Failure' message indicating the init went wrong. This is programmed into a ESP32 using SPI interface.
Here's my code:
#include "bmi160.h
void setup() {
int8_t rslt;
Serial.begin(19200);
pinMode(26,INPUT);
pinMode(25,OUTPUT);
struct bmi160_int_settg int_config;
struct bmi160_dev sensor;
//Init Modo SPI
sensor.id = 0;
sensor.interface = BMI160_SPI_INTF;
rslt = bmi160_init(&sensor);
if(rslt==BMI160_OK){
Serial.println("Success");
}else{
Serial.println("Failure");
}
delay(1000);
//Rango acc 2g, low power, 50HZ
sensor.accel_cfg.range = BMI160_ACCEL_RANGE_2G;
sensor.accel_cfg.odr = BMI160_ACCEL_ODR_50HZ;
sensor.accel_cfg.power = BMI160_ACCEL_PMU_LOW_POWER;
delay(5);
/* Interrupcion INT1 */
int_config.int_channel = BMI160_INT_CHANNEL_1;
int_config.int_type = BMI160_ACC_ANY_MOTION_INT;// Choosing Any motion interrupt
/* Select the interrupt channel/pin settings */
int_config.int_pin_settg.output_en = BMI160_ENABLE;// Enabling interrupt pins to act as output pin
int_config.int_pin_settg.output_mode = BMI160_DISABLE;// Choosing push-pull mode for interrupt pin
int_config.int_pin_settg.output_type = BMI160_DISABLE;// Choosing active low output
int_config.int_pin_settg.edge_ctrl = BMI160_ENABLE;// Choosing edge triggered output
int_config.int_pin_settg.input_en = BMI160_DISABLE;// Disabling interrupt pin to act as input
int_config.int_pin_settg.latch_dur = BMI160_LATCH_DUR_NONE;// non-latched output
/* Select the Any-motion interrupt parameters */
int_config.int_type_cfg.acc_any_motion_int.anymotion_en = BMI160_ENABLE;// 1- Enable the any-motion, 0- disable any-motion
int_config.int_type_cfg.acc_any_motion_int.anymotion_x = BMI160_ENABLE;// Enabling x-axis for any motion interrupt
int_config.int_type_cfg.acc_any_motion_int.anymotion_y = BMI160_ENABLE;// Enabling y-axis for any motion interrupt
int_config.int_type_cfg.acc_any_motion_int.anymotion_z = BMI160_ENABLE;// Enabling z-axis for any motion interrupt
int_config.int_type_cfg.acc_any_motion_int.anymotion_dur = 0;// any-motion duration
int_config.int_type_cfg.acc_any_motion_int.anymotion_thr = 2;// (2-g range) -> (slope_thr) * 3.91 mg, (4-g range) -> (slope_thr) * 7.81 mg, (8-g range) ->(slope_thr) * 15.63 mg, (16-g range) -> (slope_thr) * 31.25 mg
/* Set the Any-motion interrupt */
bmi160_set_int_config(&int_config, &sensor); /* sensor is an instance of the structure bmi160_dev */
}
void loop() {
Serial.println(digitalRead(26));
if(digitalRead(26)==1){
digitalWrite(25,HIGH);
Serial.println("Activated");
delay(500);
digitalWrite(25,LOW);
}
}