jaume bros
/
mma7260
Funcionamiento acelerómetro mma7260
main.cpp@0:1458daeb68fc, 2011-01-03 (annotated)
- Committer:
- jaume
- Date:
- Mon Jan 03 22:47:53 2011 +0000
- Revision:
- 0:1458daeb68fc
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jaume | 0:1458daeb68fc | 1 | /* Proyecto: MMA7260 Jaume */ |
jaume | 0:1458daeb68fc | 2 | #include "mbed.h" |
jaume | 0:1458daeb68fc | 3 | |
jaume | 0:1458daeb68fc | 4 | BusOut mleds(LED1, LED2, LED3, LED4); |
jaume | 0:1458daeb68fc | 5 | AnalogIn acelX (p20); //Al eje X del acelerometro |
jaume | 0:1458daeb68fc | 6 | AnalogIn acelY (p19); //Al eje Y del acelerometro |
jaume | 0:1458daeb68fc | 7 | AnalogIn acelZ (p18); //Al eje Z del acelerometro |
jaume | 0:1458daeb68fc | 8 | Serial pc(USBTX, USBRX); // tx, rx a 9600 |
jaume | 0:1458daeb68fc | 9 | |
jaume | 0:1458daeb68fc | 10 | int x, y, z; // mediciones en grados |
jaume | 0:1458daeb68fc | 11 | float oneG_x, oneG_y, oneG_z; // medidadas a operar |
jaume | 0:1458daeb68fc | 12 | float zeroG_x, zeroG_y, zeroG_z; // medidas a operar |
jaume | 0:1458daeb68fc | 13 | float med_x, med_y, med_z; // medidas adquiridas |
jaume | 0:1458daeb68fc | 14 | |
jaume | 0:1458daeb68fc | 15 | // lee los pins analogicos 64 valores trabajando a 3.3v |
jaume | 0:1458daeb68fc | 16 | void DoMeasureXYZ() { // a 90 2,45v a 0 1,65v a -90 0,85v |
jaume | 0:1458daeb68fc | 17 | int j; |
jaume | 0:1458daeb68fc | 18 | for (j=0;j<64;j++) { |
jaume | 0:1458daeb68fc | 19 | wait_ms(1); |
jaume | 0:1458daeb68fc | 20 | med_x += acelX.read_u16(); //lecturas de 12 bits |
jaume | 0:1458daeb68fc | 21 | wait_ms(1); |
jaume | 0:1458daeb68fc | 22 | med_y += acelY.read_u16(); |
jaume | 0:1458daeb68fc | 23 | wait_ms(1); |
jaume | 0:1458daeb68fc | 24 | med_z += acelZ.read_u16(); |
jaume | 0:1458daeb68fc | 25 | } |
jaume | 0:1458daeb68fc | 26 | med_x = med_x/64; |
jaume | 0:1458daeb68fc | 27 | med_y = med_y/64; |
jaume | 0:1458daeb68fc | 28 | med_z = med_z/64; |
jaume | 0:1458daeb68fc | 29 | } |
jaume | 0:1458daeb68fc | 30 | |
jaume | 0:1458daeb68fc | 31 | void Read_Angles() { |
jaume | 0:1458daeb68fc | 32 | float div_x, x_rad, div_y, y_rad, div_z, z_rad ; |
jaume | 0:1458daeb68fc | 33 | DoMeasureXYZ(); |
jaume | 0:1458daeb68fc | 34 | div_x = (med_x-zeroG_x) / (oneG_x-zeroG_x); // med_G/sensibil |
jaume | 0:1458daeb68fc | 35 | x_rad = asin( div_x ); // x angulo en radians |
jaume | 0:1458daeb68fc | 36 | x = (x_rad*180) / 3.14; // x angulo en grados |
jaume | 0:1458daeb68fc | 37 | |
jaume | 0:1458daeb68fc | 38 | div_y = (med_y-zeroG_y) / (oneG_y-zeroG_y); // med_G/sensibil |
jaume | 0:1458daeb68fc | 39 | y_rad = asin( div_y ); // y angulo en radians |
jaume | 0:1458daeb68fc | 40 | y = (y_rad*180) / 3.14; // y angulo en grados |
jaume | 0:1458daeb68fc | 41 | |
jaume | 0:1458daeb68fc | 42 | div_z = (med_z-zeroG_z) / (oneG_z-zeroG_z); // med_G/sensibil |
jaume | 0:1458daeb68fc | 43 | z_rad = asin( div_z ); // z angulo en radians |
jaume | 0:1458daeb68fc | 44 | z = (z_rad*180) / 3.14; // z angulo en grados |
jaume | 0:1458daeb68fc | 45 | } |
jaume | 0:1458daeb68fc | 46 | |
jaume | 0:1458daeb68fc | 47 | void calibrar() { |
jaume | 0:1458daeb68fc | 48 | printf("1.-Acelerometro posicionado paralelo al suelo \n"); |
jaume | 0:1458daeb68fc | 49 | printf ("Pulsa una tecla para seguir:\n"); |
jaume | 0:1458daeb68fc | 50 | while (!pc.getc()); // espera mientras no pulses una tecla |
jaume | 0:1458daeb68fc | 51 | // Medir 0g en eje X y eje Y y -1g para eje Z. |
jaume | 0:1458daeb68fc | 52 | DoMeasureXYZ(); |
jaume | 0:1458daeb68fc | 53 | zeroG_x += med_x; // 0g 165mV |
jaume | 0:1458daeb68fc | 54 | zeroG_y += med_y; // 0g 165mV |
jaume | 0:1458daeb68fc | 55 | oneG_z += med_z; //-1g 85mV |
jaume | 0:1458daeb68fc | 56 | printf("2.- Acelerometro con eje X vertical flecha hacia arriba \n"); |
jaume | 0:1458daeb68fc | 57 | printf ("Pulsa una tecla para seguir:\n"); |
jaume | 0:1458daeb68fc | 58 | while (!pc.getc()); // espera mientras no pulses una tecla |
jaume | 0:1458daeb68fc | 59 | // para medir -1g en eje X y 0g en eje Z. El eje y es 0g ya de antes |
jaume | 0:1458daeb68fc | 60 | DoMeasureXYZ(); |
jaume | 0:1458daeb68fc | 61 | oneG_x += med_x; // -1g |
jaume | 0:1458daeb68fc | 62 | zeroG_y += med_y; // 0g |
jaume | 0:1458daeb68fc | 63 | zeroG_z += med_z; // 0g |
jaume | 0:1458daeb68fc | 64 | printf ("3.- Acelerometro con eje Y vertical flecha hacia arriba \n"); |
jaume | 0:1458daeb68fc | 65 | printf ("Pulsa una tecla para seguir:\n"); |
jaume | 0:1458daeb68fc | 66 | while (!pc.getc()); // espera mientras no pulses una tecla |
jaume | 0:1458daeb68fc | 67 | // para medir -1G en eje Y Los otros siguen valeindo 0g |
jaume | 0:1458daeb68fc | 68 | DoMeasureXYZ(); |
jaume | 0:1458daeb68fc | 69 | zeroG_x += med_x; // 0g |
jaume | 0:1458daeb68fc | 70 | oneG_y += med_y; // -1g |
jaume | 0:1458daeb68fc | 71 | zeroG_z += med_z; // 0g |
jaume | 0:1458daeb68fc | 72 | // Igualar valores medidos a 0g |
jaume | 0:1458daeb68fc | 73 | zeroG_x = zeroG_x/2; |
jaume | 0:1458daeb68fc | 74 | zeroG_y = zeroG_y/2; |
jaume | 0:1458daeb68fc | 75 | zeroG_z = zeroG_z/2; |
jaume | 0:1458daeb68fc | 76 | printf ("A 0g x %.3f y %.3f z %.3f \n",zeroG_x, zeroG_y, zeroG_z); |
jaume | 0:1458daeb68fc | 77 | printf ("A -1g x %.3f y %.3f z %.3f \n",oneG_x, oneG_y, oneG_z); |
jaume | 0:1458daeb68fc | 78 | } |
jaume | 0:1458daeb68fc | 79 | |
jaume | 0:1458daeb68fc | 80 | int main() { |
jaume | 0:1458daeb68fc | 81 | calibrar(); // Primero calibrar: Z plano X e Y flecha arriba |
jaume | 0:1458daeb68fc | 82 | while (1) { |
jaume | 0:1458daeb68fc | 83 | Read_Angles(); // Transformamos lecturas a angulos |
jaume | 0:1458daeb68fc | 84 | printf ("----------------GRADOS-------\n"); |
jaume | 0:1458daeb68fc | 85 | printf ("Angulo en eje X %d \n",x); |
jaume | 0:1458daeb68fc | 86 | printf ("Angulo en eje Y %d \n",y); |
jaume | 0:1458daeb68fc | 87 | printf ("Angulo en eje Z %d \n",z); |
jaume | 0:1458daeb68fc | 88 | mleds = (x+y+z)/8; |
jaume | 0:1458daeb68fc | 89 | printf ("-------------------------------\n"); |
jaume | 0:1458daeb68fc | 90 | printf ("Pulsa una tecla para seguir \n"); |
jaume | 0:1458daeb68fc | 91 | while (!pc.getc()); // espera mientras no pulses una tecla |
jaume | 0:1458daeb68fc | 92 | } |
jaume | 0:1458daeb68fc | 93 | } |