Dependencies:   mbed

Revision:
1:62775d3592cf
Parent:
0:7411b02903e3
Child:
2:3c276505f7ec
--- a/main.cpp	Tue Aug 20 17:13:30 2019 +0000
+++ b/main.cpp	Sun Aug 25 20:22:21 2019 +0000
@@ -2,7 +2,7 @@
 
 Serial pc(SERIAL_TX, SERIAL_RX);    // (TX, RX)
 I2C i2c(PB_9, PB_8 );           // (SDA, SCL)
-DigitalIn button(PC_13);
+InterruptIn button(PC_13);
 
 const int addr = 0xD0;      // 7 bit I2C address
 char cmd[2];
@@ -21,10 +21,45 @@
 float fgyr_x = 0, fgyr_y = 0, fgyr_z = 0;
 float ftemp = 0;
 
-DigitalOut myled(LED1);
+double boton1; //primera interrupcion
+double boton2; //segunda interrupcion
+
+//interrupcion boton
+void pressed()//sacada de codigo interrupcion de boton
+{
+    //primera interrupcion
+    if(boton1==0 && boton2==0)
+    {
+        boton1=1;
+        boton2=0;
+    }   
+    //segunda interrupcion
+    if(boton1==2 && boton2==0)
+    {
+        boton1=2;
+        boton2=1;
+    }  
+}
+
+void datos()//funcion llamada por la primera y segunda interrupcion (comparar con la programacion orginal que envio el profe)
+{
+        facc_x = acc_x/ACC_SEN;
+        facc_y = acc_y/ACC_SEN;
+        facc_z = acc_z/ACC_SEN;     
+        
+        fgyr_x = gyr_x/GYR_SEN;
+        fgyr_y = gyr_y/GYR_SEN;
+        fgyr_z = gyr_z/GYR_SEN;
+
+        ftemp= (temp - 521)/TEM_SEN;
+}
 
 int main()
 {
+    
+    // Asignacion interrupcion
+    button.fall(&pressed);//sacado codigo boton de interrupcion
+   
     pc.printf("Prueba MPU6050 \n\r");
 
     cmd[0] = 0x6B;
@@ -44,16 +79,11 @@
 
         cmd[0]=0x3B;
         i2c.write(addr, cmd, 1);            //Escritura del registro de inicio
-        
-        //for(int i;i<=10;i++)
-        //{
         i2c.read(addr, read_buffer, 14);    //Lectura en rafaga de los valores de la MPU
         wait_ms(1);
-        //}   
-
-        //.................Construcción de la medición de los valores .................. 
-       
-       
+   
+       //.................Construcción de la medición de los valores .................. 
+             
         acc_x = read_buffer[0]<<8 | read_buffer[1];    
         acc_y = read_buffer[2]<<8 | read_buffer[3];
         acc_z = read_buffer[4]<<8 | read_buffer[5];
@@ -62,36 +92,46 @@
         gyr_y = read_buffer[10]<<8 | read_buffer[11];
         gyr_z = read_buffer[12]<<8 | read_buffer[13];
         
-        
-        //pc.printf("ACCx = %i ACCy = %i ACCz = %i \n\r", acc_x, acc_y, acc_z);
-        
-        while(button!=1)
+        //primera interrupcion       
+        while(boton1==1 && boton2==0)//datos dados por la primera interrupcion
         {
-            
-        facc_x = acc_x/ACC_SEN;
-        facc_y = acc_y/ACC_SEN;
-        facc_z = acc_z/ACC_SEN;
-               
-        
-        fgyr_x = gyr_x/GYR_SEN;
-        fgyr_y = gyr_y/GYR_SEN;
-        fgyr_z = gyr_z/GYR_SEN;
-               
-       // pc.printf("GYRx = %.2f GYRy = %.2f GYRz = %.2f \n\r", fgyr_x, fgyr_y, fgyr_z);
-
-        ftemp= (temp - 521)/TEM_SEN;
-        
-        //pc.printf("Temp = %.2f \r\n",ftemp);
-        for(int i=0;i<=9;i++){
+        datos();
+        pc.printf("primer rafaga de datos");
+        wait(2);//para que se visualice el titulo de la rafaga y no pase tan rapido
+        float j=0;  //lo deje float porque si lo dejo entero en el momento de imprimir me sale unicamente cero y la deje local para evitar gasto de memoria
+        for(int i=0;i<=99;i++)//100 datos
+        {
+        j++;//numero de dato en incremento
+        pc.printf("dato %.2f \n\r", j); //impresion del numero del dato  
         pc.printf("ACCx   ACCy   ACCz   GYRx   GYRy   GYRz   Temp   \n\r");
         pc.printf("%.2f   %.2f   %.2f   %.2f   %.2f   %.2f   %.2f   \n\r", facc_x, facc_y, facc_z, fgyr_x, fgyr_y, fgyr_z, ftemp);
+        pc.printf("\n\r");
         }
+        //iniciacion para la segunda rafaga de datos
+        boton1=2;
+        boton2=0;// se deja cero para que entre a la segunda rafaga de datos EN LA INTERRUPCION
         }
-
-       /* for(int i=0; i<14; i++) {
-            pc.printf("Buffer[%i] = %i \n\r",i,read_buffer[i]);
-        }*/
-
-        myled = !myled;
-    }
-}
\ No newline at end of file
+        
+        //segunda interrupcion
+        while(boton1==2 && boton2==1)//datos dados por la segunda interrupcion
+        {
+        datos();    
+        pc.printf("segunda rafaga de datos");
+        wait (2);//para que se visualice el titulo de la rafaga y no pase tan rapido
+        float j=0;//lo deje float porque si lo dejo entero en el momento de imprimir me sale unicamente cero y la deje local para evitar gasto de memoria 
+        
+        for(int i=0;i<=499;i++)//500 datos
+        {
+        j++; //numero de dato en incremento   
+        pc.printf("dato %.2f \n\r", j);   //impresion del numero del dato
+        pc.printf("ACCx   ACCy   ACCz   GYRx   GYRy   GYRz   Temp   \n\r");
+        pc.printf("%.2f   %.2f   %.2f   %.2f   %.2f   %.2f   %.2f   \n\r", facc_x, facc_y, facc_z, fgyr_x, fgyr_y, fgyr_z, ftemp);
+        pc.printf("\n\r");
+        }
+        boton1=0;
+        boton2=0;// se deja cero para que entre a la primera rafaga de datos EN LA INTERRUPCION,
+        // es decir la proxima vez que oprima no va a ser necesario que vuelva a iniciar el programa sino que directamente entra 
+        //a la primera rafaga de datos
+        }
+  }
+}