タコ 腕

Dependencies:   2017NHKpin_config FEP ikarashiMDC

Fork of NHK2017_octopus2 by NagaokaRoboticsClub_mbedTeam

bot/bot.cpp

Committer:
uchitake
Date:
2017-09-06
Revision:
5:16ea97725085
Parent:
4:1073deb368df
Child:
6:fe9767a50891

File content as of revision 5:16ea97725085:

#include "bot.h"

Bot::Bot() :
    PIDC(), pad(XBee1TX, XBee1RX, ADDR),
    motor(MDSDA, MDSCL, solenoidPin),
    led({DebugLED1, DebugLED2, DebugLED3, DebugLED4})
    ,debugSerial(USBTX, USBRX, 11520)
{
    motor.goXY(0, 0, 0);
    motor.moveSlider(0);
    motor.destroy(0);
    motor.swing(0);
    motor.shakeHead(0);

    // led[0] = 1;
    // led[1] = 1;
    // led[2] = 1;
}

void Bot::confirmAll()
{
    suc = pad.receiveState();
    // PIDC::confirm();
    if(!suc) {
        motor.goXY(0, 0, 0);
        motor.moveSlider(0);
        motor.destroy(0);
        motor.swing(0);
        motor.shakeHead(0);
    }
}

void Bot::controllDrive()
{
    if(suc) {
        if(pad.getNorm(1) > 0.5) {
            PIDC::PID::setSetPoint((pad.getRadian(1) - M_PI / 2) * (180.0 / M_PI));
            PIDC::confirm();
        }
        motor.goXY(pad.getStick(0) / 2.0,-pad.getStick(1) /2.0, PIDC::co);
    } else {
        motor.goXY(0, 0, 0);
    }
}

void Bot::controllDrive2()
{
    float moment = 0;
    static float beforestick = pad.getStick(2);
    if(!pad.getButton2(2)) {
        PIDC::resetOffset2();
        led[3] = 1;
    }

    if((beforestick >= 0.5 && pad.getStick(2) < 0.5) || (beforestick <= -0.5 && pad.getStick(2) > -0.5)) {
        PIDC::PID::setSetPoint(0.0);
        PIDC::resetOffset();
    }

    if(pad.getStick(2) > 0.5 || pad.getStick(2) < -0.5) {
        moment = pad.getStick(2) / 4.0;
        PIDC::confirm();
    }
    if(fabs(pad.getStick(2)) < 0.5) {
        PIDC::confirm();
        moment = PIDC::co;
    }

    if(suc) {
        motor.goCircular(pad.getNorm(0) / 2.0,pad.getRadian(0) - PIDC::initDegree2 / 10.0 * (M_PI / 180.0) + M_PI, moment);
    } else {
        motor.goXY(0, 0, 0);
    }
    beforestick = pad.getStick(2);
    debugSerial.printf("%d\n\r", PIDC::initDegree);
}

void Bot::controllMech()
{
    if(suc) {
//        if(!pad.getButton1(0)) motor.moveSlider(ARM_MAX_SPEED);
//        if(!pad.getButton1(1)) motor.moveSlider(-ARM_MAX_SPEED);
//        if(pad.getButton1(0) && pad.getButton1(1)) motor.moveSlider(0);
//
//        if(!pad.getButton1(3)) motor.shakeHead(ARM_MAX_SPEED);
//        if(!pad.getButton1(4)) motor.shakeHead(-ARM_MAX_SPEED);
//        if(pad.getButton1(3) && pad.getButton1(4)) motor.shakeHead(0);
//
        if(!pad.getButton1(5)) motor.swing(0.6);
        if(!pad.getButton1(6)) motor.swing(-0.6);
        if(pad.getButton1(5) && pad.getButton1(6)) motor.swing(0);

//
//        if(!pad.getButton1(2)) {
//            motor.destroy(DESTROY_MAX_SPEED);
//        } else {
//            motor.destroy(0);
//        }
//
       if(!pad.getButton2(1)) motor.release();
   } else {
       motor.moveSlider(0);
       motor.destroy(0);
       motor.swing(0);
       motor.shakeHead(0);
   }
}


void Bot::calibrate()
{
    if(suc && !pad.getButton2(0) && !pad.getButton2(1)) {
        PIDC::calibration(HMC6352_ENTER_CALIB);
        motor.goXY(0, 0, 0.4);
        wait(5.0);
        motor.goXY(0, 0, 0);
        PIDC::calibration(HMC6352_EXIT_CALIB);
    }
}