コントローラーの入力を元にモーターの回転速度を変える
前のページでは、モーターを一定のスピードで回しました。
今回は、コントローラーからの入力を元に、スピードが変わる様に改変してみましょう。
コントローラーのボタン
コントローラーは1と2の2つ接続することができ、各ボタンの名称・配置は以下の様になっています。
出典:gm0
今回は、左のスティックの上下(Left Joystick Y)を使いたいと思います。
コントローラーからの入力を受け取る
まずは、コントローラーが正常に接続されていることをDriver Hubから確認しましょう。
今回はA(1)のコントーローラー差し込み口に挿したコントローラーを使うので、User 1が光っていることを確認します。
前回のプログラムを修正する
前回のプログラムでは、以下の様に0.1という値を直にいれていました。
motor.setPower(0.1);
それを、コントローラーからの値に変更します。
motor.setPower(gamepad1.left_stick_y);
コントローラーのスティック(gamepad1.left_stick_y)の値はモーターが期待している-1.0〜1.0を返してくれるので、特に値の変換などはする必要はあります。
プログラムが書けたら、実行してみて、スティックの値に応じてモーターの回転速度が変化すれば、成功です。
今回のプログラム(全体)
package org.firstinspires.ftc.teamcode;
import com.qualcomm.robotcore.eventloop.opmode.OpMode;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.DcMotor;
@TeleOp(name = "Main OpMode", group = "Main")
public class Main extends OpMode {
//ここにモーターの定義を行う
DcMotor motor;
/*
* ドライバーがINITを押した際に、1度だけ実行されます。
*/
@Override
public void init() {
motor = hardwareMap.get(DcMotor.class, "motor");
telemetry.addData("Status", "Initialized");
}
/*
* ドライバーがINITを押した後、PLAYを押す前に繰り返し実行するコード
*/
@Override
public void init_loop() {
}
/*
* プログラム開始時に一度だけ実行される
*/
@Override
public void start() {
telemetry.addData("Status", "Started");
}
/*
* Enableの間ずっと実行される
* while (opModeIsActive()) と同じ
*/
@Override
public void loop() {
motor.setPower(gamepad1.left_stick_y);
}
/*
* コードが停止されるときに一度だけ実行される
*/
@Override
public void stop() {
telemetry.addData("Status", "Stopped");
}
}
No Comments