Marlon Fulla / Mbed 2 deprecated 2014FEB04_Vibrometro_Xbee

Dependencies:   mbed

Fork of 2014FEB4_Vibrometro_Xbee by Marlon Fulla

Committer:
jlpalaci
Date:
Tue Jan 28 00:10:05 2014 +0000
Revision:
9:db5c39c8cf42
Parent:
7:d1eba8f22f3e
Version final en base de funcines de C para la lectura/escritura de meorias SD.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jlpalaci 0:1eb268d3d14e 1 #include "mbed.h"
jlpalaci 0:1eb268d3d14e 2 #include "SDFileSystem.h"
jlpalaci 7:d1eba8f22f3e 3 //#include <string>
jlpalaci 0:1eb268d3d14e 4
jlpalaci 0:1eb268d3d14e 5 //Pines de conversión A/D asociados a los ejes del acelerómetro triaxial MMA7361L
jlpalaci 0:1eb268d3d14e 6 AnalogIn ain_x(PTB0);
jlpalaci 0:1eb268d3d14e 7 AnalogIn ain_y(PTB1);
jlpalaci 0:1eb268d3d14e 8 AnalogIn ain_z(PTB2);
jlpalaci 0:1eb268d3d14e 9 //Pines digitales para configurar el acelerómetro triaxial MMA7361L
jlpalaci 0:1eb268d3d14e 10 DigitalOut slp(PTB3);
jlpalaci 0:1eb268d3d14e 11 DigitalOut g_sel(PTC2);
jlpalaci 0:1eb268d3d14e 12 //Cronómetro
jlpalaci 0:1eb268d3d14e 13 Timer reloj;
jlpalaci 0:1eb268d3d14e 14 //SD FAT system
jlpalaci 0:1eb268d3d14e 15 SDFileSystem sd(PTD2, PTD3, PTD1, PTD0,"sd");
jlpalaci 0:1eb268d3d14e 16 //Comunicación Xbee
jlpalaci 9:db5c39c8cf42 17 Serial xbee(PTA2,PTA1); //Serial xbee(USBTX,USBRX);
jlpalaci 9:db5c39c8cf42 18 //Pin de control de flujo RTS (usado en la función Serial_RTS)
jlpalaci 9:db5c39c8cf42 19 DigitalIn rts(PTD4);
jlpalaci 0:1eb268d3d14e 20
jlpalaci 6:99df19f0f6eb 21
jlpalaci 3:8125d6b7afff 22 //Definición de variables globales
jlpalaci 0:1eb268d3d14e 23 FILE * fp1;
jlpalaci 0:1eb268d3d14e 24 FILE * fp2;
jlpalaci 2:a2b90ac0b81b 25 int inicio = 0;
jlpalaci 2:a2b90ac0b81b 26 int fin = 0;
jlpalaci 4:29f56a8a8390 27 int samples = 1;
jlpalaci 9:db5c39c8cf42 28 int imax = 0;
jlpalaci 4:29f56a8a8390 29 char read [64] = {0};
jlpalaci 4:29f56a8a8390 30 char readvar [512] = {0};
jlpalaci 0:1eb268d3d14e 31
jlpalaci 9:db5c39c8cf42 32
jlpalaci 9:db5c39c8cf42 33 //Declaración de la función UART con control de flujo
jlpalaci 9:db5c39c8cf42 34 //Sólo RTS
jlpalaci 9:db5c39c8cf42 35 int Serial_RTS(const char *str);
jlpalaci 9:db5c39c8cf42 36
jlpalaci 9:db5c39c8cf42 37
jlpalaci 0:1eb268d3d14e 38 int main()
jlpalaci 0:1eb268d3d14e 39 {
jlpalaci 6:99df19f0f6eb 40 //xbee.baud(9600);
jlpalaci 6:99df19f0f6eb 41 xbee.baud(115200);
jlpalaci 4:29f56a8a8390 42 reloj.start();
jlpalaci 0:1eb268d3d14e 43 slp = 1; //Habilitado el modo de operación normal (MMA7361L)
jlpalaci 0:1eb268d3d14e 44 g_sel = 0; //Ajusta la sensibilidad a 1.5g (cambiar a 1 para ajustar sensibilidad a 6g)
jlpalaci 5:c208cb05dd4b 45
jlpalaci 0:1eb268d3d14e 46 while(1) {
jlpalaci 3:8125d6b7afff 47 xbee.scanf("%s",read); //Espera la recepción de caracteres
jlpalaci 2:a2b90ac0b81b 48 switch(read[0]) {
jlpalaci 4:29f56a8a8390 49 case 'r': //Lee la información de la memoria SD y la envía mediante Xbee
jlpalaci 6:99df19f0f6eb 50 //if(read[1]=='1') { //Nombre para modulo 1...
jlpalaci 6:99df19f0f6eb 51 fp2 = fopen ("/sd/test.txt","r");
jlpalaci 9:db5c39c8cf42 52
jlpalaci 9:db5c39c8cf42 53 if(samples%42==0 && samples>42) imax=samples/42;
jlpalaci 9:db5c39c8cf42 54 else imax=samples/42;
jlpalaci 9:db5c39c8cf42 55 //imax=samples/42;
jlpalaci 9:db5c39c8cf42 56
jlpalaci 9:db5c39c8cf42 57 for (int i=0; i<imax; i++) {
jlpalaci 6:99df19f0f6eb 58 fscanf (fp2,"%s",readvar);
jlpalaci 9:db5c39c8cf42 59 //xbee.printf("%s",readvar);
jlpalaci 9:db5c39c8cf42 60 Serial_RTS(readvar);
jlpalaci 6:99df19f0f6eb 61 xbee.putc('\n');
jlpalaci 6:99df19f0f6eb 62 }
jlpalaci 6:99df19f0f6eb 63 fclose (fp2);
jlpalaci 6:99df19f0f6eb 64 //}
jlpalaci 2:a2b90ac0b81b 65 break;
jlpalaci 3:8125d6b7afff 66 case 't': //Envía el tiempo de adquisición
jlpalaci 6:99df19f0f6eb 67 //if(read[1]=='1') //Nombre para modulo 1...
jlpalaci 6:99df19f0f6eb 68 xbee.printf("%010d\n",fin-inicio);
jlpalaci 4:29f56a8a8390 69 break;
jlpalaci 4:29f56a8a8390 70 default: //Inicia la conversión A/D y la almacena en la memoria SD
jlpalaci 4:29f56a8a8390 71 samples = atoi(read);
jlpalaci 4:29f56a8a8390 72 //Inicio del reloj para determinar la tasa de muestreo
jlpalaci 4:29f56a8a8390 73 fp1 = fopen ("/sd/test.txt","w");
jlpalaci 4:29f56a8a8390 74 reloj.reset();
jlpalaci 4:29f56a8a8390 75 inicio = reloj.read_us();
jlpalaci 4:29f56a8a8390 76 //Ciclo de lectura de los ejes x, y, z del acelerómetro triaxial MMA7361L
jlpalaci 4:29f56a8a8390 77 for(int i=1; i<=samples; i++) {
jlpalaci 4:29f56a8a8390 78 fprintf (fp1,"%04X%04X%04X",ain_x.read_u16(),ain_y.read_u16(),ain_z.read_u16());
jlpalaci 9:db5c39c8cf42 79 if((i>=42) && (i%42==0)) fprintf (fp1,"\n");
jlpalaci 4:29f56a8a8390 80 }
jlpalaci 4:29f56a8a8390 81 //Tiempo transcurrido desde la ejecución del reloj
jlpalaci 4:29f56a8a8390 82 fin = reloj.read_us();
jlpalaci 4:29f56a8a8390 83 fclose (fp1);
jlpalaci 3:8125d6b7afff 84 break;
jlpalaci 0:1eb268d3d14e 85 }
jlpalaci 0:1eb268d3d14e 86 }
jlpalaci 9:db5c39c8cf42 87 }
jlpalaci 9:db5c39c8cf42 88
jlpalaci 9:db5c39c8cf42 89
jlpalaci 9:db5c39c8cf42 90 //Definición de la función UART RTS
jlpalaci 9:db5c39c8cf42 91 int Serial_RTS(const char *str)
jlpalaci 9:db5c39c8cf42 92 {
jlpalaci 9:db5c39c8cf42 93 while (*str) {
jlpalaci 9:db5c39c8cf42 94 while(rts);
jlpalaci 9:db5c39c8cf42 95 xbee.putc(*str ++);
jlpalaci 9:db5c39c8cf42 96 }
jlpalaci 9:db5c39c8cf42 97 return 0;
jlpalaci 0:1eb268d3d14e 98 }