Bonjour à tous,
Je suis en train de faire un programme simple pour récupérer une accélération verticale à partir d'un accéléromètre/gyroscope (MPU6050).
Pour cela je calcule les angles de rotation puis je calcule l'accélération voulue.
Problème : une fonction renvoie un tableau contenant plusieurs variables que j'appelle tour à tour dans une autre fonction (voir le script).
Une erreur de typage est renvoyée : " cannot convert 'char (*)()' to 'double' for argument '1' to 'double cos(double)' ".
Je comprends pas à quoi elle correspond, ni comment la régler.
Merci d'avance pour votre aide !
PU6050 accel; // nom de l'accéléromètre
int16_t ax, ay, az, gx, gy, gz; // mesure brute des accélérations (sur 16bits)
int buzzer = 2; // Borne de sortie = borne 2
float alpha; // angle (x,g)
float beta; // angle (y,g)
float gamma; // angle (z,g)
bool booleen; // booléen !
float dt = 0.005; // intervalle de temps (en secondes) pour l'intégration
float accelx, accely, accelz; // accélérations calculées
float accelVerticale; // accélération verticale à t
// Initialisation :
void setup() {
Wire.begin(); // débute la communication I2C
pinMode(buzzer, OUTPUT); // le buzzer est la sortie du montage
Serial.begin(9600); // permet l'affichage des données lues
Serial.println("Initialisation I2C...");
accel.initialize(); // initialisation I2C
Serial.println("Test de la connexion du dispositif...");
Serial.println(accel.testConnection() ? "Echec de la connexion" : "Connexion réussie"); // test de la connexion à l'accéléromètre
// L'objectif est ici de tester si le variomètre est vertical, cela avec une erreur de 4%.
// On utilise pour cela la mesure de la gravité terrestre : si l'accélération suivant
// l'axe z est supérieure à 0.96*9,81, on peut initialiser l'angle gamma à 0, les deux
// autres à pi.
accel.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
while (abs(az) < 0.96*16384) {
booleen = false;
}
alpha, beta, gamma = PI, PI, 0;
}
char integrationAngles(){
// 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;
float angles[3];
angles[0] = alpha;
angles[1] = beta;
angles[2] = gamma;
return(angles);
}
float acceleration(){
// Renvoie l'accélération à un instant t
accel.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
accelx = float(ax)*cos(integrationAngles[0]))9.81/16384;
accely = float(ay)*cos(integrationAngles[1])*9.81/16384;
accelz = float(az)*cos(integrationAngles[2])*9.81/16384;
accelVerticale = sqrt(pow(accelx,2) + pow(accely,2) + pow(accelz,2));
return(accelVerticale);
}