Thomas Plaisier / Mbed 2 deprecated G3_Barry_Plotter.

Dependencies:   MODSERIAL mbed Encoder

Committer:
Socrates
Date:
Fri Oct 25 09:44:12 2013 +0000
Revision:
16:414a2397c493
Parent:
14:5746b1697ff4
Parent:
15:ab236d7c32d2
Child:
17:7dd6dc3c7902
merge

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Socrates 0:b13a317308d1 1 #include "mbed.h"
Socrates 0:b13a317308d1 2 #include "MODSERIAL.h"
Socrates 8:43cce9f7a006 3 AnalogIn emgtr(PTB3);
Socrates 8:43cce9f7a006 4 AnalogIn emgbr(PTB2);
Socrates 9:006f34c9f750 5 //Rechts is x, links is y
Socrates 8:43cce9f7a006 6 AnalogIn emgtl(PTB1);
Socrates 8:43cce9f7a006 7 AnalogIn emgbl(PTB0);
Socrates 11:28a196a3d898 8 PwmOut pwm_x(PTA5);
Socrates 11:28a196a3d898 9 PwmOut pwm_y(PTA12);
Socrates 0:b13a317308d1 10 MODSERIAL pc(USBTX,USBRX);
Socrates 12:100cbba6cd96 11 DigitalOut motordir1(PTD3);
Socrates 12:100cbba6cd96 12 DigitalOut motordir2(PTD1);
Socrates 11:28a196a3d898 13
Socrates 0:b13a317308d1 14 volatile bool looptimerflag;
gerard1993 14:5746b1697ff4 15 //hoi
Socrates 0:b13a317308d1 16
Socrates 0:b13a317308d1 17 void setlooptimerflag(void)
Socrates 0:b13a317308d1 18 {
Socrates 0:b13a317308d1 19 looptimerflag = true;
Socrates 0:b13a317308d1 20 }
Socrates 0:b13a317308d1 21
Socrates 15:ab236d7c32d2 22 volatile bool dirflag=true;
Socrates 13:e0e9fda0e9a1 23 void tricheck(void)
Socrates 13:e0e9fda0e9a1 24 {
Socrates 15:ab236d7c32d2 25 dirflag=true;
Socrates 13:e0e9fda0e9a1 26 }
Socrates 13:e0e9fda0e9a1 27
Socrates 0:b13a317308d1 28 int main()
Socrates 0:b13a317308d1 29 {
Socrates 13:e0e9fda0e9a1 30 pwm_x.period(1.0/22000.0);
Socrates 13:e0e9fda0e9a1 31 pwm_y.period(1.0/22000.0);
Socrates 0:b13a317308d1 32 Ticker looptimer;
Socrates 15:ab236d7c32d2 33 Timeout dirtimeout;
Socrates 12:100cbba6cd96 34 const double ts=0.001;
Socrates 1:34202d107458 35 looptimer.attach(setlooptimerflag,ts);
Socrates 12:100cbba6cd96 36 double numh1,numh2,denh2,numl1,numl2,numl3,denl2,denl3;
Socrates 12:100cbba6cd96 37 double xtr,ytr,y1tr,x1tr,ztr,z1tr,z2tr,yabstr,yabs1tr,yabs2tr,ktr;
Socrates 12:100cbba6cd96 38 double xbr,ybr,y1br,x1br,zbr,z1br,z2br,yabsbr,yabs1br,yabs2br,kbr;
Socrates 12:100cbba6cd96 39 double xtl,ytl,y1tl,x1tl,ztl,z1tl,z2tl,yabstl,yabs1tl,yabs2tl,ktl;
Socrates 12:100cbba6cd96 40 double xbl,ybl,y1bl,x1bl,zbl,z1bl,z2bl,yabsbl,yabs1bl,yabs2bl,kbl;
Socrates 12:100cbba6cd96 41 double zx,zy;
Socrates 15:ab236d7c32d2 42 int xdir;
Socrates 15:ab236d7c32d2 43 int ydir;
Socrates 8:43cce9f7a006 44
Socrates 8:43cce9f7a006 45 x1tr=0; y1tr=0; z1tr=0; z2tr=0; yabs1tr=0; yabs2tr=0;
Socrates 8:43cce9f7a006 46 x1br=0; y1br=0; z1br=0; z2br=0; yabs1br=0; yabs2br=0;
Socrates 8:43cce9f7a006 47 x1tl=0; y1tl=0; z1tl=0; z2tl=0; yabs1tl=0; yabs2tl=0;
Socrates 8:43cce9f7a006 48 x1bl=0; y1bl=0; z1bl=0; z2bl=0; yabs1bl=0; yabs2bl=0;
Socrates 9:006f34c9f750 49 zx=0; zy=0;
Socrates 15:ab236d7c32d2 50 xdir=0; ydir=0;
Socrates 2:3dab90d3aac2 51
Socrates 6:27a4e8d9ddac 52 //High pass, 35Hz, 1e
Socrates 6:27a4e8d9ddac 53 numh1=0.900575535279376;
Socrates 6:27a4e8d9ddac 54 numh2=-0.900575535279376;
Socrates 2:3dab90d3aac2 55 //denh1=1;
Socrates 6:27a4e8d9ddac 56 denh2=-0.801151070558751;
Socrates 6:27a4e8d9ddac 57
Socrates 6:27a4e8d9ddac 58 //Low pass, 2 Hz, 2e orde
Socrates 4:513c33bba011 59 numl1=0.391302053991682*pow(10.0,-4.0);
Socrates 4:513c33bba011 60 numl2=0.782604107983365*pow(10.0,-4.0);
Socrates 4:513c33bba011 61 numl3=0.391302053991682*pow(10.0,-4.0);
Socrates 2:3dab90d3aac2 62 //denl1=1;
Socrates 4:513c33bba011 63 denl2=-1.982228929792529;
Socrates 4:513c33bba011 64 denl3=0.982385450614126;
Socrates 0:b13a317308d1 65 pc.baud(115200);
Socrates 0:b13a317308d1 66
Socrates 0:b13a317308d1 67 while(1) {
Socrates 13:e0e9fda0e9a1 68 while(looptimerflag != true);{
Socrates 13:e0e9fda0e9a1 69 }
Socrates 0:b13a317308d1 70 looptimerflag = false;
Socrates 6:27a4e8d9ddac 71
Socrates 8:43cce9f7a006 72 ktr=emgtr.read();
Socrates 8:43cce9f7a006 73 xtr=(ktr-0.5)*2.0;
Socrates 8:43cce9f7a006 74 ytr=xtr*numh1+x1tr*numh2-y1tr*denh2;
Socrates 8:43cce9f7a006 75 yabstr=abs(ytr);
Socrates 8:43cce9f7a006 76 ztr=yabstr*numl1+yabs1tr*numl2+yabs2tr*numl3-z1tr*denl2-z2tr*denl3;
Socrates 8:43cce9f7a006 77 x1tr=xtr; y1tr=ytr; z2tr=z1tr; z1tr=ztr; yabs2tr=yabs1tr; yabs1tr=yabstr;
Socrates 1:34202d107458 78
Socrates 8:43cce9f7a006 79 kbr=emgbr.read();
Socrates 8:43cce9f7a006 80 xbr=(kbr-0.5)*2.0;
Socrates 8:43cce9f7a006 81 ybr=xbr*numh1+x1br*numh2-y1br*denh2;
Socrates 8:43cce9f7a006 82 yabsbr=abs(ybr);
Socrates 8:43cce9f7a006 83 zbr=yabsbr*numl1+yabs1br*numl2+yabs2br*numl3-z1br*denl2-z2br*denl3;
Socrates 8:43cce9f7a006 84 x1br=xbr; y1br=ybr; z2br=z1br; z1br=zbr; yabs2br=yabs1br; yabs1br=yabsbr;
Socrates 6:27a4e8d9ddac 85
Socrates 8:43cce9f7a006 86 ktl=emgtl.read();
Socrates 8:43cce9f7a006 87 xtl=(ktl-0.5)*2.0;
Socrates 8:43cce9f7a006 88 ytl=xtl*numh1+x1tl*numh2-y1tl*denh2;
Socrates 8:43cce9f7a006 89 yabstl=abs(ytl);
Socrates 8:43cce9f7a006 90 ztl=yabstl*numl1+yabs1tl*numl2+yabs2tl*numl3-z1tl*denl2-z2tl*denl3;
Socrates 8:43cce9f7a006 91 x1tl=xtl; y1tl=ytl; z2tl=z1tl; z1tl=ztl; yabs2tl=yabs1tl; yabs1tl=yabstl;
Socrates 5:1a1ce2f5cb66 92
Socrates 8:43cce9f7a006 93 kbl=emgbl.read();
Socrates 8:43cce9f7a006 94 xbl=(kbl-0.5)*2.0;
Socrates 8:43cce9f7a006 95 ybl=xbl*numh1+x1bl*numh2-y1bl*denh2;
Socrates 8:43cce9f7a006 96 yabsbl=abs(ybl);
Socrates 8:43cce9f7a006 97 zbl=yabsbl*numl1+yabs1bl*numl2+yabs2bl*numl3-z1bl*denl2-z2bl*denl3;
Socrates 8:43cce9f7a006 98 x1bl=xbl; y1bl=ybl; z2bl=z1bl; z1bl=zbl; yabs2bl=yabs1bl; yabs1bl=yabsbl;
Socrates 8:43cce9f7a006 99
Socrates 15:ab236d7c32d2 100 zx=(zbr*3.5);
Socrates 6:27a4e8d9ddac 101
Socrates 13:e0e9fda0e9a1 102 //if (ztl>zbl) {
Socrates 13:e0e9fda0e9a1 103 // zy=ztl*5.0;
Socrates 13:e0e9fda0e9a1 104 // ydir=0;
Socrates 13:e0e9fda0e9a1 105 //} else {
Socrates 13:e0e9fda0e9a1 106 // zy=zbl*5.0;
Socrates 13:e0e9fda0e9a1 107 // ydir=1;
Socrates 13:e0e9fda0e9a1 108 //}
Socrates 8:43cce9f7a006 109
Socrates 8:43cce9f7a006 110 if (zx>1.0) {
Socrates 9:006f34c9f750 111 zx=0.99999;
Socrates 8:43cce9f7a006 112 }
Socrates 8:43cce9f7a006 113 if (zy>1.0) {
Socrates 9:006f34c9f750 114 zy=0.99999;
Socrates 8:43cce9f7a006 115 }
Socrates 8:43cce9f7a006 116
Socrates 15:ab236d7c32d2 117 //if (zx<0.20){
Socrates 15:ab236d7c32d2 118 //zx=0;
Socrates 15:ab236d7c32d2 119 //}
Socrates 11:28a196a3d898 120 if (zy<0.20){
Socrates 9:006f34c9f750 121 zy=0;
Socrates 9:006f34c9f750 122 }
Socrates 9:006f34c9f750 123
Socrates 15:ab236d7c32d2 124 if ((ztr>(zbr+0.1)) && dirflag == true) {
Socrates 15:ab236d7c32d2 125 dirflag = false;
Socrates 15:ab236d7c32d2 126 xdir ^= 1;
Socrates 15:ab236d7c32d2 127 dirtimeout.attach(tricheck,1.5);
Socrates 15:ab236d7c32d2 128 }
Socrates 15:ab236d7c32d2 129 //motordir1.write(xdir);
Socrates 15:ab236d7c32d2 130 //motordir2.write(ydir);
Socrates 15:ab236d7c32d2 131
Socrates 11:28a196a3d898 132 pwm_x.write(abs(zx));
Socrates 11:28a196a3d898 133 pwm_y.write(abs(zy));
Socrates 15:ab236d7c32d2 134 pc.printf("EMGRechts: %f, EMGLinks: %f, Richting: %d \n\r",zbr*3.0,ztr*3.0,xdir);
Socrates 0:b13a317308d1 135 }
Socrates 0:b13a317308d1 136 }