mecha
Dependents: 2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue
Diff: towelest.cpp
- Revision:
- 3:63bb3e19c7eb
- Parent:
- 2:623fb33351af
- Child:
- 4:416d194973a3
--- a/towelest.cpp Fri Sep 13 04:38:47 2019 +0000 +++ b/towelest.cpp Tue Sep 17 02:10:43 2019 +0000 @@ -1,21 +1,20 @@ #include "towelest.h" -towelest::towelest(): - serial(mdTX,mdRX,115200), - pid(4.0, 0, 0.001, 0.01), - LimitSW1(schmitt_trigger_0), - LimitSW2(schmitt_trigger_1) +towelest::towelest(Serial* RS485,int address,PinName Limit0,PinName Limit1,PinName Limit2): +pid(4.0, 0, 0.001, 0.01), +LimitSW0(Limit0), +LimitSW1(Limit1), +LimitSW2(Limit2) { - Motor[0] = new ikarashiMDC(2,0,SM,&serial); - Motor[1] = new ikarashiMDC(2,2,SM,&serial); - Motor[2] = new ikarashiMDC(2,1,SM,&serial); - + Motor = new ikarashiMDC*[3]; + Motor[0] = new ikarashiMDC(address,0,SM,RS485); + Motor[1] = new ikarashiMDC(address,1,SM,RS485); + Motor[2] = new ikarashiMDC(address,2,SM,RS485); + Motor[0]->braking = true; Motor[1]->braking = true; Motor[2]->braking = true; - - thread.start(callback(this, &towelest::loop)); - + pid.setInputLimits(-1800, 1800); pid.setOutputLimits(-0.6,0.6); pid.setBias(0.0); @@ -26,10 +25,10 @@ void towelest::open() { - if(LimitSW1.read() == 1) { + if(LimitSW0.read() == 1){ Motor[0]->setSpeed(0); Motor[1]->setSpeed(0); - } else if(LimitSW1.read() == 0) { + }else{ Motor[0]->setSpeed(-0.2); Motor[1]->setSpeed(0); } @@ -42,15 +41,26 @@ void towelest::lift() { - if(LimitSW2.read() == 1) { + if(LimitSW1.read() == 1){ Motor[0]->setSpeed(0); Motor[1]->setSpeed(0); - } else if(LimitSW2.read() == 0) { + }else{ Motor[0]->setSpeed(0); Motor[1]->setSpeed(0.8); } } +void towelest::descent() +{ + if(LimitSW2.read() == 1){ + Motor[0]->setSpeed(0); + Motor[1]->setSpeed(0); + }else{ + Motor[0]->setSpeed(0); + Motor[1]->setSpeed(-0.8); + } +} + void towelest::drop() { timer.start(); @@ -69,15 +79,12 @@ loli = Loli; } -void towelest::loop() +void towelest::pid_compute() { - while(true) { - pid.setProcessValue(loli); - compute = pid.compute(); - Motor[2]->setSpeed(compute); - Limit1 = LimitSW1.read(); - Limit2 = LimitSW2.read(); - //pc.printf("%d %d %f \n\r",Limit1,Limit2,RotationDistance); - } + pid.setProcessValue(loli); + compute = pid.compute(); + Motor[2]->setSpeed(compute); + //pc.printf("%d %d %f \n\r",Limit1,Limit2,Limit3,RotationDistance); } +