Codigo derivada de levant y comunicacion serial con matlab

Dependencies:   MMA8451Q mbed

Fork of SC_accelerometer by Simulaciones Computacionales

main.cpp

Committer:
gcorderop
Date:
2015-09-06
Revision:
2:31492faba62d
Parent:
1:2d5e4ef32912

File content as of revision 2:31492faba62d:

#include "mbed.h"
#include "MMA8451Q.h"
#include "math.h"
#define MMA8451_I2C_ADDRESS (0x1d<<1)

Serial pc(USBTX, USBRX);

char val;

uint8_t t;

int8_t t_total;
uint16_t n;
uint16_t i=0;

float signal; //senal que representa la funcion
float dt,signo;
float L=4.0;
float lambda, alfa;
float z0=0; 
float z1=0;

int main(void) {
    pc.baud(115200);
    
    /*******************  Inicializacion *********************/ 
    t =0;                   //inicializo variable de tiempo en 0 msec
    t_total=9;
    dt=0.015;                //10 milisegundos
    n=(uint16_t)(t_total/dt); //numero de muestras
    
    lambda=1.1*sqrt(L);     //en z0 lambda=1.5L^(1/2)
    alfa=0.5*L;             //en z1 alfa=1.1L
    
    
    /******************* Acelerometro ************************/ 
    MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
    PwmOut rled(LED_RED);
    PwmOut gled(LED_GREEN);
    PwmOut bled(LED_BLUE);
    
    pc.printf("%c \r\n",'a'); //palabra que indica que comienze la recepcion
 
    for(i=0; i<n; i++) {
                     
        rled = 1.0 - abs(acc.getAccX());//gled = 1.0 - abs(acc.getAccY()); //bled = 1.0 - abs(acc.getAccZ());
                    
        signal = acc.getAccX();   //senal del eje x del acelerometro
        
        if ((z0-signal)>0){
            signo=1.0;
            }
        else{
            signo=-1.0;
            }
            
        z0= z0+ dt*(z1-(lambda*sqrt(abs(z0-signal)))*signo) ;  //z0n=z0+dt*z1-dt*lambda*sqrt(abs(z0-f))*sign(z0-f);
        z1= z1 - dt*(alfa*signo);    //z1n=z1-dt*alfa*sign(z0-f);
        
        wait(dt);
        t = t+dt;   //al tiempo le doy incremento de 100 msec
        
        /************* El programa enviara datos cada 10 mili segundos **************/
        pc.printf("%i \r\n",(int8_t)(signal*100)); //imprime el valor de la funcion
        pc.printf("%i \r\n",(int8_t)(z0*100)); //imprime el valor de la funcion
        pc.printf("%i \r\n\n",(int8_t)(z1*100)); //imprime el valor de la funcion
        
        
//        pc.printf("%.2f \r\n  ",signal); //imprime el valor de la funcion
//        pc.printf("%.2f \r\n  ",z0); //imprime el valor de la funcion
//        pc.printf("%.2f \r\n\n",z1); //imprime el valor de la funcion
    
       
    }
}