![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
2017ロボコンはやとブーメランプログラム
Dependencies: PID QEI ikarashiMDC recieveController omni
Diff: hayatoBoomerang.cpp
- Revision:
- 4:c2b09fa31492
- Parent:
- 2:aca690545ec9
- Child:
- 6:0bee4b2bb400
--- a/hayatoBoomerang.cpp Thu Aug 24 20:51:12 2017 +0900 +++ b/hayatoBoomerang.cpp Tue Aug 29 17:00:05 2017 +0900 @@ -6,7 +6,8 @@ speedEncoder = new InterruptIn(SPEED_ENCODER); armEncoder= new QEI(NC,NC,NC,720); - armLimit = new InterruptIn(ARM_LIMIT); + armLimit = new InterruptIn(NC); + //armLimit->mode(PullUp); rscs = new DigitalOut(NC); @@ -31,13 +32,18 @@ spiralMotor = new ikarashiMDC(rscs,0,2,SM,serial_); beltMotor = new ikarashiMDC(rscs,0,3,SM,serial_); + armMotor->setSpeed(0); + shootingMotor->setSpeed(0); + spiralMotor->setSpeed(0); + beltMotor->setSpeed(0); + spiral = new Spiral(spiralMotor); motorRPM = 0; speedEncoder->rise(this,&boomerang::shootingEncoderCount); speedEncoder->enable_irq(); - armLimit->rise(this,&boomerang::endCalibration); + armLimit->fall(this,&boomerang::endCalibration); armLimit->disable_irq(); } @@ -61,22 +67,31 @@ void boomerang::update() { - armMotor->setSpeed(armPID->compute()); - shootingMotor->setSpeed(speedPID->compute()); + if(!calibrating) + // armMotor->setSpeed(armPID->compute()); + // shootingMotor->setSpeed(speedPID->compute()); + beltMotor->setSpeed(beltSpeed); } bool boomerang::fire() { - beltMotor->setSpeed(0.4); - beltTime.attach(this,&boomerang::beltStop,0.5); + if(firing) + return false; + firing = true; + beltSpeed=0.4; + beltTime.attach(callback(this,&boomerang::beltStop),0.5); spiral->rotate(); + boomerang::update(); return true; } void boomerang::beltStop() { - beltMotor->setSpeed(0); + beltSpeed = 0; + firing = false; + boomerang::update(); + } int boomerang::calibrateArm() @@ -84,6 +99,7 @@ if(armLimit->read() == true) return 1; + calibrating = true; armLimit->enable_irq(); armMotor->setSpeed(0.2); return 0; @@ -91,6 +107,7 @@ void boomerang::endCalibration() { + calibrating = false; armEncoder->reset(); armLimit->disable_irq(); armPID->setSetPoint(10);