Announcement

Collapse
No announcement yet.

Servo problem

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Servo problem

    I am a newbie to java, but I've programmed in blocks before. My team decided to switch to java to increase our abilities. However I am having problems with my Servo program that causes a servo to rotate said amount of degrees when said button is pressed
    Below is my program and the error codes:
    /* Copyright (c) 2017 FIRST. 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 FIRST nor the names of its 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 FITNESS FOR 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.LinearOpMo de;
    import com.qualcomm.robotcore.hardware.Servo;
    import com.qualcomm.robotcore.eventloop.opmode.Autonomous ;
    import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
    import com.qualcomm.robotcore.eventloop.opmode.Disabled;
    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 Tank Drive Teleop for a two wheeled robot
    * 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
    */

    // run until the end of the match (driver presses STOP)

    public class RotateServoClaw extends LinearOpMode {

    public void runOpMode() {
    double tgtPower = 1.0 ;
    while (opModeIsActive()) {
    tgtPower = -this.gamepad1.left_stick_y;
    ;
    // check to see if we need to move the servo.
    if(gamepad1.y) {
    // move to 0 degrees.
    Servo.setPosition(0.0);
    } else if (gamepad1.x || gamepad1.b) {
    // move to 90 degrees.
    Servo.setPosition(0.5);
    } else if (gamepad1.a) {
    // move to 180 degrees.
    Servo.setPosition(1.0);
    }
    telemetry.addData("Servo Position", Servo.getPosition());
    telemetry.addData("Target Power", tgtPower);
    telemetry.addData("Motor Power", DcMotor.getPower());
    telemetry.addData("Status", "Running");


    }
    }
    }
    org/firstinspires/ftc/teamcode/RotateServoClaw.java line 71, column 14: ERROR: non-static method setPosition(double) cannot be referenced from a static context org/firstinspires/ftc/teamcode/RotateServoClaw.java line 74, column 14: ERROR: non-static method setPosition(double) cannot be referenced from a static context org/firstinspires/ftc/teamcode/RotateServoClaw.java line 76, column 46: ERROR: non-static method getPosition() cannot be referenced from a static context org/firstinspires/ftc/teamcode/RotateServoClaw.java line 78, column 45: ERROR: non-static method getPower() cannot be referenced from a static context

    Any suggestions? It is very possible that I made a rookie mistake and I would love all help/ critiques!!

  • #2
    The setPosition and getPosition methods are instance methods, not static methods. That means you need to call them using a specific Servo object. In your class, before the runOpMode method, declare a field of type Servo:

    Servo myServo = null;

    Then, at the beginning of your runOpMode method, create a Servo object and assign it to this variable:

    myServo = hardwareMap.servo.get("my_servo");

    In your config file, name your Servo "my_servo" (without the quotes).

    Don't forget a call to

    ​​​​​​waitForStart() before your while loop.

    Then (for example), instead of Servo.setPosition(0.5), use myServo.setPosition(0.5).

    The getPower method of DcMotor is also an instance method. Since you're not operating a DcMotor here, just get rid of that statement.

    Comment

    Working...
    X