Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of SC_accelerometer by
Revision 2:31492faba62d, committed 2015-09-06
- Comitter:
- gcorderop
- Date:
- Sun Sep 06 04:48:46 2015 +0000
- Parent:
- 1:2d5e4ef32912
- Commit message:
- blah
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 2d5e4ef32912 -r 31492faba62d main.cpp --- a/main.cpp Tue Sep 01 05:26:51 2015 +0000 +++ b/main.cpp Sun Sep 06 04:48:46 2015 +0000 @@ -1,57 +1,75 @@ #include "mbed.h" #include "MMA8451Q.h" +#include "math.h" +#define MMA8451_I2C_ADDRESS (0x1d<<1) + Serial pc(USBTX, USBRX); -#define MMA8451_I2C_ADDRESS (0x1d<<1) +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); - - while (true) { - rled = 1.0 - abs(acc.getAccX()); - gled = 1.0 - abs(acc.getAccY()); - bled = 1.0 - abs(acc.getAccZ()); - wait(0.2); - - pc.printf("%.2f \r\n ",acc.getAccX()); -// pc.printf("eje y = %.2f \n\r ",acc.getAccY()); -// pc.printf("eje z = %.2f \n\n\r",acc.getAccZ()); + + 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 + + } } - -/**********Código de Matlab para leer la señal del acelerometro**************/ -/* -clear all; -close all; -clc; -%% ======================== ACELEROMETRO =============================== %% -display('Start'); - -delete(instrfind); -pause(0.1); -mbed = serial('COM5'); -set(mbed,'BaudRate',115200,'DataBits', 8, 'Parity', 'none','StopBits', 1, 'FlowControl', 'none','Terminator','CR/LF'); -fopen(mbed); - -for i = 1 : 20 - A = fscanf(mbed,'%f'); - y(1,i)=int8(A*100); - pause(0.1); -end - -plot(y); -axis ([0 i -200 200]); -xlabel('time') -ylabel('Voltage') - -fclose(mbed); -delete(mbed); -clear mbed; - -display('End'); -*/ \ No newline at end of file