現在、クアッドコプター コントローラーの再作成に取り組んでいます。
私はジャイロセンサーからデータを取得することに取り組んでおり、そのために中断のある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;
}