# Drivetrain Motorlarının Programlanması

[Bölümde](https://vendbook.team6989.com/rev-duo-control-system/bolum-1-temel-konulara-giris), bir motora güç vererek veya bir joystick'ten giriş alarak nasıl kontrol edileceğini öğrendik. Bir tahrik sistemini kontrol etmek için, robotun hareket etmesine yardımcı olmak amacıyla iki motoru **eşzamanlı** olarak kontrol etmemiz gerekir.

**Çift** bloğa erişmek için aktüatörler açılır menüsünü seçmeniz gerekecektir:

<figure><img src="https://3135141646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlCzf2v41oKA4ngClT3x2%2Fuploads%2FFdzuAMJRrG1dl6FmEK9u%2Fimage.png?alt=media&#x26;token=3618a016-b353-4a0b-a2c9-3ce998b12905" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Aktüatörler menüsünde DcMotor'u görmüyor musunuz? Başlamadan önce [yapılandırmanızın](https://vendbook.team6989.com/rev-duo-control-system/bir-yapilandirma-olusturma) düzgün bir şekilde ayarlandığından ve etkinleştirildiğinden emin olun!
{% endhint %}

## Drivetrain Motorlarının Programlanması

**Adım 1: Temiz Başlangıç**\
Bir önceki bölümde döngüye eklediğimiz tüm kodları silin. Alternatif olarak, yeni bir program oluşturabilirsiniz.

{% hint style="info" %}
Aynı türden birden fazla değişken olduğunda (örneğin birden fazla DcMotor), değişkene özgü bloklar alfabetik sıraya göre varsayılan bir değişken seçecektir. Bu örnek için, OpMode DcMotor blokları varsayılan olarak **arm** değişkenine geçecektir.
{% endhint %}

Blok üzerindeki değişken açılır menüsünü kullanarak koldan sağ motora geçin.

**Hızlı Kontrol:**\
Kodu çalıştırmadan önce şunu düşünün:

* Program etkinleştirildiğinde robotunuzun ne yapmasını bekliyorsunuz?

Şimdi `OpMode`'u kaydedin ve programınızı çalıştırın!

<details>

<summary>Robot beklediğiniz gibi hareket etti mi?</summary>

Robotunuzun düz bir çizgide ileri veya geri hareket etmesini beklemiş olabilirsiniz. Bunun yerine, robotunuz muhtemelen bir daire içinde dönmüştür.

Motorlar farklı hızlarda çalıştığında merkez pivot noktaları boyunca dönerler. Ancak motorların ikisi de burada 1'in kuvvetine ayarlanmıştır, peki başka ne sebep olabilir?

</details>

{% hint style="danger" %}
Robot beklediğiniz gibi davranmadığında, Driver Hub'ı kolayca erişebileceğiniz bir yerde bulundurun. Şüphe durumunda robotu devre dışı bırakın.
{% endhint %}

## Motorların Aynalanması

DC motorlar, sağlanan akım akışına bağlı olarak iki farklı yönde dönebilir.

* Pozitif güç değeri uygulandığında motorlar saat yönünde döner.
* Negatif güç değeri uygulandığında motorlar saat yönünün tersine döner.

**Sorun:**\
Robotunuzun şu anda döndüğünü fark edebilirsiniz. Robotun fiziksel yapısına daha yakından bakalım:

<figure><img src="https://3135141646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlCzf2v41oKA4ngClT3x2%2Fuploads%2Fkt9bm9AI5sWMHqGVdwh9%2Fimage.png?alt=media&#x26;token=623d8295-261c-43c5-99c4-4c2b5877055b" alt=""><figcaption><p>Class Bot V2'nin yukarıdan aşağı görünümü</p></figcaption></figure>

**Robot Üstten Görünüm:**\
Robotunuzdaki motorların tahrik sisteminin bir parçası olarak birbirine aynalı olduğunu göreceksiniz.

**Motorların Yönü:**\
Motorlar aynı yönde dönse bile (örneğin, saat yönü), birinin "saat yönü" diğerinin ters yönüdür.

<figure><img src="https://3135141646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlCzf2v41oKA4ngClT3x2%2Fuploads%2FHA2RzP18KSimkQSY4dw7%2Fimage.png?alt=media&#x26;token=b1cb4f8e-878a-4921-bc71-2a5bca68ce23" alt=""><figcaption></figcaption></figure>

Motorların ters yönde çalışmasını önlemek için iki çözüm yolu vardır:

1. Gücü negatif bir değerle ayarlamak.
2. Motorun yönünü başlangıçta ters çevirmek.

## **Adım 2: Motorun Yönünü Ters Çevirme**

Robotumuzun dönen bir topaç olmaması için programımızı ayarlamanın birkaç yolu var. Örneğin, motorlarımızdan biri çağrıldığında gücün negatif bir değere ayarlandığından emin olabiliriz. Ya da başlatma sırasında motorumuzun yönünü basitçe tersine çevirebiliriz.

Eklemek![](https://1359443677-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4_pJHI8HTuZFQTNfcy%2F-MVIIB5oT9i9P2l29VHj%2F-MVOBZ-rzSPjT4Aje-Ub%2FMotor%20-%20rightmotorDirection.svg?alt=media\&token=82cbecae-83d2-41a4-b7ee-eda7a029ed9c)programınıza, altında![](https://1359443677-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4_pJHI8HTuZFQTNfcy%2F-MVIIB5oT9i9P2l29VHj%2F-MVRzzz2RWu0i_oNzqo3%2FComment%20-%20Put%20intialization%20blocks.svg?alt=media\&token=5b100e29-9c67-4bb3-be74-0d35d452cb76)yorum bloğu. Hatırlarsanız, bu bölüme yerleştirilen bloklar Sürücü Hub'ındaki intilizal düğmesine basıldıktan SONRA, ancak oynat düğmesine tıklanmadan ÖNCE çalışacaktır.

**Tam Kod:**

```java
@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");
    
    telemetry.addData("Status", "Initialized");
    telemetry.update();
    
    // Sağ motoru ters çevir
    rightmotor.setDirection(DcMotorSimple.Direction.REVERSE);
    
    // Oyun başlatıldığında bekle
    waitForStart();

    // Oyun sona erene kadar çalıştır
    while (opModeIsActive()) {
        rightmotor.setPower(1);
        leftmotor.setPower(1);
        telemetry.addData("Status", "Running");
        telemetry.update();
    }
}
```

<figure><img src="https://3135141646-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FlCzf2v41oKA4ngClT3x2%2Fuploads%2FRVyDdpoMExqe4eMEwY2G%2Fimage.jpeg?alt=media&#x26;token=e18e0eac-1823-47d5-b18c-be1acb2b923c" alt=""><figcaption></figcaption></figure>

Şimdi ![](https://1359443677-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M4_pJHI8HTuZFQTNfcy%2F-MVIIB5oT9i9P2l29VHj%2F-MVOBZ-rzSPjT4Aje-Ub%2FMotor%20-%20rightmotorDirection.svg?alt=media\&token=82cbecae-83d2-41a4-b7ee-eda7a029ed9c)eklenen blokla birlikte sağ motor için yön bu program için her zaman tersine çevrilecektir. Güç değerlerimizin değiştirilmesine gerek yoktur.

Hadi deneyin!
