Обнаружение свободного падения на инерционном модуле LSM6DSL — MXCHIP IoT DevKit AZ3166

Я пытаюсь обнаружить события свободного падения с моим устройством IoT AZ3166.

Я не могу вызвать прерывание, и getEventStatus всегда возвращает freeFallEvent как 0.

На ЖК-дисплее я получаю «status: stats», так как getEventStatus возвращает 0, если успешно, и «num: 0», поскольку событие свободного падения не обнаружено.

При срабатывании прерывания на ЖК-дисплее должно появиться сообщение «mem».

Не знаю, где я иду не так, и нет примера для этой функции, доступной для этой конкретной доски.

  static DevI2C *ext_i2c;
static LSM6DSLSensor *acc_gyro;

char mystatus[20];
int mevent = 0;
LSM6DSL_Event_Status_t evstats;

void setup(){
ext_i2c = new DevI2C(D14, D15);
acc_gyro = new LSM6DSLSensor(*ext_i2c, D4, D5);
acc_gyro->init(NULL);

/* Attach callback to LSM6DSL INT1 */
acc_gyro->attachInt1Irq(&memsevent);
acc_gyro->enableAccelerator();
acc_gyro->enableGyroscope();
acc_gyro->enableFreeFallDetection(LSM6DSL_INT1_PIN);
acc_gyro->setFreeFallThreshold(0);
}

void memsevent() {
mevent = 1;
}

void freeFall(){
int n=sizeof(colors)/sizeof(colors[0]);
uint8_t *color=colors[(colorindex++)%n];
rgbLed.setColor(color[0],color[1],color[2]);
}

void showSensors(){
if(!acc_gyro->getEventStatus(&evstats)){
strcpy(mystatus,"got stats");
if(evstats.FreeFallStatus){
strcpy(mystatus, "in freefall");
freeFall();
}
}

if(mevent){
strcpy(mystatus, "mem");
}

char buff[50]; // screen print stuff
sprintf(buff, "status:%s \r\n num:%i",,mystatus,evstats.FreeFallStatus);
Screen.print(buff);
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]