[DEBUTANT] Fonctionnement pin INT gyroscope MPU-6050 ?

Bonjours, j’ai créer un système contenant: un gyroscope mpu-6050, un arduino nano, un recepteur infra-rouge et un lecteur de carte sd.
Dans ce système quand j’appuie sur n’importe quelles touches de la télécommande infra-rouge je stocke les données du mpu6050 dans la carte que je lis après sur mon ordi.
J’aimerai utiliser la pin INT du mpu-6050 pour rendre mon programme plus fluide car d’après ce que j’ai compris le mpu-6050 peut stocker un peut de données et les renvoyer à l’arduino une fois que sa mémoire est pleine. Je ne comprend pas comment utiliser celle-ci quelqu’un pourrait m’aiguiller svp?

Je vous laisse mon code pour mieux me comprendre

/////////////////////////////BIBLIOTHEQUES///////////////////////////////////////

#include<Wire.h>      //inserssion des bibliotheque wire qui permet de communiquer avec les composants utilisant le protocole I2C / TWI (communication série sur 2 fils). 
#include <SPI.h>      //Cette librairie vous permet de communiquer avec des périphériques SPI, avec la carte Arduino en tant que composant "maître". 
#include <SD.h> // permet de communiquer avec les peripheriques de sotckage carte sd
#include <IRremote.h>   //inclu la bibliotheque pour la télécomande infrarouge

/////////////////////////////DEFINITION DES VARIABLES et CONSTANTES/////////////////////////

const int MPU_addr=0x68;  // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;      //enregistre les axes 
const int D6 = 6;   //pin de la LED
int RECV_PIN = 9;   //pin pour infrarouge
int fin = 1000;   //fin apres 1000 tours de boucle
int stockageAcX = 0;    //variable pour stocker Axe X
int stockageAcY = 0;
int stockageAcZ = 0;
int tourDeBoucle = 0;
File myFile; //myFile correspond au dossier ou on ecris 
IRrecv irrecv(RECV_PIN);
decode_results results;


///////////////////////////SETUP DU PROGRAMME///////////////////////////////

void setup(){
  irrecv.enableIRIn(); // start le capteur
  pinMode(D6, INPUT);
  Serial.begin(9600);
  
  while (!Serial) {
    ; // n attente de la connexion au port 
  }
  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }

  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  /*Wire.beginTransmission(MPU_addr);
  Wire.write(0x1B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);*/
  Serial.begin(9600);
}

///////////////////////////BOUCLE INFINIE/////////////////////////////

void loop(){

    if(irrecv.decode(&results)){ //si la telecomande est reconnue
      programme();    //on appel la fonction programme()
      Serial.print("fin du if");
      irrecv.resume();    //fin de la session
    }
  
}

///////////////////////////FONCTION/////////////////////////////


void programme() {
  myFile = SD.open("test3.csv", FILE_WRITE);  
  while ( fin != 0){
   digitalWrite(D6, HIGH);
   if (tourDeBoucle == 9 && myFile) {     //au 10 eme tour de boucle je vais enregistrer les valeures de X Y Z
    myFile.print(stockageAcX) + myFile.print(";");
    myFile.print(stockageAcY) + myFile.print(";");
    myFile.print(stockageAcZ) + myFile.println(";");  
  }
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true);  // request a total of 14 registers
  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     //recupere les valeures 
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  stockageAcX = stockageAcX + AcX;
  stockageAcY = stockageAcY + AcY;
  stockageAcZ = stockageAcZ + AcZ;
  
  delay(10);      //le delais en ms
  fin --;   //on retire 1 a la variable fin
  tourDeBoucle ++;
  
  if (tourDeBoucle == 10) {
    tourDeBoucle = 0;
    stockageAcX = 0;
    stockageAcY = 0;
    stockageAcZ = 0;      
  }
  }  
  digitalWrite(D6,LOW);   //led off
  myFile.close();   //fermeture du fichier ou l'on enregistre 
  fin = 1000;     //on remet fin a 1000 pour que lors de la prochaine pression sur le bouton le programme puisse se derouler
}

Il y a ici un exemple d’utilisation de l’interruption avec le MPU6050. Je ne sais pas si c’est la bibliothèque que tu utilises, ni si c’est un exemple qui va dans le sens que tu cherches, mais tu peux étudier la mise en oeuvre de l’interruption.

Attention au choix de la pin pour l’interruption, qui peut dépendre du matériel utilisé (type d’Arduino). En général c’est la D2.

J’ai vu un petit problème sur ton code, tu déclares la LED sur la pin 3 en INPUT, au lieu de OUTPUT.

Merci beaucoup de ta réponse, je suis justement actuellement en train de lire cet exemple mais j'ai un peut de mal a interpréter caques lignes mais merci ça m'aide déjà beaucoup.
Merci pour la LED j'avais pas fait attention.

Oui, il est assez hard, mais ton projet n'est pas simple non plus :slight_smile: