0

現在、クアッドコプター コントローラーの再作成に取り組んでいます。

私はジャイロセンサーからデータを取得することに取り組んでおり、そのために中断のあるISRを使用しています。

私の問題は、メイン プログラムで関数「gyro.getX」を呼び出すと、機能することです。しかし、ISR からこの関数を呼び出すと、機能しません。私が使用している機能は、「Adafruit_LSM9DS0」ライブラリ (ST から) によって提供され、「タイムスタンプ」を使用していました。ISR からの現在の時刻は、メイン プログラムからの現在の時刻とは異なると思いますが、それを修正する方法がわかりません。

ここに私のプログラムのショートカットがあります:

void loop(){
/*main prog*/
}

/*
*Reserve interrupt routine service (ISR) by Arduino
*/
ISR(TIMER2_OVF_vect)
{
    TCNT2 = 256 - 250; // 250 x 16 µS = 4 ms
    if (varCompteur++ > 25)// 25 * 4 ms = 100 ms (half-period)
    {
        varCompteur = 0;

        SensorGet(pX, pY);//Feed gyro circular buffers
    }
}

void SensorGet(float * pRollX, float * pPitchY)
{   
    lsm.getEvent(&accel, &mag, &gyro, &temp);

    GiroX_Feed(pX, gyro.gyro.x);
    GiroY_Feed(pPitchY, gyro.gyro.y);
}



bool Adafruit_LSM9DS0::getEvent(sensors_event_t *accelEvent,
                                sensors_event_t *magEvent,
                                sensors_event_t *gyroEvent,
                                sensors_event_t *tempEvent)
{
  /* Grab new sensor reading and timestamp. */
  read();
  uint32_t timestamp = millis();

  /* Update appropriate sensor events. */
  if (accelEvent) getAccelEvent(accelEvent, timestamp);
  if (magEvent)   getMagEvent(magEvent, timestamp);
  if (gyroEvent)  getGyroEvent(gyroEvent, timestamp);
  if (tempEvent)  getTempEvent(tempEvent, timestamp);

  return true;
}
4

1 に答える 1