Я пытаюсь обнаружить события свободного падения с моим устройством 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);
}
Задача ещё не решена.
Других решений пока нет …