Bu sefer robotu üçüncü çizgide durdurma problemine bakayım dedim. Temel Lego programlama derslerinde işlenen bir problem. Robot zeminden farklı renkte çizgilerin üzerinden geçerken üçüncü çizgide durmalı. En basit çözümlerden biri heralde şöyle olabilirdi:
Yavaşça kısa süre hareket et.
Çizgi görene kadar ilerle.
Çizgiyi görünce dur.
Bu üç adımı üç kere tekrarlayan bir program bu problemi çözer.
Yeni şeyler öğrenebileceğim bir çözüm aradım ve aşağıdaki programı yaptım. Bu programda birbirine paralel (yani aynı anda) çalışan iki program akışı var. Başlangıç bloğundan çıkan iki ayrı yol bu program parçalarını belirliyor. Önce programa iki tane başlangıç bloğu koyup yaptım bunu ama nedense ikisini de tek tek çalıştırmam gerekti. Bu şekilde iki program parçası da tek bir tuşla başlatılabiliyor.
Alt taraftaki program parçası sadece robotu sürekli ileri doğru hareket ettiriyor ve sonsuz bir döngüye giriyor, yani bu program hiçbir şeye bakmadan sürekli ierliyor. Bu döngüden sonra ise robotu durdurma bloğu var. Demek ki bu döngü o kadar da sonsuz değilmiş. Evet, bu döngünün ömrünü üst taraftaki program parçası belirliyor.
Üstteki program parçası temelde şunu yapıyor. Renk değişimi olana kadar bekliyor. Değişiklik olunca yeni rengi bir değişkene yazıyor. Eğer yeni renk siyah ise (kullandığım çizgilerin rengi siyahtı) o ana kadar görülmüş çizgi sayısı değişkenini bir arttırıyor. Eğer toplam 3 olmuşsa alt taraftaki sonsuz döngüyü bitiriyor ve böylece motor duruyor.
Programda iki tane değişken var. Bunlar biri ‘color’ adında diğeri de ‘line’ adında kırmızı bloklar şeklinde tanımlanmış. Bu blok programlama dilinde beni en rahatsız eden şey değişken kullanımı oldu. Bir değişkenin değerini arttırmak için önce bir değişken okuma bloğu kullanıyoruz. Sonra bu değişkenin çıktısını toplama bloğuna sokuyoruz. Çıkan sonucu da tekrar değişken yazma bloğuna gönderiyoruz. Basit bir işlem için üç blok gerekiyor yani. Bu blokları bir araya getirip kendi bloklarımıza yapabiliriz ama bu işi henüz o kadar öğrenmedim.
Üstteki program parçasının alt kısmında toplama bloğunun girişlerinin biri çizgi sayısı değişkeninin değeriyken diğeri de renk değişkeninin siyah olup olmadığını kontrol eden karşılaştırma bloğunun çıkışıdır. Eğer renk değişkeninin yeni değeri siyah ise karşılaştırma bloğunun çıkışı 1 değerine, aksi durumlarda ise 0 değerine sahip oluyor. Bu nedenle aşağıdaki toplama bloğu sadece renk geçisi siyaha olursa çizgi değişkenini 1 arttırıyor, diğer durumlarda ise 0 arttırıyor, yani sabit tutuyor.
Sonraki blok ise çizgi sayısı değişkeninin değerinin 3 olup olmadığını kontrol ediyor. Eğer 3 ise çıktı doğru oluyor ve bir sonraki döngü bloğu bitiyor. Eğer 3 değilse çıktı yanlış oluyor ve döngü devam ediyor. Bu döngü bitince de döngü durdurma bloğu çalışıyor ve bu blokta kullanılan numara bitirmek istediğimiz döngüye verdiğimiz numarayla aynı olmalı (Programda 02). Dikkat edersek üstteki program parçası 01 numaralı döngüye, alttaki program parçası ise 02 numaralı döngüye sahip. Biz de 02 numaralı döngüyü bitirmek istiyoruz, çünkü böylece motor duracak.
Aiağıdaki kısa filmde programı çalışırken görebilirsiniz.