PyBricks ile ileri geri ve sağa sola dönme
Tags: lego, pybricks, micropython, technic
Published: 2023-01-08 18:12:49

**Lego**'nun [Technic Large Hub](https://aliorhun.medium.com/lego-powered-up-ekosistemi-hakk%C4%B1nda-b0424d034f04)'ı için varsayılan firmware yerine **PyBricks** firmware'ü kullanarak Lego cihazınızda [MicroPython](https://dev.to/aliorhun/micropython-calisan-cihazlarda-python-kodu-calistirma-231m) kullanabiliyoruz.

Bu yazımızda Lego'nun _uzaktan kumandası_ ile, _2 motor_lu bir düzeneğin çalıştırılması anlatılmıştır.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7qh3m8p16ze78j128cp7.png)

# PyBricks firmware yükleme

Bunun için öncelikle Firmware'ü sisteme yüklemek gerekiyor ki, bunun için Lego Technic Hub üzerindeki bluetooth tuşuna basılı tutarken cihaza USB kablosunu takarak, ışıkların birkaç kere yanıp sönmesini bekledikten sonra sisteme giriş yapılması sağlanır.

Bu adımdan sonra aşağıdaki adreste bulunan güncel Firmware seçilerek kurulum gerçekleştirilir.

https://code.pybricks.com/

Bu kısımda bazı detaylar bulunabiliyor fakat bunlarla ilgili internette bir çok makaleye rastlanabilmekte.

# PyBricks kullanımı

PyBricks firmware kurulduysa ve yeniden başlattıktan sonra artık cihazınızı bluetooth ile kullanabilirsiniz. Bunun için yine yukarıdaki adresten Bluetooth işaretine basarak firmware kurulumda verdiğiniz ismi seçerek cihazına bağlanabilirsiniz.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gh5ia3i1thvrm6a5ttc5.png)

Cihazınıza bağlantı kurabildiyseniz (eşleştiyseniz) bluetooth ikonu aşağıdaki gibi olacaktır. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kdnnf9j9jabkkdxlwoxu.png)

Bu adımdan sonra kodunuzu yazdıktan sonra çalıştır ve durdur butonları ile kodunuzu göndermeye başlayacaksınız.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/buizzslexuss84gqm66y.png)

# Uzaktan kullanımlı iki motorlu örnek

Temel [belgelendirmesi](https://docs.pybricks.com/) oldukça güzel olan PyBricks için, Technic Large Hub üzerindeki A ve C portlarına 2 adet motor bağlıdır.

Aşağıdaki kodda öncelikle gerekli kütüphaneler eklenmiş ve sonrasında Hub üzerindeki hem 5x5'lik matris ışıklandırması hem de güç tuşunun ışığını kapatmaktayız.

Sonrasında A ve C girişine bağlı 2 motor tanımlanmaktadır. Eğer motorlar takılı değilse kodunuz hata verecek ve çalışmayacaktır. Sonrasındaki kısımda Lego'nun uzaktan kumandası eklenmiş oldu.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/917o051oi9i1mav9ihcl.png)

İşlemler diye yorumlanmış kısım ise tamamen uzaktan kumandadaki tuşların durumlarına göre yazılmıştır. Tüm süreç bir while döngüsü içerisinde hazırlanmıştır ve döngü sırasında ilk öncelikle eğer herhangi bir tuşa basılı değilse motorları durduracak şekilde bir kod bloğu bulunmaktadır.

Sonrasında ise tek tek ve birden fazla tuşların basılması durumlarını ifade eden şekilde ileri-geri, sağ-sol anlamlarını kazanacak 2 motor için durum yer almaktadır. 360 değerleri, saniyede 360 derecelik açıyı tarayacak ve ters yönde 360 derece olacak şekilde hazırlanmıştır.


```python
from pybricks.pupdevices import Motor
from pybricks.parameters import Port
from pybricks.tools import wait

from pybricks.pupdevices import Remote
from pybricks.parameters import Button, Color

from pybricks.hubs import PrimeHub
from pybricks.tools import wait
from pybricks.parameters import Icon

# Hub üzerindeki ışıkları kapatma
hub = PrimeHub()
hub.display.off()
hub.light.off()

# A girişindeki motoru tanımlama (motor01)
motor01 = Motor(Port.A)

# C girişindeki motoru tanımlama (motor02)
motor02 = Motor(Port.C)

# Kumandayı tanımlama
remote = Remote()

# işlemler
while True:
    pressed = ()

    # tıklanılmadığında
    while not pressed:
        pressed = remote.buttons.pressed()
        motor01.reset_angle(0)
        motor02.reset_angle(0)

    # Sağdaki tuşları motor01'e atama
    if Button.RIGHT_PLUS in pressed:
        motor01.run(360)
    elif Button.RIGHT_MINUS in pressed:
        motor01.run(-360)

    # Soldaki tuşları motor02'ye atama
    elif Button.LEFT_PLUS in pressed:
        motor02.run(360)
    elif Button.LEFT_MINUS in pressed:
        motor02.run(-360)

    elif Button.RIGHT_PLUS and Button.LEFT_PLUS in pressed:
        motor02.run(360)
        motor01.run(360)
        
    elif Button.RIGHT_PLUS and Button.LEFT_MINUS in pressed:
        motor02.run(-360)
        motor01.run(360)
        
    elif Button.RIGHT_MINUS and Button.LEFT_PLUS in pressed:
        motor02.run(360)
        motor01.run(-360)
        
    elif Button.RIGHT_MINUS and Button.LEFT_MINUS in pressed:
        motor02.run(-360)
        motor01.run(-360)
        

    while pressed:
        pressed = remote.buttons.pressed()
```