ElapsedTime - OnBot Java

ElapsedTime'e Giriş Gamepad'imizi kullanırken, programımız çalışırken robotumuzla aktif olarak iletişim kurabiliriz. Robotumuz, girişimizi bekler ve buna göre hareket eder, ta ki başka bir komut verilene kadar. Ancak bu her zaman böyle olmayabilir, örneğin FTC yarışmasının otonom dönemi sırasında.

Robotumuz bazı şeyleri kendi başına algılayacak kadar akıllıdır, ancak ona neyi araması gerektiğini öğretmek için yardıma ihtiyacımız var. Sonunda, robotunuzun bir kamera ve makine öğrenimi veya yön algılamak için IMU kullanarak gezinmesini sağlayabilirsiniz, ancak şimdilik SDK'nın sunduğu yerleşik özelliklerden biriyle başlayalım: ElapsedTime.

Bir zamanlayıcı düşündüğünüzde aklınıza ne geliyor? Bir kronometre mi? Telefonunuz mu? Belki mikrodalga veya fırındaki zamanlayıcı? Zamanlayıcılar genellikle iki ana kategoriye ayrılır: artan (count up) ve azalan (count down). Bu iki farkı, bir koşucunun 100 metrelik yarışı ne kadar hızlı koştuğunu takip etmekle, yemeğimizin ne kadar süre daha pişmesi gerektiğini bilmemiz gerektiğini karşılaştırarak düşünebilirsiniz.

ElapsedTime, bir artan zamanlayıcıdır. Bir etkinliğin başlangıcından itibaren geçen süreyi kaydeder, tıpkı bir kronometrenin başlatılması gibi. Bu durumda, kod içinde zamanlayıcı oluşturulduğunda veya sıfırlandığında geçen zamanı ifade eder.

Daha fazla bilgi için, bu öğreticinin dışında ElapsedTime nesnesine dair FTC Java Belgelerine göz atabilirsiniz!

Hızlı Bağlantılar

  • ElapsedTime Kurulumu

  • ElapsedTime Mantığı

  • ElapsedTime - Birden Fazla Hareket

  • Tam Kod Örneği


Tam Kod Örneği Bu program, Hello Robot'ın başında oluşturduğumuz aynı yapılandırma dosyasını kullanır. Bu bölümde bazı donanımlar kullanılmayabilir.

Kopyala:

package org.firstinspires.ftc.teamcode;

import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
import com.qualcomm.robotcore.hardware.Blinker;
import com.qualcomm.robotcore.hardware.Servo;
import com.qualcomm.robotcore.hardware.TouchSensor;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.eventloop.opmode.Disabled;
import com.qualcomm.robotcore.hardware.DcMotor;
import com.qualcomm.robotcore.hardware.DcMotorSimple;
import com.qualcomm.robotcore.util.ElapsedTime;

@TeleOp

public class HelloRobot_ElapsedTime extends LinearOpMode {
    private Blinker control_Hub;
    private DcMotor arm;
    private DcMotor leftmotor;
    private DcMotor rightmotor;
    private DcMotor test_motor;
    private Servo test_servo;
    private TouchSensor test_touch;
    private ElapsedTime runtime = new ElapsedTime();  // Zamanlayıcıyı tanımlıyoruz

    @Override
    public void runOpMode() {
        control_Hub = hardwareMap.get(Blinker.class, "Control Hub");
        arm = hardwareMap.get(DcMotor.class, "arm");
        leftmotor = hardwareMap.get(DcMotor.class, "leftmotor");
        rightmotor = hardwareMap.get(DcMotor.class, "rightmotor");
        test_motor = hardwareMap.get(DcMotor.class, "test_motor");
        test_servo = hardwareMap.get(Servo.class, "test_servo");
        test_touch = hardwareMap.get(TouchSensor.class, "test_touch");

        rightmotor.setDirection(DcMotorSimple.Direction.REVERSE);
        telemetry.addData("Status", "Initialized");
        telemetry.update();
        
        // Oyun başlamadan önce bekleyin (sürücü PLAY'e basar)
        waitForStart();
        runtime.reset();  // Zamanlayıcıyı sıfırlıyoruz
        
        // 3 saniye boyunca robotu ileri hareket ettiriyoruz
        while (opModeIsActive() && (runtime.seconds() <= 3.0)) {
            leftmotor.setPower(1);
            rightmotor.setPower(1);
            telemetry.addData("Phase 1: Seconds", runtime.seconds());  // Geçen süreyi gösteriyoruz
            telemetry.update();
        }

        runtime.reset();  // Zamanlayıcıyı sıfırlıyoruz
        
        // 3 saniye boyunca robotu geri hareket ettiriyoruz
        while (opModeIsActive() && (runtime.seconds() <= 3.0)) {
            leftmotor.setPower(-1);
            rightmotor.setPower(-1);
            telemetry.addData("Phase 2: Seconds", runtime.seconds());  // Geçen süreyi gösteriyoruz
            telemetry.update();
        }
    }
}

Bu programda, ElapsedTime nesnesini kullanarak robotun iki aşamalı hareketini belirli bir süre boyunca yapmasını sağlıyoruz. İlk olarak 3 saniye boyunca ileri hareket eder, ardından başka bir 3 saniye boyunca geri hareket eder. runtime.seconds() fonksiyonu, geçen zamanı saniye cinsinden hesaplayarak, her aşamada geçirdiği süreyi ekrana yazdırır.


Last updated