Marlon Fulla / Mbed 2 deprecated 2014FEB04_Vibrometro_Xbee

Dependencies:   mbed

Fork of 2014FEB4_Vibrometro_Xbee by Marlon Fulla

main.cpp

Committer:
marlonfulla
Date:
2014-02-05
Revision:
8:1814fd00a71e
Parent:
7:d1eba8f22f3e

File content as of revision 8:1814fd00a71e:

#include "mbed.h"
#include <string>
#include <iostream>
#include "SDFileSystem.h"
//#include <string>

//Pines de conversión A/D asociados a los ejes del acelerómetro triaxial MMA7361L
AnalogIn ain_x(PTB0);
AnalogIn ain_y(PTB1);
AnalogIn ain_z(PTB2);
//Pines digitales para configurar el acelerómetro triaxial MMA7361L
DigitalOut slp(PTB3);
DigitalOut g_sel(PTC2);
//Cronómetro
Timer reloj;
//SD FAT system
SDFileSystem sd(PTD2, PTD3, PTD1, PTD0,"sd");
//Comunicación Xbee
Serial xbee(PTA2,PTA1);

//Serial xbee(USBTX,USBRX);


//Definición de variables globales
FILE * fp1;
FILE * fp2;
int inicio = 0;
int fin = 0;
int samples = 1;
char read [64] = {0};
char readvar [512] = {0};
int imax;
int delay=27;


int main()
{
   std::string readvarstr;
   std::string xbeeout;
    //xbee.baud(9600);
    xbee.baud(115200);
    reloj.start();
    slp = 1;    //Habilitado el modo de operación normal (MMA7361L)
    g_sel = 0;  //Ajusta la sensibilidad a 1.5g (cambiar a 1 para ajustar sensibilidad a 6g)


    while(1) {
        //char read [64] = {0};
        //char readvar [512] = {0};

        xbee.scanf("%s",read); //Espera la recepción de caracteres

        switch(read[0]) {
            case 'r':   //Lee la información de la memoria SD y la envía mediante Xbee
                //if(read[1]=='1') { //Nombre para modulo 1...
                    fp2 = fopen ("/sd/test.txt","r");

                //El numero de muestras debe ser multiplo de 42
                 imax=samples/42;

                    xbee.printf("%s %d \n","numero de lineas",imax);                    
              
              reloj.start();      
              
              for (int i=1; i<=imax; i++) {
                    fscanf (fp2,"%s \n",readvar);

                    for(int l=1;l<=5;l++){
                       xbee.printf("%s",string (readvar,100*(l-1),100));
                       wait_ms(28); //pausa entre paquetes 
                                 }
                      xbee.printf("%s \n",string (readvar,501,504));           
                       wait_ms(28); ////pausa entre paquetes
                    }
                    xbee.printf("%d \n",reloj.read_us());
              
/*                    for(int k=0; k<5; k++) {
                        for(int j=1; j<=100; j++) {
                            xbeeout[j]=readvar[100*k+j];
                                 }
                     xbee.printf("%s",xbeeout)
                        wait_ms(27);
                                 }
*/                    
/*                    for(int j=1; j<=4; j++) {
                            xbeeout[j]=readvar[500+j];                      
                            }

                    xbee.printf("%s",xbeeout);                            
                    wait_ms(27);
                    xbee.putc('\n');
 */                  
                    
//                       xbee.printf("%s",readvar);
//                       xbee.putc('\n');
                    
                    
                    
                    fclose (fp2);
                //}
                break;
            case 't':   //Envía el tiempo de adquisición
                //if(read[1]=='1') //Nombre para modulo 1...
                xbee.printf("%010d\n",fin-inicio); 
                break;
            default:    //Inicia la conversión A/D y la almacena en la memoria SD
                samples = atoi(read);
                //Inicio del reloj para determinar la tasa de muestreo
                fp1 = fopen ("/sd/test.txt","w");
                reloj.reset();
                inicio = reloj.read_us();
                //Ciclo de lectura de los ejes x, y, z del acelerómetro triaxial MMA7361L
                for(int i=1; i<=samples; i++) {
                    fprintf (fp1,"%04X%04X%04X",ain_x.read_u16(),ain_y.read_u16(),ain_z.read_u16());
                    if((i>=42) && (i%42==0)) fprintf (fp1,"\n"); //permite escribir en la memoria SD líneas cada una con 42 muestras ó 502 caracteres
                }
                //Tiempo transcurrido desde la ejecución del reloj
                fin = reloj.read_us();
                fclose (fp1);
                break;
        }
    }
}