Bir cümlelik özet
micro:bit üzerindeki A ve B düğmelerine basıldığında programın belirli işleri yapmasını sağlayan olay temelli programlama mantığını öğreniyoruz.
Neden önemli?
Önceki derste 5×5 LED matrisine kalp, ok veya kendi çizdiğin şekilleri gösterdin. Ama o programlar tek yönlüydü: micro:bit sadece senin yazdığın sırayı takip ediyordu, sana bir şey soramıyordu.
Düğmeler bu durumu değiştirir. Artık kart, kullanıcının ne yaptığını bekleyebilir. Bir tuşa basınca bir şey olur, başka bir tuşa basınca başka bir şey. Bu, bir programı etkileşimli hâle getirmenin en basit yoludur.
Etrafına bakınca aynı fikri her yerde görürsün. Asansör düğmesine basarsın, kabin gelir. Oyun kolundaki tuşa basarsın, karakter zıplar. Kapı ziline basarsın, ev içinde bir ses çalar. Bunların hepsinde ortak olan şey şudur: bir olay gerçekleşir ve program buna bir tepki verir. Bu derste micro:bit'i tam olarak böyle düşünmeye başlayacağız.
Olay nedir?
Olay (event), programın beklediği ve gerçekleştiğinde tepki verdiği bir durumdur. "A düğmesine basıldığında" bir olaydır. "Kart sallandığında" da bir olaydır.
Olay temelli programlamada iki şeyi ayırırız:
- Olay: Ne oldu? (Örneğin: A düğmesine basıldı.)
- Tepki (handler): Bu olunca ne yapılsın? (Örneğin: kalp simgesini göster.)
Günlük hayattan örnek: Kapı zili
Kapı zili tam bir olay-tepki örneğidir.
- Olay: Biri zile bastı.
- Tepki: Ev içinde melodi çalar.
Zil, kimse basmadan çalmaz. Yani program sürekli "bir şey yap" demez; sadece olay gerçekleştiğinde çalışır. micro:bit düğmeleri de böyledir.
Günlük hayattan örnek: Işık düğmesi
Odandaki lamba düğmesini düşün.
- Olay: Düğmeye bastın.
- Tepki: Işık yanar.
Bir daha bastığında ışık söner. Aynı düğme, duruma göre farklı sonuç verebilir. micro:bit'te de aynı düğmeye basınca farklı şeyler yaptırabiliriz.
micro:bit'in düğmeleri
micro:bit'in ön yüzünde, LED matrisinin iki yanında iki fiziksel düğme vardır:
- A düğmesi: Solda.
- B düğmesi: Sağda.
Bu iki düğmeyi tek tek kullanabildiğin gibi, ikisine aynı anda basarak üçüncü bir seçenek de oluşturabilirsin: A+B.
MakeCode'da "düğmeye basıldığında" bloğu
MakeCode'da her olayın kendi bloğu vardır. "A düğmesine basıldığında" bloğunun içine ne koyarsan, sadece A'ya basınca çalışır.
Örnek: A ile kalp, B ile yıldız gösterelim.
A düğmesine basıldığında
kalp simgesi göster
B düğmesine basıldığında
yıldız simgesi göster
Dikkat et: burada sürekli bloğu yok. Kart, sen basana kadar bekler. Bastığın anda ilgili blok bir kez çalışır.
A+B ile üçüncü seçenek
Aynı programa A+B olayını ekleyebiliriz. İki düğmeye birlikte basınca ekranı temizleyelim.
A düğmesine basıldığında
kalp simgesi göster
B düğmesine basıldığında
yıldız simgesi göster
A+B düğmesine basıldığında
ekranı temizle
Böylece tek kartla üç farklı komut verebiliyoruz: kalp, yıldız ve temizle.
Aynı program MicroPython'da
Aynı mantığı MicroPython ile de yazabiliriz. Burada önemli bir yöntem button_a.was_pressed() fonksiyonudur. Bu fonksiyon, "son kontrolden bu yana A'ya basıldı mı?" sorusuna True veya False yanıtı verir.
MicroPython'da olayları kendimiz bir döngü içinde kontrol ederiz:
from microbit import *
while True:
if button_a.was_pressed():
display.show(Image.HEART)
elif button_b.was_pressed():
display.show(Image.DIAMOND)
if button_a.is_pressed() and button_b.is_pressed():
display.clear()
Burada iki farklı yöntem var:
was_pressed(): Basma olayını yakalar. Basıp bıraktığında bir kezTruedöner.is_pressed(): Düğme şu anda basılı mı diye bakar. A+B'yi aynı anda kontrol etmek için uygundur.
MakeCode bloğuyla mantık birebir aynıdır; sadece yazım biçimi değişir.
Mini uygulama
Kendi "duygu kartını" yap. Amaç: iki düğme ve A+B ile üç farklı yüz ifadesi göstermek.
Görev adımları:
- A'ya basınca gülen yüz göster.
- B'ye basınca üzgün yüz göster.
- A+B'ye basınca şaşkın yüz göster.
MakeCode taslağı:
A düğmesine basıldığında
mutlu yüz göster
B düğmesine basıldığında
üzgün yüz göster
A+B düğmesine basıldığında
şaşkın yüz göster
MicroPython taslağı:
from microbit import *
while True:
if button_a.is_pressed() and button_b.is_pressed():
display.show(Image.SURPRISED)
elif button_a.was_pressed():
display.show(Image.HAPPY)
elif button_b.was_pressed():
display.show(Image.SAD)
Deneme fikirleri: sayaç ekle (A artırsın, B azaltsın), ya da A'ya her basışta farklı bir harf göster. Simülatörde test et, sonra gerçek karta yükle.
Uygulama laboratuvarı: Düğmeler ve Olaylar
Düğmeler ve Olaylar konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada Olay nedir? ile Günlük hayattan örnek: Işık düğmesi arasındaki ilişkiyi kullanarak simülatörde ve kart üzerinde denenmiş micro:bit programı ile test notları hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.
Görev senaryosu
Şu senaryoyu ele al: bisiklet için yanıp sönen güvenlik ışığı prototipi. Dersin ana hedefi “A ve B düğmeleriyle olay temelli programlar yazmayı öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.
- Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
- En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
- Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
- Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
- Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.
Başarı ölçütleri
- Program simülatörde beklenen olayı üretiyor mu?
- Kart yeniden başlatıldığında değerler doğru mu?
- A ve B düğmelerinin birlikte basılması denendi mi?
- Radyo grubu ve mesaj biçimi iki kartta aynı mı?
- Harici bileşenlerde pin ve gerilim sınırları kontrol edildi mi?
“Düğmeler ve Olaylar” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın bisiklet için yanıp sönen güvenlik ışığı prototipi senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, Olay nedir? ve Günlük hayattan örnek: Işık düğmesi ilişkisini daha küçük adımlara bölerek düzelt.
Sık yapılan hatalar
A+B'yi diğer olaylardan sonra kontrol etmek
MicroPython'da önce A ve B'yi tek tek kontrol edersen, sen iki tuşa basana kadar program çoktan A'yı yakalayıp çalışmış olur. A+B kontrolünü en başa koy; ancak o zaman ikisine birlikte basma ayrı bir olay gibi çalışır.
was_pressed ile is_pressed karıştırmak
is_pressed() düğme basılı olduğu sürece tekrar tekrar True döner; bu yüzden ekran hızlıca titreyebilir. Tek bir basışa tek tepki istiyorsan was_pressed() kullan.
"Sürekli" içine gösterip beklememek
MakeCode'da simgeyi sürekli bloğuna koyarsan, kart düğmeye bakmadan sürekli aynı şeyi gösterir. Düğme tepkisi istiyorsan komutu "düğmeye basıldığında" bloğunun içine koy.
Ekranı hiç temizlememek
Kalp gösterip sonra yıldız gösterince, eski LED'lerin bir kısmı açık kalabilir. Yeni bir şekil göstermeden önce gerekirse ekranı temizle komutunu kullan.
Güvenlik notu
micro:bit düşük gerilimle çalışan güvenli bir karttır; ama yine de birkaç noktaya dikkat et:
- Kartı bilgisayara USB ile bağlarken ya da pil kutusunu takarken bir yetişkinden yardım iste. Kutupları (+ ve −) ters bağlamamaya özen gösterin.
- Yalnızca micro:bit için üretilmiş pil kutularını ve düşük gerilimli pilleri kullan; şebeke elektriğine asla bağlama.
- Kartı çıplak metal yüzeylerin üzerine koyma; pinlere ve lehim noktalarına dokunurken dikkatli ol.
- Kartı bir kıyafete veya çantaya takıp taşıyorsan sağlam biçimde sabitle ve kabloların takılıp düşmesine izin verme.
Ders özeti
- Olay, programın beklediği ve gerçekleştiğinde tepki verdiği bir durumdur.
- micro:bit'te A, B ve A+B olmak üzere üç düğme olayı vardır.
- MakeCode'da her olayın kendi "düğmeye basıldığında" bloğu bulunur.
- MicroPython'da olayları
was_pressed()veis_pressed()ile kendimiz kontrol ederiz. - Aynı düğmeye farklı tepkiler bağlayarak programı etkileşimli hâle getiririz.
Kontrol soruları
- Olay temelli programlamada "olay" ve "tepki" ne demektir?
- micro:bit'te kaç düğme olayı vardır ve bunlar nelerdir?
- MakeCode'da A'ya basınca kalp göstermek için komutu hangi bloğun içine koyarsın?
- MicroPython'da
button_a.was_pressed()fonksiyonu neyi kontrol eder? was_pressed()ileis_pressed()arasındaki fark nedir?
Cevaplar
- Olay, gerçekleşmesini beklediğimiz bir durumdur (örneğin A'ya basılması). Tepki, o olay olduğunda programın yaptığı iştir (örneğin kalp göstermek).
- Üç düğme olayı vardır: A, B ve iki düğmeye aynı anda basıldığında oluşan A+B.
- Komutu "A düğmesine basıldığında" bloğunun içine koyarsın;
süreklibloğuna değil. - Son kontrolden bu yana A düğmesine basılıp basılmadığını kontrol eder; basıldıysa
True, basılmadıysaFalsedöner. was_pressed()bir basma olayını (basıp bırakma) bir kez yakalar;is_pressed()ise düğmenin şu anda basılı olup olmadığına bakar ve basılı kaldıkçaTruedöner.
Kaynak ve doğrulama notu
“Düğmeler ve Olaylar” dersi için doğrulama odağı Olay nedir? ile Günlük hayattan örnek: Işık düğmesi arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. MakeCode ve MicroPython adları sürüme göre küçük farklılık gösterebilir. Önce simülatörde test yapılmalı; harici bileşen bağlanacaksa kartın pin ve gerilim sınırları ayrıca kontrol edilmelidir.
Sonraki ders
Değişkenler ve Döngüler: Düğmeyle artan bir sayaç yaparak bilgiyi bir değişkende saklamayı ve döngülerle tekrar etmeyi öğreneceğiz.