k

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Suchakhree
Date:
Wed Dec 09 10:19:11 2015 +0000
Parent:
0:238df339023b
Commit message:
????????????????? ????????

Changed in this revision

GetAcceloroY.cpp Show annotated file Show diff for this revision Revisions of this file
GetDistance2LED.cpp Show annotated file Show diff for this revision Revisions of this file
Getswitch2Send.cpp Show annotated file Show diff for this revision Revisions of this file
SendAcceloroY.cpp Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GetAcceloroY.cpp	Wed Dec 09 10:19:11 2015 +0000
@@ -0,0 +1,125 @@
+/*
+//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;
+}*/
\ No newline at end of file
--- a/GetDistance2LED.cpp	Mon Dec 07 12:20:46 2015 +0000
+++ b/GetDistance2LED.cpp	Wed Dec 09 10:19:11 2015 +0000
@@ -1,10 +1,10 @@
 
 //Function 4 getdistance2led
 
-/*DigitalOut pinled0(PC_3);  DigitalOut pinled1(PC_2);  DigitalOut pinled2(PH_1);
-DigitalOut pinled3(PH_0);  DigitalOut pinled4(PC_15); DigitalOut pinled5(PC_14);
-DigitalOut pinled6(PC_13); DigitalOut pinled7(PB_7);  DigitalOut pinled8(PA_15);
-DigitalOut pinled9(PA_14); DigitalOut pinbuzz(PA_13);
+/*DigitalOut pinled0(PC_8);  DigitalOut pinled1(PC_6);  DigitalOut pinled2(PC_5);
+DigitalOut pinled3(PA_12);  DigitalOut pinled4(PA_11); DigitalOut pinled5(PB_12);
+DigitalOut pinled6(PB_2); DigitalOut pinled7(PB_15);  DigitalOut pinled8(PB_14);
+DigitalOut pinled9(PB_13); DigitalOut pinbuzz(D3);
 
 void getdistance2led(char step)
 {
--- a/Getswitch2Send.cpp	Mon Dec 07 12:20:46 2015 +0000
+++ b/Getswitch2Send.cpp	Wed Dec 09 10:19:11 2015 +0000
@@ -1,10 +1,35 @@
-
-/*DigitalIn switch1(D5);
-DigitalIn switch2(D6);
-DigitalIn switch3(D7);
+/*
+//Setup
+InterruptIn switch1(D11);
+InterruptIn switch2(D10);
+InterruptIn switch3(D7);
+void switch1();
+void switch2();
+void switch3();
+int matrix_state=0;
 
-        if(switch1==1) pc.printf("#TR$");
-        if(switch2==1) pc.printf("#TL$");
-        if(switch3==1) pc.printf("#BR$"); 
-        else pc.printf("#MED$");
-        */
\ No newline at end of file
+      
+      // int main()
+      switch1.rise(&switch_1);
+      switch2.rise(&switch_2);
+      switch3.rise(&switch_3);
+      if(matrix_state == 0){mobile.printf("#MED$"); pc.printf("#MED$");}
+      else if(matrix_state == 1){mobile.printf("#TR$");  pc.printf("#TR$\n");}
+      else if(matrix_state == 2){mobile.printf("#TL$");  pc.printf("#TL$\n");}
+      else if(matrix_state == 3){mobile.printf("#BR$");  pc.printf("#BR$\n");}
+      if(switch1 == 0 && switch2 == 0 & switch3 == 0 ) matrix_state = 0;
+      
+//Function     
+void switch_1() 
+{ 
+    matrix_state=1; 
+}
+void switch_2() 
+{
+    matrix_state=2;
+}
+void switch_3() 
+{ 
+    matrix_state=3;
+}*/
+        
\ No newline at end of file
--- a/SendAcceloroY.cpp	Mon Dec 07 12:20:46 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-
-//Function 4 SenAcceloroY
-
-/*int SenAcceloroY()
-{
-         // 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);
-            }
-
-
-            myled= !myled;
-            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;
-}*/
\ No newline at end of file
--- a/TextLCD.lib	Mon Dec 07 12:20:46 2015 +0000
+++ b/TextLCD.lib	Wed Dec 09 10:19:11 2015 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/users/wim/code/TextLCD/#111ca62e8a59
+https://developer.mbed.org/teams/FRA221_2015/code/TextLCD/#daa61eaff9c6
--- a/main.cpp	Mon Dec 07 12:20:46 2015 +0000
+++ b/main.cpp	Wed Dec 09 10:19:11 2015 +0000
@@ -2,9 +2,7 @@
 #include "MPU9250.h"
 #include "TextLCD.h"
 
-int gyrol_Break();
-
-Serial pc(USBTX, USBRX); // Huyperterminal default config: 9600 bauds, 8-bit data, 1 stop bit, no parity
+Serial pc(USBTX, USBRX); // Huyperterminal default config: 9600 bauds
 Serial mobile(D8,D2);
 //mobile.baud(38400);
 
@@ -15,31 +13,34 @@
 I2C i2c_lcd(D14,D15); // SDA, SCL
 TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD20x4); // I2C bus, PCF8574 Slaveaddress, LCD Type
 
-char pack[8]={0};
+char pack[14]={0};
 
-int Ay=0;
+int Ay[2]={0};
 float sum=0;
 uint32_t sumCount = 0;
 char buffer[14];
 uint8_t dato_leido[2];
 uint8_t whoami;
-int SendAcceloroY();
+int GetAcceloroY();
 
-DigitalOut pinled0(PC_3);  DigitalOut pinled1(PC_2);  DigitalOut pinled2(PC_13);
-DigitalOut pinled3(PB_7);  DigitalOut pinled4(PA_15); DigitalOut pinled5(PA_13);
-DigitalOut pinled6(PC_12); DigitalOut pinled7(PC_10); DigitalOut pinled8(PB_4);
-DigitalOut pinled9(PB_10); DigitalOut pinbuzz(PA_8);
+DigitalOut pinled0(PC_8);  DigitalOut pinled1(PC_6);  DigitalOut pinled2(PC_5);
+DigitalOut pinled3(PA_12);  DigitalOut pinled4(PA_11); DigitalOut pinled5(PB_12);
+DigitalOut pinled6(PB_2); DigitalOut pinled7(PB_15);  DigitalOut pinled8(PB_14);
+DigitalOut pinled9(PB_13); DigitalOut pinbuzz(D3);
 void resetled();
 void getdistance2led(char step);
 
-DigitalIn switch1(D9);
-DigitalIn switch2(D10);
-DigitalIn switch3(D11);
-void switch_turn();
-int state = 0;
+InterruptIn switch1(D11);//TR
+InterruptIn switch2(D10);//TL
+InterruptIn switch3(D7);//BR
+void switch_1();
+void switch_2();
+void switch_3();
+int matrix_state=0;
 
 int main() {
-    
+  
+  
   //___ Set up I2C: use fast (400 kHz) I2C ___
   i2c.frequency(400000);  
   // Read the WHO_AM_I register, this is a good test of communication
@@ -57,10 +58,10 @@
         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
+        //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.
+        //Initialize device for active mode read of magnetometer, 16 bit resolution, 100Hz.
         mpu9250.initAK8963(magCalibration);
         wait(1);
    }
@@ -70,73 +71,90 @@
     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
+    //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
+    mpu9250.getAres(); 
     
     lcd.locate(0,0);
-    lcd.printf("FRA241 Software-Dev.");
+    lcd.printf("FRA221 DigitalElec.");
     lcd.locate(0,1);
     lcd.printf("Bike_Light");
     resetled();
+    t.start();
+    
 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////         
     while(1) 
-    {
-      if(switch1 == 1 || switch2 == 1 || switch3 == 1) mobile.printf("#");
-        if(switch1 == 1) {mobile.printf("#TR$"); lcd.locate(0,3); lcd.printf("TurnRight"); }
-        if(switch2 == 1) {mobile.printf("#TL$"); lcd.locate(0,3); lcd.printf("TurnLeft.");}
-        if(switch3 == 1) {mobile.printf("#BR$"); lcd.locate(0,3); lcd.printf("Break.");}
-        else {mobile.printf("#MD$"); lcd.locate(0,3); lcd.printf("None.   ");}    
-      
-      //switch_turn();
-      //Read data
-     /* if(mobile.readable())
+    {  
+    
+      if(t.read_ms()<=50)
       {
-            pack[0] = mobile.getc();
-            for(int i=0;i<8;i++)
-                pack[i] = mobile.getc();
-              
-              //Debug_Serial   
-              //for(int i=0;i<8;i++) 
-              //    pc.printf("%c",pack[i]); 
-              //pc.printf("\n"); 
-
-              lcd.locate(0,2); 
-              for(int i=0;i<8;i++) lcd.printf("%c",pack[i]); 
-              
-              if(pack[1] == '#')
-              {
-                
-                if(pack[2] == 'D' && pack[5] == 'S')
-                {
-                     getdistance2led(pack[4]);
-                     lcd.locate(0,2);  
-                     lcd.printf("SPEED : %c%c km/hr",pack[6],pack[7]);
-                     
-                     //switch1.rise(&switch_turn); 
-                     
-                     //for(int i; ((switch1 == 1 || switch2 == 1 || switch3 == 1 )&& state == 0);)  {mobile.printf("#"); break;}
-                     //for(;switch1 == 1 && state == 0;) {mobile.printf("#TR$"); lcd.locate(0,3); lcd.printf("TurnRight"); state=1; break;}
-                     //else if(switch2 == 1 && state == 0) {mobile.printf("#TL$"); lcd.locate(0,3); lcd.printf("TurnLeft."); state=1;}
-                     //else if(switch3 == 1 && state == 0) {mobile.printf("#BR$"); lcd.locate(0,3); lcd.printf("Break.   "); state=1;}
-                     //if((switch1 == 0 || switch2 == 0 || switch3 == 0 )&& state == 1){mobile.printf("#"); mobile.printf("#MD$"); lcd.locate(0,3); lcd.printf("Clear."); state=0;}
-    
-                }*/
-                
-              //}  
-            
-      }
-        
+          //Read data
+          /*if(mobile.readable())
+          {
+                //pack[0] = mobile.getc();
+                for(int i=0;i<13;i++)
+                    pack[i] = mobile.getc();
+                  
+                  //Debug_Serial   
+                  for(int i=0;i<12;i++) 
+                      pc.printf("%c",pack[i]); 
+                  pc.printf("\n"); 
+                  //lcd.locate(0,2); 
+                  //for(int i=0;i<14;i++) lcd.printf("%c",pack[i]); 
+                  
+                  if(pack[0] == '#')
+                  {
+                    
+                    if(pack[1] == 'D' && pack[4] == 'S' && pack[7] == 'K')
+                    {
+                         getdistance2led(pack[3]);
+                         lcd.locate(0,2);  
+                         lcd.printf("SPEED : %c%c km/hr",pack[5],pack[6]);
+                         lcd.locate(0,3);  
+                         lcd.printf("Distance: %c.%c%c km.",pack[8],pack[9],pack[10]);
+                         //pc.printf("read\n");
+                    }  
+                  }
+            }*/ 
+               
+          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]< -150 ) {matrix_state=3; pc.printf("#BR$\n\n\n"); }
+          switch1.rise(&switch_1);
+          switch2.rise(&switch_2);
+          switch3.rise(&switch_3);
+          if(matrix_state == 0){mobile.printf("#MED$"); pc.printf("#MED$");}
+          else if(matrix_state == 1){mobile.printf("#TR$");  pc.printf("#TR$\n");}
+          else if(matrix_state == 2){mobile.printf("#TL$");  pc.printf("#TL$\n");}
+          else if(matrix_state == 3){mobile.printf("#BR$");  pc.printf("#BR$\n");}
+          if(switch1 == 0 && switch2 == 0 && switch3 == 0) matrix_state = 0;
+          //if(switch1 == 0 && switch2 == 0 && switch3 == 0 && matrix_state == 0) {matrix_state = 1; mobile.printf("#MED$"); pc.printf("#MED$");}
+          t.reset();
+      }                 
     }
 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////    
 }
 
+void switch_1() 
+{ 
+    matrix_state=1; 
+    //matrix_state = 0;
+    //mobile.printf("#TR$");
+}
+void switch_2() 
+{
+    matrix_state=2;
+    //matrix_state = 0;
+    //mobile.printf("#TL$");
+}
+void switch_3() 
+{ 
+    matrix_state=3;
+    //matrix_state = 0;
+    //mobile.printf("#BR$");
+}
+
 void getdistance2led(char step)
 {
          resetled();
@@ -155,9 +173,9 @@
          else if(step == '6'){
             pinled0=1; pinled1=1; pinled2=1; pinled3=1; pinled4=1; pinled5=1; pinled6=1; pinled7=0; pinled8=0; pinled9=0;}
          else if(step == '7'){
-            pinled0=1; pinled1=1; pinled2=1; pinled3=1; pinled4=1; pinled5=1; pinled6=1; pinled7=1; pinled8=0; pinled9=0; pinbuzz=1;}
+            pinled0=1; pinled1=1; pinled2=1; pinled3=1; pinled4=1; pinled5=1; pinled6=1; pinled7=1; pinled8=0; pinled9=0;}
          else if(step == '8'){
-            pinled0=1; pinled1=1; pinled2=1; pinled3=1; pinled4=1; pinled5=1; pinled6=1; pinled7=1; pinled8=1; pinled9=0; pinbuzz=1;}
+            pinled0=1; pinled1=1; pinled2=1; pinled3=1; pinled4=1; pinled5=1; pinled6=1; pinled7=1; pinled8=1; pinled9=0;}
          else if(step == '9'){
             pinled0=1; pinled1=1; pinled2=1; pinled3=1; pinled4=1; pinled5=1; pinled6=1; pinled7=1; pinled8=1; pinled9=1; pinbuzz=1;}
          else { pinled0=0; pinled1=0; pinled2=0; pinled3=0; pinled4=0; pinled5=0; pinled6=0; pinled7=0; pinled8=0; pinled9=0; pinbuzz=0; }
@@ -169,96 +187,19 @@
          pinled5=0; pinled6=0; pinled7=0; pinled8=0; pinled9=0;
          pinbuzz=0;
 }
-
-
 //Function 4 SenAcceloroY
-void switch_turn()
-{
-        if(switch1 == 1 || switch2 == 1 || switch3 == 1) mobile.printf("#");
-        if(switch1 == 1) {mobile.printf("#TR$"); lcd.locate(0,3); lcd.printf("TurnRight"); }
-        if(switch2 == 1) {mobile.printf("#TL$"); lcd.locate(0,3); lcd.printf("TurnLeft.");}
-        if(switch3 == 1) {mobile.printf("#BR$"); lcd.locate(0,3); lcd.printf("Break.");}
-        else {mobile.printf("#MD$"); lcd.locate(0,3); lcd.printf("None.   ");}    
-}
-int SendAcceloroY()
+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);
-            }
-
-
-            myled= !myled;
-            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; 
-        }
+       
+        mpu9250.MahonyQuaternionUpdate(ax, ay, az, gx*PI/180.0f, gy*PI/180.0f, gz*PI/180.0f, my, mx, mz);
+        mpu9250.MadgwickQuaternionUpdate(ax,ay,az,gx,gy,gz,mx,my,mz);  
+            //pc.printf(" ay = %.2f\n", 1000*ay);
+        
         return ay*1000;
-}       
\ No newline at end of file
+}
\ No newline at end of file