Обнаружение свободного падения на инерционном модуле 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 ответов

Другие вопросы по тегам