test hardware
Dependencies: mbed MPU6050 PulseWidthCounter PulseCounter
main.cpp
- Committer:
- ohlimi2
- Date:
- 2019-09-28
- Revision:
- 1:b1f5ab5f08a2
- Parent:
- 0:0232ed5c62b6
File content as of revision 1:b1f5ab5f08a2:
#include "mbed.h" #include "MPU6050.h" // declaration des entrées analogiques AnalogIn analog_value_PA4(PA_4); AnalogIn analog_value_PA5(PA_5); AnalogIn analog_value_PA6(PA_6); AnalogIn analog_value_PC0(PC_0); AnalogIn analog_value_PF3(PF_3); AnalogIn analog_value_PF4(PF_4); AnalogIn analog_value_PF9(PF_9); AnalogIn analog_value_PF10(PF_10); // declaration des sorties PWM PwmOut pwm_PE9(PE_9); PwmOut pwm_PF7(PF_7); PwmOut pwm_PF6(PF_6); PwmOut pwm_PC8(PC_8); PwmOut pwm_PD12(PD_12); // declaration des IO DigitalOut led(LED1); DigitalOut enable_esc(PG_0); InterruptIn odoInput(PF_8); #define ROUE_DISTANCE_TIC_2019 0.06 #define ROUE_DISTANCE_TIC_2018 0.08 float roueDistanceTic = ROUE_DISTANCE_TIC_2019; //A changer en ROUE_DISTANCE_TIC_2018 pour chassis 2018 float vitesseBiniou = 0.0; //En m/s float compteurDistance = 0.0; Timer odoTick;// temps.start()/stop()/sec: read()/ms: read_ms()/µs: read_us() void odoTickHandler() { unsigned odoMicroSec = 0; //Incremente compteur de distance compteurDistance++; //Calcule de la vitesse Biniou avec Odometre en fonction de horodatage du TIC odo precedent vitesseBiniou = roueDistanceTic / (odoTick.read_ms()*1000); odoTick.reset(); odoTick.start(); printf("ODO TICK!\n"); printf("vitesseBiniou: %f\n", vitesseBiniou); printf("compteurDistance: %u\n", compteurDistance); } // declaration d'une interruption sur le front de la pin d'odometre //InterruptRise my_interruptPin(PF_8); // interruption //void pressed() //{ // cntr_odometre++ ; //} // initialisation du MPU6050 Serial pc(USBTX, USBRX,115200); MPU6050 mpu; int16_t ax, ay, az; float ax_g,ay_g,az_g; int16_t gx, gy, gz; int main() { float meas_adc_PA4; float meas_adc_PA5; float meas_adc_PA6; float meas_adc_PC0; float meas_adc_PF3; float meas_adc_PF4; float meas_adc_PF9; float meas_adc_PF10; float meas_adc_PA4_V; float meas_adc_PA5_V; float meas_adc_PA6_V; float meas_adc_PC0_V; float meas_adc_PF3_V; float meas_adc_PF4_V; float meas_adc_PF9_V; float meas_adc_PF10_V; // configuration des PWMs pwm_PE9.period_ms(10); pwm_PF7.period_ms(10); pwm_PF6.period_ms(10); pwm_PC8.period_ms(10); pwm_PD12.period_ms(10); pwm_PE9.pulsewidth_us(1000); pwm_PF7.pulsewidth_us(1250); pwm_PF6.pulsewidth_us(1500); pwm_PC8.pulsewidth_us(1750); pwm_PD12.pulsewidth_us(2000); //MPU6050 pc.printf("MPU6050 test\n\n"); pc.printf("MPU6050 initialize \n"); mpu.initialize(); pc.printf("MPU6050 testConnection \n"); bool mpu6050TestResult = mpu.testConnection(); if(mpu6050TestResult) { pc.printf("MPU6050 test passed \n"); } else { pc.printf("MPU6050 test failed \n"); } // Assign functions to Odometre input odoInput.fall(&odoTickHandler); while(1) { // recuperer la valeur en float entre 0.0 et 1.0 meas_adc_PA4 = analog_value_PA4.read(); meas_adc_PA5 = analog_value_PA5.read(); meas_adc_PA6 = analog_value_PA6.read(); meas_adc_PC0 = analog_value_PC0.read(); meas_adc_PF3 = analog_value_PF3.read(); meas_adc_PF4 = analog_value_PF4.read(); meas_adc_PF9 = analog_value_PF9.read(); meas_adc_PF10 = analog_value_PF10.read(); // Multiplier par la tension de reference pour avoir la tension en volt meas_adc_PA4_V = meas_adc_PA4* 3300 ; meas_adc_PA5_V = meas_adc_PA5* 3300 ; meas_adc_PA6_V = meas_adc_PA6* 3300 ; meas_adc_PC0_V = meas_adc_PC0* 3300 ; meas_adc_PF3_V = meas_adc_PF3* 3300 ; meas_adc_PF4_V = meas_adc_PF4* 3300 ; meas_adc_PF9_V = meas_adc_PF9* 3300 ; meas_adc_PF10_V = meas_adc_PF10* 3300 ; mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //correction pour avoir une acceleration coef empirique ax_g = (float)ax /1658.0 ; ay_g = (float)ay /1658.0 ; az_g = (float)az /1658.0 ; // affiche les valeurs sur la com usb printf("\f"); printf("meas_adc_PA4_V = %.0f mV\n\r", meas_adc_PA4_V); printf("meas_adc_PA5_V = %.0f mV\n\r", meas_adc_PA5_V); printf("meas_adc_PA6_V = %.0f mV\n\r", meas_adc_PA6_V); printf("meas_adc_PC0_V = %.0f mV\n\r", meas_adc_PC0_V); printf("meas_adc_PF3_V = %.0f mV\n\r", meas_adc_PF3_V); printf("meas_adc_PF4_V = %.0f mV\n\r", meas_adc_PF4_V); printf("meas_adc_PF9_V = %.0f mV\n\r", meas_adc_PF9_V); printf("meas_adc_PF10_V = %.0f mV\n\r", meas_adc_PF10_V); //writing current accelerometer and gyro position printf("acc X =%.2f; acc Y =%.2f; acc Z=%.2f;\n\r",ax_g,ay_g,az_g); //pc.printf("acc X =%d; acc Y =%d; acc Z=%d; Gyr X =%d; Gyr Y =%d; Gyr Z =%d\n",ax,ay,az,gx,gy,gz); led = !led; enable_esc = !enable_esc ; wait(0.2); // delais } }