Oyun Kumandasıyla Servo Kullanımı

Gamepad ile Servo programlama

Robotumuzun servoyu otomatik olarak döndürebilmesi, özellikle otonom bir program yazarken oldukça faydalı olabilir. Ancak ya pozisyonları oyun pedimle kontrol etmek istersem?

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

Bu örnek için bilinen durum pozisyon 0 olarak kalacaktır. Böylece, başlatma işleminden sonra servo, hareket aralığının -135 derece pozisyonunda olacaktır. Aşağıdaki liste, hangi butonların hangi servo pozisyonlarına karşılık geldiğini göstermektedir:

Bir PS4 Kontrol Cihazı kullanıyorsanız, Bloklardaki açılır menüden uygun düğmeyi seçmek, kodunuza geri dönüp baktığınızda takip etmenizi kolaylaştırabilir. Düğmeler Bloklar halinde programlanırken de değiştirilebilir. (örn: Koddaki Y = Kontrol cihazında basılan Üçgen)

Buton

Derece Pozisyonu

Kod Pozisyonu

Y/Triangle

-135°

0

X/Square

0.5

B/Circle

0.5

A/Cross

135°

1

Denetleyici girişleri eklemek için bloklar “Gamepad” menüsünde bulunabilir:


Eğer/Başka Durumlarda Bloklarını Tanıtma

Programlamada en yaygın kullanılan mantık ifadelerinden biri if/else (eğer/başka durumda) ifadesidir. Bu blok, Blocks'ta Logic (Mantık) menüsü altında bulunabilir:

En basit haliyle, robotumuza bir şey olup olmadığını kontrol etmesini söyleriz ve cevap evet veya doğru ise, o zaman istenileni yapar.


Hızlı Kontrol!

Bu bölümde şu soruyu soruyoruz: "Eğer oyun pedindeki Y butonuna basılmışsa, servoyu pozisyon 0'a taşı."

Eğer bu ifade doğru ise, servo pozisyon 0'a hareket edecektir. Peki ya cevap yanlış ise (Y butonuna basılmamışsa) ne olur?

Cevap YANLIŞ olduğunda ne olur?

Şu anda, ifademiz yanlış olduğunda robotumuzdan belirli bir şey yapmasını istemedik. Bu, şimdilik Y düğmemize basılmadığı sürece servomuzun hareket etmeyeceği veya değişmeyeceği anlamına geliyor.


Eğer/Başka Durumda İfadesi

if/else ifadesi, birden fazla koşullu ifadeyi içerecek şekilde genişletilebilir. Blocks ile temel if bloğumuza istediğimiz kadar koşul ekleyebiliriz. Bunun için bloğun üzerindeki mavi dişliye tıklayın.

Bir else if bloğunu sürükleyip mevcut if ifadesine eklemek, ifadeyi bir if/else if ifadesine dönüştürür. Önceki örneğimizde bunun Blocks'ta nasıl görüneceğine bakalım:

Artık ifademiz önce Y butonunun basılıp basılmadığını kontrol ediyor ve servoyu pozisyon 0'a taşıyor. Ancak başka bir şey aramak için başka bir seçenek eklenmiş durumda, örneğin başka bir butonun basılması.

Hızlı Kontrol

Mevcut mantık deyimimize, kontrolörümüzde A'ya basıldığında servomuzu 1 konumuna getirme özelliğini ekleyelim. Aşağıdaki cevabı açıklamadan önce bir deneyin!

Yeni bloklarımız eklendikten sonra tam mantık deyimimiz nasıl okunur?

CEVAP

Programming our servo to move to position 1 when A is pressed will look very similar to our existing code:

Şimdi ifademiz şöyle: “Y düğmesine basılırsa servoyu 0 konumuna getirin, A düğmesine basılırsa servoyu 1 konumuna getirin.”


Mantık Operatörlerini Eklemek

Tüm oyun pedi girişlerini eklemek için if/else if ifadesini daha da genişletmemiz gerekiyor:

Or (veya) mantık operatörü, iki işlemciyi değerlendirir. Eğer biri (veya her ikisi) doğruysa, or ifadesi doğrudur. Eğer her ikisi de yanlışsa, ifade yanlıştır.

Benzer şekilde And (ve) mantık operatörü, iki işlemciyi değerlendirir ve her ikisinin de doğru olmasını gerektirir.

Mantık menüsünden Or bloğunu seçin ve bunu if/else if bloğuna ekleyin. Bloğun açılır menüsünden or ifadesini and ifadesine çevirebilirsiniz.

Önceden eklediğimiz A ve Y giriş bloklarını geçici olarak kenara taşıyın.

Her bölüme uygun setPosition bloklarını ekleyerek işlemi tamamlayın. Oyun pedi tuşlarına karşılık gelen servo pozisyonunu ayarlayın.


Programınızı Kaydedin ve Test Edin! Bu mantık ifadesinde üç farklı yol bulunmaktadır. İlk koşullu ifade doğruysa (Y butonuna basılmışsa), servo pozisyon 0'a hareket eder ve diğer koşullu ifadeler göz ardı edilir.

İlk koşul yanlışsa (Y butonuna basılmamışsa), ikinci koşul analiz edilir. Bu nedenle yolları ekleme sıramız önemlidir.

Örneğin, X ve A aynı anda basıldığında robot önce X butonunu önceliklendirecektir.

Deneyin ve gözlemleyin!

Last updated