mecha

Dependents:   2019NHK_A_manual_red 2019NHK_A_manual_red 2019NHK_A_manual_blue

towelest.cpp

Committer:
ec30109b
Date:
2019-09-17
Revision:
3:63bb3e19c7eb
Parent:
2:623fb33351af
Child:
4:416d194973a3

File content as of revision 3:63bb3e19c7eb:

#include "towelest.h"

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 = 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;
    
    pid.setInputLimits(-1800, 1800);
    pid.setOutputLimits(-0.6,0.6);
    pid.setBias(0.0);
    pid.setMode(AUTO_MODE);
    pid.setSetPoint(0);

}

void towelest::open()
{
    if(LimitSW0.read() == 1){
        Motor[0]->setSpeed(0);
        Motor[1]->setSpeed(0);
    }else{
        Motor[0]->setSpeed(-0.2);
        Motor[1]->setSpeed(0);
    }
}
void towelest::close()
{
    Motor[0]->setSpeed(0.2);
    Motor[1]->setSpeed(0);
}
    
void towelest::lift()
{
    if(LimitSW1.read() == 1){
        Motor[0]->setSpeed(0);
        Motor[1]->setSpeed(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();
    time = timer.read();
    if(time <= 5) {
        pid.setSetPoint(-800);
    } else {
        pid.setSetPoint(0);
        timer.stop();
        timer.reset();
    }
}

void towelest::setPulse(int Loli)
{
    loli = Loli;
}

void towelest::pid_compute()
{
    pid.setProcessValue(loli);
    compute = pid.compute();
    Motor[2]->setSpeed(compute);
        //pc.printf("%d  %d  %f \n\r",Limit1,Limit2,Limit3,RotationDistance);
}