Ritardo di misurazione Modulo GY-80

Buonasera, sono alle prese con la piattaforma IMU Gy-80, che devo utilizzare per un controllo PID.
leggendo in Internet sono riuscito a capire come sfruttare al meglio questo tipo di piattaforme, combinando i dati di giroscopio e accelerometro insieme tramite un apposito filtro. fatto quindi il programma, lancio e noto una cosa davvero strana: l'angolo di roll letto perfettamente e puntualmente, angolo di pitch letto si perfettamente, ma con un ritardo di anche qualche secondo, a volte addirittura decine di secondi. vi allego il codice che ovviamente è uguale sia per la lettura del roll che del pitch.

PS ho gia provato a cambiare i parametri del filtro ma niente, non c'è niente da fare, è super in ritardo!!

grazie in anticipo a chiunque mi risponderà, sto impazzendo :confused:

/* Converting the raw data of the X-Axis into X-Axis Acceleration
     - The output data is Two's complement 
     - X0 as the least significant byte
     - X1 as the most significant byte
   THE SAME FOR Y AND Z AXIS */ 
   
#include <Wire.h>
#define gyro 0x69
#define accelerometer 0x53 
#define GyroAddress_X0 0x28  
#define GyroAddress_X1 0x29
#define GyroAddress_Y0 0x2A
#define GyroAddress_Y1 0x2B
#define GyroAddress_Z0 0x2C  
#define GyroAddress_Z1 0x2D
#define AccAddress_X0 0x32 
#define AccAddress_X1 0x33
#define AccAddress_Y0 0x34 
#define AccAddress_Y1 0x35
#define AccAddress_Z0 0x36
#define AccAddress_Z1 0x37

int X0acc,X1acc,intXacc;
int Y0acc,Y1acc,intYacc;
int Z1acc,Z0acc,intZacc;
float Xacc,Yacc,Zacc;
double alphaAcc,betaAcc;

int X0gyro, X1gyro, intXgyro;
int Y0gyro, Y1gyro, intYgyro;
int Z0gyro, Z1gyro, intZgyro;
float Xgyro,Ygyro,Zgyro;
float alphaGyro,betaGyro,angleZ;

float alpha,beta;

unsigned long start, finished, elapsed;
float dt=0.015;

void setup()
{
  Wire.begin();                
  Serial.begin(9600);    
  delay(100);
  
  Wire.beginTransmission(accelerometer);
  Wire.write(0x2D);                       // Power_CTL Register to enable measurement
  Wire.write(8);                          // Bit D3 High for measuring enable (0000 1000)
  Wire.endTransmission();
  
  Wire.beginTransmission(gyro);
  Wire.write(0x20);                       // CTRL_REG1 to enable measurement
  Wire.write(15);                         // Normal mode (00001111)  
  Wire.endTransmission();
  
  Wire.beginTransmission(gyro);
  Wire.write(0x23);                       // CTRL_REG4 to select Sensitivity, Scale Selection
  Wire.write(48);                         // 2000dps (00110000)
  Wire.endTransmission();
}
void loop()
{
  start=millis();
  Wire.beginTransmission(accelerometer); 
  Wire.write(AccAddress_X0);
  Wire.write(AccAddress_X1);  
  Wire.endTransmission(); 
  Wire.requestFrom(accelerometer,2);   
  if(Wire.available()<=2) {  
    X0acc = Wire.read(); 
    X1acc = Wire.read();
    X1acc=X1acc<<8;
    intXacc =X0acc+X1acc;
    Xacc=intXacc/256.0; 
  }
 
  Wire.beginTransmission(accelerometer); 
  Wire.write(AccAddress_Y0);
  Wire.write(AccAddress_Y1);  
  Wire.endTransmission(); 
  Wire.requestFrom(accelerometer,2);
  if(Wire.available()<=2) { 
    Y0acc = Wire.read();
    Y1acc = Wire.read();
    Y1acc=Y1acc<<8;
    intYacc=Y0acc+Y1acc;
    Yacc=intYacc/256.0;
  }

  Wire.beginTransmission(accelerometer); 
  Wire.write(AccAddress_Z0);
  Wire.write(AccAddress_Z1);  
  Wire.endTransmission(); 
  Wire.requestFrom(accelerometer,2);
  if(Wire.available()<=2) { 
    Z0acc = Wire.read();
    Z1acc = Wire.read();
    Z1acc=Z1acc<<8;
    intZacc =Z0acc+Z1acc;
    Zacc=intZacc/256.0;
  }
  
  Wire.beginTransmission(gyro); 
  Wire.write(GyroAddress_X0);
  Wire.endTransmission();
  Wire.requestFrom(gyro,1); 
  if(Wire.available()<=1)   
  {
    X0gyro = Wire.read();
  }
  Wire.beginTransmission(gyro);
  Wire.write(GyroAddress_X1);
  Wire.endTransmission();
  Wire.requestFrom(gyro,1); 
  if(Wire.available()<=1)   
  {
    X1gyro = Wire.read();
  }
  
  Wire.beginTransmission(gyro); 
  Wire.write(GyroAddress_Y0);
  Wire.endTransmission();
  Wire.requestFrom(gyro,1); 
  if(Wire.available()<=1)   
  {
    Y0gyro = Wire.read();
  }
  Wire.beginTransmission(gyro); 
  Wire.write(GyroAddress_Y1);
  Wire.endTransmission();
  Wire.requestFrom(gyro,1); 
  if(Wire.available()<=1)   
  {
    Y1gyro = Wire.read();
  }
  
 
  Wire.beginTransmission(gyro); 
  Wire.write(GyroAddress_Z0);
  Wire.endTransmission();
  Wire.requestFrom(gyro,1); 
  if(Wire.available()<=1)   
  {
    Z0gyro = Wire.read();
  }
  Wire.beginTransmission(gyro);
  Wire.write(GyroAddress_Z1);
  Wire.endTransmission();
  Wire.requestFrom(gyro,1); 
  if(Wire.available()<=1)   
  {
    Z1gyro = Wire.read();
  }

  X1gyro=X1gyro<<8;
  intXgyro =X0gyro+X1gyro;
  Xgyro=intXgyro*0.07;                            // Angular rate,From the datasheet: 70 mdps/digit
  betaGyro = Xgyro*dt;
  

  Y1gyro=Y1gyro<<8;
  intYgyro =Y0gyro+Y1gyro;
  Ygyro=intYgyro*0.07; 
  alphaGyro = Ygyro*dt;
  
  Z1gyro=Z1gyro<<8;
  intZgyro =Z0gyro+Z1gyro;
  Zgyro=intZgyro*0.07; 
  angleZ = Zgyro*dt;

  betaAcc=(atan2(Yacc,Zacc))*(180/3.14);
  alphaAcc=(atan2(Xacc,Zacc))*(180/3.14);

  alpha=0.98*(alpha+alphaGyro)+0.02*alphaAcc;
  beta=0.83*(beta+betaGyro)+0.17*betaAcc;

  Serial.print("ALPHA= ");
  Serial.print(alpha);
  Serial.print("  BETA= ");
  Serial.println(beta);
  
  finished=millis();
  elapsed=finished-start;
  dt=elapsed/1000.0;
  start = elapsed = 0;
  
}

semplice, per postare il codice ti basta dall'ide di Arduino cliccare su Modifica e poi cliccare Copia per il forum

dopodichè nel tuo messaggio fai incolla e automaticamente il tuo sketch viene inserito nella maniera corretta.....
Ti consiglio di farlo subito, prima che passi Guglielmo :smiley:

>lucaacquati: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo