Bonjour,
Je revient avec un code un peu différent pour mon système (voir post "Utilisation de la fonction map()").
Le voici :
#include "Wire.h"
#include "MPU6050.h"
#include "Servo.h"
Servo servo;
MPU6050 MPU1 (0x68);
MPU6050 MPU2 (0x69);
int16_t ax1, ay1, az1;
int16_t gx1, gy1, gz1;
int16_t ax2, ay2, az2;
int16_t gx2, gy2, gz2;
int x1, y1, z1;
int x2, y2, z2;
int valx1, valy1, valz1;
int valx2, valy2, valz2;
int preVal;
int maxi;
int mini;
int temps;
void setup()
{
Wire.begin();
Serial.begin(115200);
MPU1.initialize();
MPU2.initialize();
servo.attach(6);
maxi = 40;
mini = 2;
}
void loop()
{
MPU1.getMotion6(&ax1, &ay1, &az1, &gx1, &gy1, &gz1);
MPU2.getMotion6(&ax2, &ay2, &az2, &gx2, &gy2, &gz2);
valx1 = map(ax1, 265, 402, -90, 90);
valy1 = map(ay1, 265, 402, -90, 90);
valz1 = map(az1, 265, 402, -90, 90);
x1 = RAD_TO_DEG * (atan2 (-valy1, - valz1) + PI) ;
valx2 = map(ax2, 265, 402, -90, 90);
valy2 = map(ay2, 265, 402, -90, 90);
valz2 = map(az2, 265, 402, -90, 90);
x2 = RAD_TO_DEG * (atan2 (-valy2, - valz2) + PI);
if (x1 < maxi && (abs(preVal - x1) > mini)) {
servo.write(x1);
}
preVal = x1;
temps = millis();
Serial.print(temps);
Serial.print("/");
Serial.print(x1);
Serial.print("/");
Serial.println(x2);
delayMicroseconds(0);
}
J'ai désormais des angles calculés correctement. Le système ne fonctionne toujours pas correctement mais j'ai réussi a filtrer les valeurs absurdes que j'avait des fois, et aussi les petits tremblements qui ne correspondait pas à ceux envoyés.
Je veux récupérer les données des angles calculés par le mpu1 et le mpu2 pour tracer des courbes. L'angle du mpu1 est entre 0 et 40 (la valeur initiale est de 22 environ) donc c'est bon, mais la valeur initiale du mpu 2 est de environ 0 donc elle oscille entre 0 et 20 et 340 et 360 (ce qui n'est pas pratique pour tracer une courbe).
Est-ce que quelqu'un aurait une idée de comment décaler les valeurs pour quelles soient entre 0 et 40 ?
Merci d'avance !