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.
Dependencies: MODSERIAL mbed Encoder
main.cpp
- Committer:
- Socrates
- Date:
- 2013-10-18
- Revision:
- 7:4d2edb5b0164
- Parent:
- 6:27a4e8d9ddac
- Child:
- 8:43cce9f7a006
File content as of revision 7:4d2edb5b0164:
#include "mbed.h" #include "MODSERIAL.h" AnalogIn emgt(PTB1); AnalogIn emgb(PTB0); MODSERIAL pc(USBTX,USBRX); PwmOut pwm_motor1(PTA12); PwmOut pwm_motor2(PTA5); volatile bool looptimerflag; void setlooptimerflag(void) { looptimerflag = true; } int main() { Ticker looptimer; const float ts=0.001; looptimer.attach(setlooptimerflag,ts); float xt,yt,y1t,y2t,x1t,zt,z1t,z2t,yabst,yabs1t,yabs2t,kt,numh1,numh2,denh1,denh2,numl1,numl2,numl3,denl1,denl2,denl3; float xb,yb,y1b,y2b,x1b,zb,z1b,z2b,yabsb,yabs1b,yabs2b,kb; float z; x1t=0; y1t=0; y2t=0; z1t=0; z2t=0; yabs1t=0; yabs2t=0; x1b=0; y1b=0; y2b=0; z1b=0; z2b=0; yabs1b=0; yabs2b=0; //High pass, 35Hz, 1e numh1=0.900575535279376; numh2=-0.900575535279376; //denh1=1; denh2=-0.801151070558751; //Low pass, 2 Hz, 2e orde numl1=0.391302053991682*pow(10.0,-4.0); numl2=0.782604107983365*pow(10.0,-4.0); numl3=0.391302053991682*pow(10.0,-4.0); //denl1=1; denl2=-1.982228929792529; denl3=0.982385450614126; pc.baud(115200); while(1) { while(looptimerflag != true); looptimerflag = false; //Triceps kt=emgt.read(); xt=(kt-0.5)*2.0; //High pass //1e orde yt=xt*numh1+x1t*numh2-y1t*denh2; //Rectify yabst=abs(yt); //Low pass //2e orde zt=yabst*numl1+yabs1t*numl2+yabs2t*numl3-z1t*denl2-z2t*denl3; x1t=xt; y2t=y1t; y1t=yt; z2t=z1t; z1t=zt; yabs2t=yabs1t; yabs1t=yabst; //Biceps kb=emgb.read(); xb=(kb-0.5)*2.0; //High pass //1e orde yb=xb*numh1+x1b*numh2-y1b*denh2; //Rectify yabsb=abs(yb); //Low pass //2e orde zb=yabsb*numl1+yabs1b*numl2+yabs2b*numl3-z1b*denl2-z2b*denl3; x1b=xb; y2b=y1b; y1b=yb; z2b=z1b; z1b=zb; yabs2b=yabs1b; yabs1b=yabsb; if (zb>zt) { z=zb; } else { z=zt; } if (z>1.0) { z=1.0; } pwm_motor1=z; pwm_motor2=z; pc.printf("%f\n\r",z); } }