Bir Gamepad ile Servo Kullanmak

Bir Gamepad ile Servo Programlama

Servoyu otomatik olarak döndürebilmek, özellikle otonom bir program yazarken inanılmaz derecede faydalı olabilir. Ancak, pozisyonları gamepad’imle kontrol etmek istersem ne olur?

Hadi kodumuza nasıl giriş komutları ekleyebileceğimize bir bakalım!

Bu örnekte, bilinen durum pozisyon 0 olarak kalacaktır, böylece başlatmadan sonra servo, hareket aralığının -135 derece pozisyonunda olacaktır. Aşağıdaki liste, hangi düğmenin hangi servo pozisyonuna karşılık geldiğini gösterir:

Düğme

Derece Pozisyonu

Kod Pozisyonu

Y/Triangle

-135

0

X/Square

0

0.5

B/Circle

0

0.5

A/Cross

135

1

Not: Eğer bir PS4 kontrol cihazı kullanıyorsanız, Blocks'daki açılır menüden uygun düğmeyi seçmek, kodunuza geri döndüğünüzde takip etmesi daha kolay olabilir. Blocks ile programlama sırasında düğmeler birbiriyle değiştirilebilir (örneğin, kodda Y = kontrol cihazında Triangle).


If/Else Deyimlerine Giriş

Programlamada en yaygın kullanılan mantık ifadelerinden biri if/else deyimidir (diğer adıyla if/then ifadesi). En basit biçimiyle, robotumuza bir şey olup olmadığını kontrol etmesini söyleriz ve robotun zihninde cevap evet (doğru) ise, robot istenen işlemi yapar.

Hızlı Kontrol!

Bu bölümde, kontrol cihazımızdaki Y düğmesine basılırsa, "Servoyu pozisyon 0’a hareket ettir" sorusunu soracağız.

if (gamepad1.y) {
    test_servo.setPosition(0);
}

Eğer önceki ifade doğruysa (TRUE), servo pozisyon 0’a hareket edecektir. Ancak, cevap yanlış (FALSE) olursa (Y düğmesine basılmazsa) ne olacağını düşünün.


If/Else If Deyimleri

Bir if/else if deyimi, birden fazla koşullu ifadeyi alır. Eğer ilk koşul yanlış bulunursa, ikinci koşul analiz edilir.

if (gamepad1.y) {
    test_servo.setPosition(0);
} else if () {
    // Buraya ekleme yapın.
}

Hızlı Kontrol!

Mevcut mantık ifademize, kontrol cihazımızdaki A düğmesine basıldığında servoyu pozisyon 1’e hareket ettirme yeteneğini ekleyelim. Önce kendiniz deneyin, ardından aşağıdaki cevabı kontrol edin.

Yeni bloklar eklendiğinde, mantık ifademiz nasıl çalışacak?

Not: Eğer yapmadıysanız, yazdığımız kodu test edin! Önceki test_servo.setPosition(1); ifadesi hâlâ mevcutsa, kaldırılmalıdır.

Her iki düğmeye aynı anda basıldığında ne olur?


Mantık Operatörleri Ekleme

Daha önce servoyu pozisyon 0 ve 1’e hareket ettirme yeteneği ekledik. Ancak, pozisyon 0.5 ne olacak?

Bölümün başındaki gamepad tablosunda, iki düğmenin servoyu pozisyon 0.5’e hareket ettirebileceğini fark etmiş olabilirsiniz. Bu, bir mantık operatörü kullanma pratiği yapmamız içindir.

OnBot Java’da || "veya" anlamına gelir ve robotun iki şeyden birinin doğru olup olmadığını kontrol etmesine olanak tanır. Bu durumda, X veya B düğmesine basılıp basılmadığını kontrol eder.

if (gamepad1.y) {
    // pozisyon 0'a hareket ettir
    test_servo.setPosition(0);
} else if (gamepad1.x || gamepad1.b) {
    // pozisyon 0.5'e hareket ettir
    test_servo.setPosition(0.5);
} else if (gamepad1.a) {
    // pozisyon 1'e hareket ettir
    test_servo.setPosition(1);
}

Build Everything seçeneğini seçin ve programınızı test edin!


Tam Program

Aşağıda programın tam kodu verilmiştir:

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");

    test_servo.setPosition(0);

    telemetry.addData("Status", "Initialized");
    telemetry.update();

    // Oyun başlamadan önce bekle (sürücü PLAY'e basar)
    waitForStart();

    // Oyun sonlanana kadar çalıştır (sürücü STOP'a basar)
    while (opModeIsActive()) {
        if (gamepad1.y) {
            // pozisyon 0'a hareket ettir
            test_servo.setPosition(0);
        } else if (gamepad1.x || gamepad1.b) {
            // pozisyon 0.5'e hareket ettir
            test_servo.setPosition(0.5);
        } else if (gamepad1.a) {
            // pozisyon 1'e hareket ettir
            test_servo.setPosition(1);
        }

        telemetry.addData("Status", "Running");
        telemetry.update();
    }
}

Herhangi bir sorunuz olursa sormaktan çekinmeyin! 😊

Last updated