Natalia Garavito
/
Nucleo_read_analog_value
Diff: main.cpp
- 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 + } + } +}