#include "ZaphodRobot.h" #include "ZaphodBase.h" ZaphodRobot::ZaphodRobot(): ControlSystem(new JoystickController()), shooter(new ZaphodShooter()), collector(new ZaphodCollector()), compressorSystem(new ZaphodCompressor()) { left1 = new Jaguar(DRIVE_LEFT_SIDECAR, DRIVE_LEFT_MOTOR_ONE); left2 = new Jaguar(DRIVE_LEFT_SIDECAR, DRIVE_LEFT_MOTOR_TWO); left3 = new Jaguar(DRIVE_LEFT_SIDECAR, DRIVE_LEFT_MOTOR_THREE); right1 = new Jaguar(DRIVE_RIGHT_SIDECAR, DRIVE_RIGHT_MOTOR_ONE); right2 = new Jaguar(DRIVE_RIGHT_SIDECAR, DRIVE_RIGHT_MOTOR_ONE); right3 = new Jaguar(DRIVE_RIGHT_SIDECAR, DRIVE_RIGHT_MOTOR_ONE); frontSonarLeftD = new DigitalOutput(SONAR_LEFT_DIO_SIDECAR, SONAR_FRONT_LEFT_DIO); frontSonarRightD = new DigitalOutput(SONAR_RIGHT_DIO_SIDECAR, SONAR_FRONT_RIGHT_DIO); rearSonarLeftD = new DigitalOutput(SONAR_LEFT_DIO_SIDECAR, SONAR_REAR_LEFT_DIO); rearSonarRightD = new DigitalOutput(SONAR_RIGHT_DIO_SIDECAR, SONAR_REAR_RIGHT_DIO); frontSonarLeftA = new AnalogChannel(SONAR_FRONT_LEFT_ANA); frontSonarRightA = new AnalogChannel(SONAR_FRONT_RIGHT_ANA); rearSonarLeftA = new AnalogChannel(SONAR_REAR_LEFT_ANA); rearSonarRightA = new AnalogChannel(SONAR_REAR_RIGHT_ANA); } //Functions to get sonar values and return as INCH values float ZaphodRobot::getFrontSonar() { frontSonarLeftD->Set(1); frontSonarLeftV = (frontSonarLeftA->GetAverageVoltage()/0.00488f)/2.54f; frontSonarLeftD->Set(0); //Probably need some sort of delay here frontSonarRightD->Set(1); frontSonarRightV = (frontSonarRightA->GetAverageVoltage()/0.00488f)/2.54f; frontSonarRightD->Set(0); //Returns the average (useful for throwing out useless readings) return (frontSonarRightV+frontSonarLeftV)/2; } float ZaphodRobot::getRearSonar() { rearSonarLeftD->Set(1); rearSonarLeftV = (rearSonarLeftA->GetAverageVoltage()/0.00488f)/2.54f; rearSonarLeftD->Set(0); //Probably need some sort of delay here rearSonarRightD->Set(1); rearSonarRightV = (rearSonarRightA->GetAverageVoltage()/0.00488f)/2.54f; rearSonarRightD->Set(0); //Returns the average (useful for throwing out useless readings) return (rearSonarRightV+rearSonarLeftV)/2; } void driveRobot(float x, float y) { } //Main function used to handle periodic tasks on the robot void ZaphodRobot::handler() { //Periodic tasks that should be run by every loop ControlSystem->updateJoysticks(); shooter->updateShooterPosition(); //TODO Need to implement a timing system to not break the spike (this function doesn't run the compressor at the moment) compressorSystem->compressorSystemPeriodic(); collector->updateCollector(shooter->isShooting, shooter->getAngle()); //Button assignments to actions if(ControlSystem->leftJoystickValues[SHOOTER_FIRE]) { //TODO Needs a power input shooter->startShootingSequence(ControlSystem->throttle); } if(ControlSystem->rightJoystickValues[COLLECTOR_INTAKE]) { collector->collectBall(); } if(ControlSystem->rightJoystickValues[COLLECTOR_OUTTAKE]) { collector->releaseBall(); } if(ControlSystem->rightJoystickValues[COLLECTOR_EXTEND]) { compressorSystem->extendCollector(); } if(ControlSystem->rightJoystickValues[COLLECTOR_RETRACT]) { compressorSystem->retractCollector(); } }