2017ロボコンはやとブーメランプログラム
Dependencies: PID QEI ikarashiMDC recieveController omni
hayatoBoomerang.cpp
- Committer:
- WAT34
- Date:
- 2017-08-24
- Revision:
- 1:35e874e10602
- Child:
- 2:aca690545ec9
File content as of revision 1:35e874e10602:
#include "hayatoBoomerang.h" boomerang::boomerang(Serial *serial_) { speedEncoder = new InteruputIn(SPEED_ENCODER); armEncoder= new InteruputIn(ARM_ENCODER); armLimit = new InteruptIn(ARM_LIMIT); spiralLimit = new InteruptIn(SPIRAL_LIMIT); speedPID = new PID(SPEED_P,SPEED_I,SPEED_D,RATE); armPID = new PID(ARM_P,ARM_I,ARM_D,RATE); speedPID.setInputLimits(0.0,6000.0); speedPID.setOutputLimits(0,1.0); armPID.setInputLimits(0,90) speedPID.setOutputLimits(-1.0,1.0); speedPID.setBias(0); speedPID.setMode(AUTO); speedPID.setSetPoint(0); armPID.setBias(0); armPID.setSetPoint(0); armPID.setMode(AUTO); armMotor = new IkarashiMDC(&rscs,0,0,serial_); shootingMotor = new IkarashiMDC(&rscs,0,1,serial_); motorRPM = 0; armEncoder = new QEI(ARM_ENCODER_A,ARM_ENCODER_B,NC,720,X4_ENCODING); speedEncoder.rise(&shootingEncoderCount); speedEncoder.enable_irq(); armLimit.rise(&endCalibration); armLimit.disable_irq(); } void boomerang::shootingEncoderCount() { motorRPM = (1.0/rpmCalc.read())*60; rpmCalc.reset(); rpmCalc.start(); } void boomerang::setTargetMotorSpeed(const int& targetRPM) { speedPID.setSetPoint(targetRPM); } void boomerang::setTargetArmAngle(const int& targetArmAngle) { armPID.setSetPoint(targetArmAngle); } void booomerang::update() { armMotor.setSpeed(armPID.getRealOutput()); shootingMotor.setSpeed(speedPID.getRealOutput()); } void booomerang::fire() { beltMotor.setSpeed(0.4); beltTime.attach(beltStop,0.5); spiral.reload(); } void boomerang::beltStop() { beltMotor.setSpeed(0); } int boomerang::calibrateArm() { if(armLimit == true) return 1; armLimit.enable_irq(); armMotor.setSpeed(0.2); return 0; } void boomerang::endCalibration() { armEncoder.reset() armLimit.disable_irq(); armPID.setSetPoint(10); }