Décaler des valeurs d'angles

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 !

if ( angle > 180 )
  angle -= 360;
1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.