Sürüş programı yaz
Bu sayfada boş bir projeden iki motorlu, kumandayla sürülen bir program yazacaksın. Sonunda Tank Sürüş örneğindeki programı kendin kurmuş olacaksın. Örnekte sağ motorun ters kutusu da işaretlidir.

Başlamadan önce
- Blocks açık ve Probot Blocks sekmesi seçili.
- Çalışma alanında yalnız altı yaşam döngüsü bloğu var. Değilse bkz. Yeniden başla.
- Robotundaki motor sürücü pinlerini bil. Bu sayfa örneklerdeki pinleri kullanır: sol motor 16 ve 17, sağ motor 18 ve 19.
Hazır sonucu görmek istersen Örnek seç > Tank Sürüş'ü aç.
Yaşam döngüsü bloklarını tanı
Program altı bloğa bölünür. Her blok robotun bir anında çalışır. Teleop (sürücü kontrolü), robotu kumandayla sürdüğün bölümdür.
| Blok | Ne zaman çalışır | Buraya ne konur |
|---|---|---|
| robotInit | Driver Station'da Init'e basınca, bir kez | Motor ve pin tanımları |
| robotEnd | Stop'a basınca, bir kez | Motorları durdurma |
| autonomousInit | Otonom başlarken, bir kez | Otonom hazırlığı |
| autonomousLoop | Otonom boyunca, saniyede yaklaşık 50 kez | Otonom hareketler |
| teleopInit | Teleop başlarken, bir kez | Teleop hazırlığı |
| teleopLoop | Teleop boyunca, saniyede yaklaşık 50 kez | Kumanda okuma ve sürüş |
Döngü bloklarının içinde 2 saniyeden uzun bekleme yapma. Robot bunu süre aşımı (deadline miss) sayar.
Sağ motorun adını oluştur
Motor adları değişken olarak tutulur. motor tanımla, motoru sür ve motoru durdur bloklarında varsayılan ad solMotor'dur.
sagMotor yalnız tank sürüş ve arcade sürüş bloklarında hazır gelir. Motorları sürüş bloğundan önce tanımlayacağın için bu adı önce sen oluştur.
Değişken adında Türkçe harf ve boşluk kullanma. Blocks bu karakterleri kodda değiştirir: boşluk _ olur, Türkçe harf _C4_9F gibi bir diziye dönüşür (ör. sağMotor → sa_C4_9FMotor). Kod yine derlenir ama ad okunmaz hâle gelir.
- Blok listesinde Değişkenler kategorisini seç.
- Blok panelinde Değişken oluştur...'a bas.

- "Yeni değişken ismi:" kutusuna
sagMotoryaz.
- "Yeni değişken ismi:" kutusuna
- Tamam'a bas.
Sonuç: Blok panelinde sagMotor adlı bloklar görünür.
Motorları tanımla
İpucu
Her bloğu bir yaşam döngüsü bloğunun içine, çentiği oturacak şekilde bırak. Dışarıda kalan blok koda girmez.
- Blok listesinde Motor & Sürüş kategorisini seç.
- motor tanımla bloğunu robotInit'in içine sürükle. Ad solMotor, pinler 16 ve 17 gelir.
- İkinci bir motor tanımla bloğunu ilkinin altına sürükle.
- İkinci bloktaki
solMotor ▾listesine bas, sagMotor'u seç. - İkinci blokta RPWM pin değerini
18, LPWM pin değerini19yap. - Sağ motor ters dönüyorsa ikinci bloktaki ters kutusunu işaretle.

Sonuç: Kod Önizleme'de const uint8_t sagMotor_RPWM = 18; satırı görünür.
Motorları durdur
- Motor & Sürüş'ten motoru durdur bloğunu robotEnd'in içine sürükle.
- İkinci bir motoru durdur bloğunu altına sürükle.
- İkinci bloktaki listeden sagMotor'u seç.
Sonuç: Kod Önizleme'de void robotEnd() içinde iki setMotor( satırı görünür. Driver Station'da Stop'a basınca iki motor da durur.
Kumandayla sür
- Kumanda'dan kumandayı oku bloğunu teleopLoop'un içine sürükle.
- Motor & Sürüş'ten tank sürüş bloğunu kumandayı oku'nun altına sürükle.
- Kumanda'dan js sol çubuk ↕ (ileri +) bloğunu tank sürüş'teki sol güç yuvasına tak.
- Aynı bloktan birini daha sağ güç yuvasına tak.
- sağ güç'teki bloğun
sol çubuk ↕ (ileri +) ▾listesinden sağ çubuk ↕ (ileri +)'yı seç.
- Yuvalarda hazır duran
0blokları çalışma alanına düşer. Onları çöp kutusuna sürükle.
- Yuvalarda hazır duran
Sonuç: sol güç yuvasında sol çubuk, sağ güç yuvasında sağ çubuk takılı. Robotta sol çubuk sol motoru, sağ çubuk sağ motoru sürer. Çubuk tam ileri itilince değer +1 olur.
Kodu kontrol et
- Çalışma alanında yaşam döngüsü bloklarının dışında blok kaldıysa onu çöp kutusuna sürükle.
- Fareyi yan panelde Kod Önizleme'nin üstüne getir.
- Tekerlekle Kod Önizleme'yi
void teleopLoop()satırına kadar aşağı kaydır.
Sonuç: void teleopLoop() içinde auto js = ... satırı ve iki setMotor( satırı görünür. Kod karta yüklenmeye hazır.
Kaydetmek için Blokları indir'e, karta yüklemek için .ino indir'e bas.
Sorun mu var?
- Blok koda girmiyor: Blok bir yaşam döngüsü bloğunun içine oturmamış. Bloğu sürükleyip yeniden tak. Bkz. Sorun giderme.
- İki motor da aynı yöne dönmüyor: Ters dönen motorun motor tanımla bloğunda ters kutusunu işaretle.
- Robot hep biraz kayıyor: kumandayı oku bloğundaki ölü bölge değerini büyüt (en çok 0,5).