タコ 駆動側 

Dependencies:   2017NHKpin_config FEP R1307 PID ikarashiMDC omni_wheel

Fork of NHK2017_octopus2 by NagaokaRoboticsClub_mbedTeam

bot/bot.cpp

Committer:
uchitake
Date:
2017-09-06
Revision:
6:fe9767a50891
Parent:
5:16ea97725085
Child:
9:39be1525dfe0

File content as of revision 6:fe9767a50891:

#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);
}

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

void Bot::controllDrive()
{
    if(receiveSuccessed) {
        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::calculationResult
        );
    } else {
        motor.goXY(0, 0, 0);
    }
}

void Bot::controllDrive2()
{
    float moment = 0;
    static float beforestick = pad.getStick(2);

    if(!pad.getButton2(2)) {
        PIDC::resetPlaneOffset();
    }

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

    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::calculationResult;
    }

    if(receiveSuccessed) {
        motor.goCircular(
            pad.getNorm(0) / 2.0,
            pad.getRadian(0) - PIDC::planeCurrentDegree / 10.0 * (M_PI / 180.0) + M_PI,
            moment
        );
    } else {
        motor.goXY(0, 0, 0);
    }
    beforestick = pad.getStick(2);
}

void Bot::controllMech()
{
    if(receiveSuccessed) {
//        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(receiveSuccessed &&
         !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);
    }
}