Marlon Fulla / Mbed 2 deprecated 2014FEB4_Vibrometro_Xbee

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "SDFileSystem.h"
00003 //#include <string>
00004 
00005 //Pines de conversión A/D asociados a los ejes del acelerómetro triaxial MMA7361L
00006 AnalogIn ain_x(PTB0);
00007 AnalogIn ain_y(PTB1);
00008 AnalogIn ain_z(PTB2);
00009 //Pines digitales para configurar el acelerómetro triaxial MMA7361L
00010 DigitalOut slp(PTB3);
00011 DigitalOut g_sel(PTC2);
00012 //Cronómetro
00013 Timer reloj;
00014 //SD FAT system
00015 SDFileSystem sd(PTD2, PTD3, PTD1, PTD0,"sd");
00016 //Comunicación Xbee
00017 Serial xbee(PTA2,PTA1); //Serial xbee(USBTX,USBRX);
00018 //Pin de control de flujo RTS (usado en la función Serial_RTS)
00019 DigitalIn rts(PTD4);
00020 
00021 
00022 //Definición de variables globales
00023 FILE * fp1;
00024 FILE * fp2;
00025 int inicio = 0;
00026 int fin = 0;
00027 int samples = 1;
00028 int imax = 0;
00029 char read [64] = {0};
00030 char readvar [512] = {0};
00031 
00032 
00033 //Declaración de la función UART con control de flujo
00034 //Sólo RTS
00035 int Serial_RTS(const char *str);
00036 
00037 
00038 int main()
00039 {
00040     //xbee.baud(9600);
00041     xbee.baud(115200);
00042     reloj.start();
00043     slp = 1;    //Habilitado el modo de operación normal (MMA7361L)
00044     g_sel = 0;  //Ajusta la sensibilidad a 1.5g (cambiar a 1 para ajustar sensibilidad a 6g)
00045 
00046     while(1) {
00047         xbee.scanf("%s",read); //Espera la recepción de caracteres
00048         switch(read[0]) {
00049             case 'r':   //Lee la información de la memoria SD y la envía mediante Xbee
00050                 //if(read[1]=='1') { //Nombre para modulo 1...
00051                     fp2 = fopen ("/sd/test.txt","r");
00052                     
00053                     if(samples%42==0 && samples>42) imax=samples/42;
00054                     else imax=samples/42;
00055                     //imax=samples/42;
00056                     
00057                     for (int i=0; i<imax; i++) {
00058                         fscanf (fp2,"%s",readvar);
00059                         //xbee.printf("%s",readvar);
00060                         Serial_RTS(readvar);
00061                         xbee.putc('\n');
00062                     }
00063                     fclose (fp2);
00064                 //}
00065                 break;
00066             case 't':   //Envía el tiempo de adquisición
00067                 //if(read[1]=='1') //Nombre para modulo 1...
00068                 xbee.printf("%010d\n",fin-inicio); 
00069                 break;
00070             default:    //Inicia la conversión A/D y la almacena en la memoria SD
00071                 samples = atoi(read);
00072                 //Inicio del reloj para determinar la tasa de muestreo
00073                 fp1 = fopen ("/sd/test.txt","w");
00074                 reloj.reset();
00075                 inicio = reloj.read_us();
00076                 //Ciclo de lectura de los ejes x, y, z del acelerómetro triaxial MMA7361L
00077                 for(int i=1; i<=samples; i++) {
00078                     fprintf (fp1,"%04X%04X%04X",ain_x.read_u16(),ain_y.read_u16(),ain_z.read_u16());
00079                     if((i>=42) && (i%42==0)) fprintf (fp1,"\n");
00080                 }
00081                 //Tiempo transcurrido desde la ejecución del reloj
00082                 fin = reloj.read_us();
00083                 fclose (fp1);
00084                 break;
00085         }
00086     }
00087 }
00088 
00089 
00090 //Definición de la función UART RTS
00091 int Serial_RTS(const char *str)
00092 {
00093     while (*str) {
00094         while(rts);
00095         xbee.putc(*str ++);
00096     }
00097     return 0;
00098 }