il y a une autre erreur :
accelx = float(ax)*cos(angles[0]))9.81/16384;
// à remplacer par :
accelx = float(ax)*cos(angles[0])*9.81/16384;
Comme le suggère lesept, passer par un pointeur en paramètre permet de se passer de variable static ou globale.
void integrationAngles(float *angles)
{
// Ici, on va mesurer les angles des axes x,y,z de l'accéléromètre avec l'axe vertical.
// Pour cela, on intègre les vitesses angulaires délivrées par le gyroscope.
// Les angles renvoyés sont en rad.
accel.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
alpha = alpha + (float(gx)*dt/131)*2*PI/360;
beta = beta + (float(gy)*dt/131)*2*PI/360;
gamma = gamma + (float(gy)*dt/131)*2*PI/360;
angles[0] = alpha;
angles[1] = beta;
angles[2] = gamma;
}
Dans ce cas, integrationAngles() ne retourne rien.
ensuite :
float acceleration(){
float angles[3];
// Renvoie l'accélération à un instant t
accel.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
integrationAngles(angles);
accelx = float(ax)*cos(angles[0])*9.81/16384;
accely = float(ay)*cos(angles[1])*9.81/16384;
accelz = float(az)*cos(angles[2])*9.81/16384;
accelVerticale = sqrt(pow(accelx,2) + pow(accely,2) + pow(accelz,2));
return(accelVerticale);
}