Bonsoir,
Est-ce que quelqu'un sait ou a déjà utilisé les communications séries et I²C dans une classe ? Et pourrait me dire comment faire, malgré tous mes tests je n'aboutis à rien !
Impossible de faire marcher mon MPU6050 par I²C et impossible de voir d'où ça vient parce que je n'arrive pas à faire fonctionner les com série à l'intérieur de ma classe.
Merci d'avance,
Bonne nuit
Si ça peut servir le prog principal et la class incriminée:
#include <Wire.h>
#include <Servo.h>
#include "configuration.h"
#include "def.h"
#include <RADIOCOMMAND.h>
#include <QUADRICOPTER.h>
RADIOCOMMAND Radio(THROTTLE_PIN, YAW_PIN, PITCH_PIN, ROLL_PIN, MOT_LOCK_PIN);
QUADRICOPTER Quadri(MOT_A_PIN, MOT_B_PIN, MOT_C_PIN, MOT_D_PIN, PULSE_MOTOR_WIDTH_MIN, PULSE_MOTOR_WIDTH_MAX, BATT_PIN, LED_BATT_PIN);
void setup()
{
/*Serial.begin(9600);
Wire.begin();
while (!Serial);
Serial.println("TEST");*/
}
void loop()
{
// Petit Check batterie
if (Quadri.etatBatterie() == Q_BAT_HS)
Quadri.LED_etatBatterie(Q_BLINK);
// Condition de mise route
// if (Quadri.motorsRotate() == false) // si tous les moteurs sont arrêtés
// while (Radio.isRTF() == Q_NOT_READY_TO_FLY);// et que l'inter est actif : on attend
/***************************/
/* PHASE DE CONTROL DE VOL */
/***************************/
Quadri.setConsignesDeVol(/*quelque chose*/);
Quadri.CorrectionsDeVol(/* éventuellement quelques chose *unknown 4 the moment* */);
Serial.println("bah ouai ca marche =) ");
delay(1000);
}
#ifndef GYROSCOPE_H
#define GYROSCOPE_H
#include <Arduino.h>
#include <Wire.h>
//définition des adresses de registres
#define MPU6050_GYRO_XOUT_H 0x43 // R
#define MPU6050_GYRO_XOUT_L 0x44 // R
#define MPU6050_GYRO_YOUT_H 0x45 // R
#define MPU6050_GYRO_YOUT_L 0x46 // R
#define MPU6050_GYRO_ZOUT_H 0x47 // R
#define MPU6050_GYRO_ZOUT_L 0x48 // R
#define MPU6050_PWR_MGMT_1 0x6B // R/W
#define GYRO_CONFIG 0x1B // RW
#define MPU6050_I2C_ADDRESS 0x68
class GYROSCOPE
{
public:
GYROSCOPE(void); // only 4 motors
void Update(void);
void Initialisation(void);
void request_Xout(void);
void request_Yout(void);
void request_Zout(void);
private:
uint16_t Xout;
uint16_t Yout;
uint16_t Zout;
};
#endif //GYROSCOPE_H
// gyroscope.cpp
#include <Arduino.h>
#include <Wire.h>
#include "gyroscope.h"
GYROSCOPE::GYROSCOPE(void)
{
Serial.begin(9600);
Serial.println("azertyuio");
Wire.begin();
Initialisation();
}
void GYROSCOPE::Update(void)
{
request_Xout();
request_Yout();
request_Zout();
}
void GYROSCOPE::Initialisation(void)
{
//Wire.begin();
// COPIÉ COLLÉ DE MULTI WII
TWBR = ((16000000L / 400000L) - 16) / 2; // change the I2C clock rate to 400kHz
Serial.println("1");
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Serial.println("2");
Wire.write(MPU6050_PWR_MGMT_1);
Serial.println("3");
Wire.write(0x80);
Serial.println("4");
Wire.endTransmission(true);
Serial.println("5");
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Wire.write(MPU6050_PWR_MGMT_1);
Wire.write(0x03); //PWR_MGMT_1 -- SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL with Z Gyro reference)
Wire.endTransmission(false);
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Wire.write(GYRO_CONFIG);
Wire.write(0x18); //GYRO_CONFIG -- FS_SEL = 3: Full scale set to 2000 deg/sec
Wire.endTransmission(true);
}
void GYROSCOPE::request_Xout(void)
{
// Récupération des 8 bits de poids fort
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Wire.write(MPU6050_GYRO_XOUT_H);
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_I2C_ADDRESS, 1, false);
while(Wire.available() < 0);
Xout = Wire.read() << 8;
// Récupération des 8 bits de poids faible
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Wire.write(MPU6050_GYRO_XOUT_L);
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_I2C_ADDRESS, 1, true);
while(Wire.available() < 0);
Xout |= Wire.read();
}
void GYROSCOPE::request_Yout(void)
{
// Récupération des 8 bits de poids fort
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Wire.write(MPU6050_GYRO_YOUT_H);
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_I2C_ADDRESS, 1, false);
while(Wire.available() < 0);
Yout = Wire.read() << 8;
// Récupération des 8 bits de poids faible
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Wire.write(MPU6050_GYRO_YOUT_L);
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_I2C_ADDRESS, 1, true);
while(Wire.available() < 0);
Yout |= Wire.read();
}
void GYROSCOPE::request_Zout(void)
{
// Récupération des 8 bits de poids fort
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Wire.write(MPU6050_GYRO_ZOUT_H);
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_I2C_ADDRESS, 1, false);
while(Wire.available() < 0);
Zout = Wire.read() << 8;
// Récupération des 8 bits de poids faible
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
Wire.write(MPU6050_GYRO_ZOUT_L);
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_I2C_ADDRESS, 1, true);
while(Wire.available() < 0);
Zout |= Wire.read();
}