Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème lecture QMC5883L

    7 septembre 2024 à 20:20:12

    Bonjour,

    J'ai programmé en c sur un RP zéro un programme pour lire les données d'un QMC5883L. Le programme semble fonctionner, mais les valeurs renvoyées tournent toujours autour des mêmes valeurs pour chaque axes. Qui pour m'aider?

    Voici le programme :

    #include <stdint.h>
    
    #include <stdio.h>
    
    #include <wiringPi.h>
    
    #include <wiringPiI2C.h>
    
    // Initialisation du capteur QMC5883L
    
    void QMC5883L_Init(int fd) {
    
        // Configuration du capteur
    
        if (wiringPiI2CWriteReg8(fd, 0x0A, 0x10) == -1) {
    
            printf("Erreur lors de l'écriture dans le registre de configuration (0x0A)\n");
    
        }
    
        if (wiringPiI2CWriteReg8(fd, 0x09, 0x1D) == -1) {
    
            printf("Erreur lors de l'écriture dans le registre de configuration (0x09)\n");
    
        }
    
    }
    
    // Lire les données brutes d'un axe
    
    int16_t QMC5883L_ReadRawAxis(int fd, int lsb_reg, int msb_reg) {
    
        int16_t lsb = wiringPiI2CReadReg8(fd, lsb_reg);
    
        int16_t msb = wiringPiI2CReadReg8(fd, msb_reg);
    
        if (msb == -1 || lsb == -1) {
    
            printf("Erreur lors de la lecture des registres de l'axe (LSB: %d, MSB: %d)\n", lsb, msb);
    
            return -1;
    
        }
    
        return (msb << 8) | lsb;
    
    }
    
    int main() {
    
        // Initialisation de WiringPi
    
        if (wiringPiSetup() == -1) {
    
            printf("Erreur d'initialisation de WiringPi\n");
    
            return -1;
    
        }
    
        // Configuration de l'I2C pour l'adresse 0x0D
    
        int fd = wiringPiI2CSetup(0x0D);
    
        if (fd == -1) {
    
            printf("Erreur d'initialisation de l'I2C pour l'adresse 0x%02X\n", 0x0D);
    
            return -1;
    
        }
    
        // Initialisation du capteur
    
        QMC5883L_Init(fd);
    
        while (1) {
    
            // Lire les axes X, Y, Z
    
            int16_t x_raw = QMC5883L_ReadRawAxis(fd, 0x00, 0x01);
    
            int16_t y_raw = QMC5883L_ReadRawAxis(fd, 0x02, 0x03);
    
            int16_t z_raw = QMC5883L_ReadRawAxis(fd, 0x04, 0x05);
    
            if (x_raw != -1 && y_raw != -1 && z_raw != -1) {
    
                // Afficher les valeurs brutes des axes X, Y et Z
    
                printf("Valeurs brutes - X: %d, Y: %d, Z: %d\n", x_raw, y_raw, z_raw);
    
            } else {
    
                printf("Erreur lors de la lecture des données\n");
    
            }
    
            delay(100); // Lecture toutes les 0,1 seconde
    
        }
    
        return 0;
    
    }




    -
    Edité par AntoinePaitier1 7 septembre 2024 à 20:33:00

    • Partager sur Facebook
    • Partager sur Twitter

    Problème lecture QMC5883L

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown