Suchakhree Srisukprom
/
Test_Megre
k
GetAcceloroY.cpp
- Committer:
- Suchakhree
- Date:
- 2015-12-09
- Revision:
- 1:426fbd0d126a
File content as of revision 1:426fbd0d126a:
/* //int main() t.start(); //___ Set up I2C: use fast (400 kHz) I2C ___ i2c.frequency(400000); // Read the WHO_AM_I register, this is a good test of communication whoami = mpu9250.readByte(MPU9250_ADDRESS, WHO_AM_I_MPU9250); pc.printf("I AM 0x%x\n\r", whoami); pc.printf("I SHOULD BE 0x71\n\r"); if (I2Cstate != 0) // error on I2C pc.printf("I2C failure while reading WHO_AM_I register"); if (whoami == 0x71) // WHO_AM_I should always be 0x71 { pc.printf("MPU9250 is online...\n\r"); sprintf(buffer, "0x%x", whoami); wait(1); mpu9250.resetMPU9250(); // Reset registers to default in preparation for device calibration mpu9250.MPU9250SelfTest(SelfTest); // Start by performing self test and reporting values (accelerometer and gyroscope self test) mpu9250.calibrateMPU9250(gyroBias, accelBias); // Calibrate gyro and accelerometer, load biases in bias registers wait(2); //Initialize device for active mode read of acclerometer, gyroscope, and temperature mpu9250.initMPU9250(); pc.printf("MPU9250 initialized for active data mode....\n\r"); //Initialize device for active mode read of magnetometer, 16 bit resolution, 100Hz. mpu9250.initAK8963(magCalibration); wait(1); } else // Connection failure { pc.printf("Could not connect to MPU9250: \n\r"); pc.printf("%#x \n", whoami); sprintf(buffer, "WHO_AM_I 0x%x", whoami); //while(1) ; // Loop forever if communication doesn't happen } mpu9250.getAres(); // Get accelerometer sensitivity mpu9250.getGres(); // Get gyro sensitivity mpu9250.getMres(); // Get magnetometer sensitivity magbias[0] = +470.; // User environmental x-axis correction in milliGauss, should be automatically calculated magbias[1] = +120.; // User environmental x-axis correction in milliGauss magbias[2] = +125.; // User environmental x-axis correction in milliGauss Ay[0]=GetAcceloroY(); pc.printf("1: %d\n",Ay[0]); Ay[1]=GetAcceloroY(); pc.printf("2: %d\n",Ay[1]); if( Ay[1]+Ay[0]< -20 ) pc.printf("#BR$\n\n\n"); //Function 4 GetAcceloroY int GetAcceloroY() { // If intPin goes high, all data registers have new data if(mpu9250.readByte(MPU9250_ADDRESS, INT_STATUS) & 0x01) { // On interrupt, check if data ready interrupt mpu9250.readAccelData(accelCount); // Read the x/y/z adc values // Now we'll calculate the accleration value into actual g's if (I2Cstate != 0) //error on I2C pc.printf("I2C error ocurred while reading accelerometer data. I2Cstate = %d \n\r", I2Cstate); else{ // I2C read or write ok I2Cstate = 1; ax = (float)accelCount[0]*aRes - accelBias[0]; // get actual g value, this depends on scale being set ay = (float)accelCount[1]*aRes - accelBias[1]; az = (float)accelCount[2]*aRes - accelBias[2]; } mpu9250.readGyroData(gyroCount); // Read the x/y/z adc values // Calculate the gyro value into actual degrees per second if (I2Cstate != 0) //error on I2C pc.printf("I2C error ocurred while reading gyrometer data. I2Cstate = %d \n\r", I2Cstate); else{ // I2C read or write ok I2Cstate = 1; gx = (float)gyroCount[0]*gRes - gyroBias[0]; // get actual gyro value, this depends on scale being set gy = (float)gyroCount[1]*gRes - gyroBias[1]; gz = (float)gyroCount[2]*gRes - gyroBias[2]; } mpu9250.readMagData(magCount); // Read the x/y/z adc values // Calculate the magnetometer values in milliGauss // Include factory calibration per data sheet and user environmental corrections if (I2Cstate != 0) //error on I2C pc.printf("I2C error ocurred while reading magnetometer data. I2Cstate = %d \n\r", I2Cstate); else{ // I2C read or write ok I2Cstate = 1; mx = (float)magCount[0]*mRes*magCalibration[0] - magbias[0]; // get actual magnetometer value, this depends on scale being set my = (float)magCount[1]*mRes*magCalibration[1] - magbias[1]; mz = (float)magCount[2]*mRes*magCalibration[2] - magbias[2]; } mpu9250.getCompassOrientation(orientation); } Now = t.read_us(); deltat = (float)((Now - lastUpdate)/1000000.0f) ; // set integration time by time elapsed since last filter update lastUpdate = Now; sum += deltat; sumCount++; // Pass gyro rate as rad/s // mpu9250.MadgwickQuaternionUpdate(ax, ay, az, gx*PI/180.0f, gy*PI/180.0f, gz*PI/180.0f, my, mx, mz); mpu9250.MahonyQuaternionUpdate(ax, ay, az, gx*PI/180.0f, gy*PI/180.0f, gz*PI/180.0f, my, mx, mz); // Serial print and/or display at 1.5 s rate independent of data rates delt_t = t.read_ms() - count; if (delt_t > 500) { // update LCD once per half-second independent of read rate mpu9250.MadgwickQuaternionUpdate(ax,ay,az,gx,gy,gz,mx,my,mz); pc.printf(" ay = %.2f\n", 1000*ay); tempCount = mpu9250.readTempData(); // Read the adc values if (I2Cstate != 0) //error on I2C pc.printf("I2C error ocurred while reading sensor temp. I2Cstate = %d \n\r", I2Cstate); else{ // I2C read or write ok I2Cstate = 1; temperature = ((float) tempCount) / 333.87f + 21.0f; // Temperature in degrees Centigrade //pc.printf(" temperature = %f C\n\r", temperature); } count = t.read_ms(); if(count > 1<<21) { t.start(); // start the timer over again if ~30 minutes has passed count = 0; deltat= 0; lastUpdate = t.read_us(); } sum = 0; sumCount = 0; } return ay*1000; }*/