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-21
- Revision:
- 9:006f34c9f750
- Parent:
- 8:43cce9f7a006
- Child:
- 10:2e66843bb6d7
File content as of revision 9:006f34c9f750:
#include "mbed.h"
#include "MODSERIAL.h"
AnalogIn emgtr(PTB3);
AnalogIn emgbr(PTB2);
//Rechts is x, links is y
AnalogIn emgtl(PTB1);
AnalogIn emgbl(PTB0);
PwmOut pwm_x(PTA5);
PwmOut pwm_y(PTA12);
MODSERIAL pc(USBTX,USBRX);
volatile bool looptimerflag;
void setlooptimerflag(void)
{
looptimerflag = true;
}
int main()
{
Ticker looptimer;
const float ts=0.001;
looptimer.attach(setlooptimerflag,ts);
float numh1,numh2,denh2,numl1,numl2,numl3,denl2,denl3;
float xtr,ytr,y1tr,x1tr,ztr,z1tr,z2tr,yabstr,yabs1tr,yabs2tr,ktr;
float xbr,ybr,y1br,x1br,zbr,z1br,z2br,yabsbr,yabs1br,yabs2br,kbr;
float xtl,ytl,y1tl,x1tl,ztl,z1tl,z2tl,yabstl,yabs1tl,yabs2tl,ktl;
float xbl,ybl,y1bl,x1bl,zbl,z1bl,z2bl,yabsbl,yabs1bl,yabs2bl,kbl;
float zx,zy,xdir,ydir;
x1tr=0; y1tr=0; z1tr=0; z2tr=0; yabs1tr=0; yabs2tr=0;
x1br=0; y1br=0; z1br=0; z2br=0; yabs1br=0; yabs2br=0;
x1tl=0; y1tl=0; z1tl=0; z2tl=0; yabs1tl=0; yabs2tl=0;
x1bl=0; y1bl=0; z1bl=0; z2bl=0; yabs1bl=0; yabs2bl=0;
zx=0; zy=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);
{
pwm_x.write(abs(zx));
//pwm_y.write(abs(zy));
}
looptimerflag = false;
ktr=emgtr.read();
xtr=(ktr-0.5)*2.0;
ytr=xtr*numh1+x1tr*numh2-y1tr*denh2;
yabstr=abs(ytr);
ztr=yabstr*numl1+yabs1tr*numl2+yabs2tr*numl3-z1tr*denl2-z2tr*denl3;
x1tr=xtr; y1tr=ytr; z2tr=z1tr; z1tr=ztr; yabs2tr=yabs1tr; yabs1tr=yabstr;
kbr=emgbr.read();
xbr=(kbr-0.5)*2.0;
ybr=xbr*numh1+x1br*numh2-y1br*denh2;
yabsbr=abs(ybr);
zbr=yabsbr*numl1+yabs1br*numl2+yabs2br*numl3-z1br*denl2-z2br*denl3;
x1br=xbr; y1br=ybr; z2br=z1br; z1br=zbr; yabs2br=yabs1br; yabs1br=yabsbr;
ktl=emgtl.read();
xtl=(ktl-0.5)*2.0;
ytl=xtl*numh1+x1tl*numh2-y1tl*denh2;
yabstl=abs(ytl);
ztl=yabstl*numl1+yabs1tl*numl2+yabs2tl*numl3-z1tl*denl2-z2tl*denl3;
x1tl=xtl; y1tl=ytl; z2tl=z1tl; z1tl=ztl; yabs2tl=yabs1tl; yabs1tl=yabstl;
kbl=emgbl.read();
xbl=(kbl-0.5)*2.0;
ybl=xbl*numh1+x1bl*numh2-y1bl*denh2;
yabsbl=abs(ybl);
zbl=yabsbl*numl1+yabs1bl*numl2+yabs2bl*numl3-z1bl*denl2-z2bl*denl3;
x1bl=xbl; y1bl=ybl; z2bl=z1bl; z1bl=zbl; yabs2bl=yabs1bl; yabs1bl=yabsbl;
if (ztr>zbr) {
zx=ztr*5.0;
xdir=0;
} else {
zx=zbr*5.0;
xdir=1;
}
if (ztl>zbl) {
zy=ztl*5.0;
ydir=0;
} else {
zy=zbl*5.0;
ydir=1;
}
if (zx>1.0) {
zx=0.99999;
}
if (zy>1.0) {
zy=0.99999;
}
if (zx<0.35){
zx=0;
}
if (zy<0.35){
zy=0;
}
pwm_x.write(abs(zx));
//pwm_y.write(abs(zy));
pc.printf("%f\n\r",zx);
}
}
