Switch setup angle mpu6050 et probleme stabilité

Bonjour, je souhaiterais mettre un bouton poussoir,(appuis 2 secondes) sur mpu 6050 , pour lui dire à tel angle, tu équivaut 0°.
j'ai un problème de lecture des angles, je travail sur Z uniquement, mais si les autres angle sont pas à 0 , le capteur est pas stable.
savez vous m'aider ? (je suis super novice, 50 ans)
merci beaucoup

#include "Wire.h"
#include <MPU6050_light.h>

MPU6050 mpu(Wire);
unsigned long timer = 0;
const int led1 = 2;
const int led2 = 3;
const int led3 = 4;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);

  byte status = mpu.begin();
  Serial.print(F("MPU6050 status: "));
  Serial.println(status);
  while (status != 0) {}  // stop everything if could not connect to MPU6050

  Serial.println(F("Calculating offsets, do not move MPU6050"));
  delay(500);
  // mpu.upsideDownMounting = true; // uncomment this line if the MPU6050 is mounted upside-down
  mpu.calcOffsets();  // gyro and accelero
  Serial.println("Done!\n");
}

void loop() {
  mpu.update();

  if ((millis()-timer)>10) {  // print data every 10ms
    int angleZ = mpu.getAngleX();
    if (angleZ < 1 && angleZ > -1) {
      digitalWrite(led1, 0);
      digitalWrite(led2, 1);
      digitalWrite(led3, 0);
    } else if (angleZ <= 1 && angleZ > -300) {
      digitalWrite(led1, 1);
      digitalWrite(led2, 0);
      digitalWrite(led3, 1);
    }else if (angleZ <= -1 && angleZ > 300) {
      digitalWrite(led1, 1);
      digitalWrite(led2, 0);
      digitalWrite(led3, 1);
}
    timer = millis();
  }
}

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

oups, désolé

Ces tests me paraissent bizarres.
Est-ce que ça ne devrait pas être?

} else if (angleZ <= -1 && angleZ > -300) {
.....
}else if (angleZ >= 1 && angleZ < 300) {

As-tu fait afficher les valeurs retournées par le MPU pour voir si la fourchette -1 à +1 était pertinente?


`mpu.getAngleX(); ` retourne un flottant pas un entier. Il vaudrait mieux travailler avec des flottants car tu perds les décimales et donc de la précision.
  • angleZ devrait être un float
  • les tests dans les if devraient se faire avec des valeurs float -300.0, -1.0, 1.0, 300.0

je te remercie de ta réponse, n'y connaissant pas grand chose, je reprogramme demain, et reviens vers le post, déja pour voir la diff entre flottant et entier,
merci beaucoup :slightly_smiling_face:

salut non ça fonctionne nickel, je regarde maintenant comment désactiver les autre axe et surtout le bouton poussoir, le maintenir 3 secondes pour lui dire par exemple que 10 degré equivaut au 0. cordialement

} else if (angleZ <= 1 && angleZ > -300) {
else if (angleZ <= -1 && angleZ > 300) {

Ça fonctionne peut-être mais les seuils se recoupent les uns les autres. Ça marche parce que ce sont des if ... else if ... mais ce n'est pas propre.
Tu fais ça

                            ________________________
test 3                     |                        |
         ________________________                   |
test 2  |                        |                  |
        |                        |                  |
test 1  |                   _____                   |
        |                  |     |                  |
      -300                -1     1                 300

Alors que tu devrais avoir quelque chose comme cela

                                  __________________
test 3                           |                  |
         __________________      |                  |
test 2  |                  |     |                  |
        |                  |     |                  |
test 1  |                  |_____|                  |
        |                  |     |                  |
      -300                -1     1                 300