Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Copyright (c) 2016 Robert Atkinson
- All rights reserved.
- Redistribution and use in source and binary forms, with or without modification,
- are permitted (subject to the limitations in the disclaimer below) provided that
- the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list
- of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
- Neither the name of Robert Atkinson nor the names of his contributors may be used to
- endorse or promote products derived from this software without specific prior
- written permission.
- NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS
- LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESSFOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- package org.firstinspires.ftc.teamcode;
- import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
- import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
- import com.qualcomm.robotcore.hardware.DcMotor;
- import com.qualcomm.robotcore.util.ElapsedTime;
- import com.qualcomm.robotcore.util.Range;
- /**
- * This file contains an minimal example of a Linear "OpMode". An OpMode is a 'program' that runs in either
- * the autonomous or the teleop period of an FTC match. The names of OpModes appear on the menu
- * of the FTC Driver Station. When an selection is made from the menu, the corresponding OpMode
- * class is instantiated on the Robot Controller and executed.
- *
- * This particular OpMode just executes a basic Arcade Drive Teleop for a PushBot
- * It includes all the skeletal structure that all linear OpModes contain.
- *
- * Use Android Studios to Copy this Class, and Paste it into your team's code folder with a new name.
- * Remove or comment out the @Disabled line to add this opmode to the Driver Station OpMode list
- */
- @TeleOp(name="Arcade Drive 2 Motor", group="Linear Opmode") // @Autonomous(...) is the other common choice
- public class ArcadeDrive2MotorOneJoystick extends LinearOpMode
- {
- /* Declare OpMode members. */
- private ElapsedTime runtime = new ElapsedTime();
- DcMotor leftMotor = null;
- DcMotor rightMotor = null;
- @Override
- public void runOpMode() throws InterruptedException
- {
- telemetry.addData("Status", "Initialized");
- telemetry.update();
- /* eg: Initialize the hardware variables. Note that the strings used here as parameters
- * to 'get' must correspond to the names assigned during the robot configuration
- * step (using the FTC Robot Controller app on the phone).
- */
- leftMotor = hardwareMap.dcMotor.get("left motor");
- rightMotor = hardwareMap.dcMotor.get("right motor");
- // eg: Set the drive motor directions:
- // "Reverse" the motor that runs backwards when connected directly to the battery
- leftMotor.setDirection(DcMotor.Direction.REVERSE); // Set to REVERSE if using AndyMark motors
- rightMotor.setDirection(DcMotor.Direction.FORWARD);// Set to FORWARD if using AndyMark motors
- // Wait for the game to start (driver presses PLAY)
- waitForStart();
- runtime.reset();
- // run until the end of the match (driver presses STOP)
- while (opModeIsActive())
- {
- telemetry.addData("Status", "Run Time: " + runtime.toString());
- float throttle = -gamepad1.left_stick_y;
- float direction = -gamepad1.left_stick_x;
- float leftPower = scaleInput(throttle + direction);
- float rightPower = scaleInput(throttle - direction);
- leftMotor.setPower(leftPower);
- rightMotor.setPower(rightPower);
- telemetry.addData("Left",leftPower);
- telemetry.addData("Right",rightPower);
- // Show joystick information as some other illustrative data
- telemetry.addLine("left joystick | ")
- .addData("x", gamepad1.left_stick_x)
- .addData("y", gamepad1.left_stick_y);
- telemetry.addLine("right joystick | ")
- .addData("x", gamepad1.right_stick_x)
- .addData("y", gamepad1.right_stick_y);
- telemetry.update();
- idle(); // Always call idle() at the bottom of your while(opModeIsActive()) loop
- }
- }
- /** Scales the input so the commanded power will be within a certain range. Avoids stalls and robot moving too fast. */
- private float scaleInput(float input)
- {
- final float MIN_INPUT = 0.15f; //15% power
- final float MAX_INPUT = 0.75f; //75% power
- float retVal = 0.0f;
- if (Math.abs(input) >= MIN_INPUT)
- {
- retVal = input >= 0 ? Range.clip(input, MIN_INPUT, MAX_INPUT) : Range.clip(input, -MAX_INPUT, -MIN_INPUT) ;
- }
- return retVal;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement