Arduino ve LCD Ekran ile oyun yaptığımız bu yazımızda, bir çok Arduino fonksiyonunu ve kodlama yapısını pekiştirebilirsiniz. Bir zamanların en popüler oyunlarında biri olan Flappy Bird‘ü Arduino geliştirme kartına taşıyoruz!
Flappy Bird, Dong Nguyen tarafından geliştirilen bir yandan kaydırma tabanlı bir oyundur. Oyun 2D Grafik üzerine kurulu olsa da hem Android hem de iOS platformlarında oldukça popüler hale geldi. Oyunun amacı basittir, “Faby” adı verilen kuşu yeşil boruların arasına çarpmadan uçurmaya çalışmaktır.
Doğası gereği bağımlılık yapan oyunun geliştiricisi oyunu her iki kanaldan da indirilmesini ve erişilmesini(Google Play Store ve App Store) durdurdu.
Birçok replika oyun ve klonlanmış versiyona giden yolun popülaritesi arttı. Bu projede oyunun konseptini alıp Arduino kullanarak kendin yap tipi bir Flappy Bird Oyunu geliştireceğiz.
Ayrıca tek renk bir LCD ekranla bu projeyi gerçekleştirdikten sonra OLED bir ekran ile bu oyunu renkli ve ileri bir seviyeye getirebilirsiniz.
Bu proje, kısıtlı donanım kaynaklarına sahip bir Atmega328P (Arduino Uno) mikrodenetleyicisi üzerinde, nesne tabanlı fizik kurallarının ve grafiksel arayüz yönetiminin uygulanmasını amaçlamaktadır. Proje kapsamında, bir OLED ekran (SSD1306) veya LCD panel üzerinde saniyede belirli kare hızıyla (FPS) render edilen bir oyun döngüsü kurgulanmıştır.
Yerçekimi ivmesi, dikey hız vektörleri ve çarpışma algılama (collision detection) algoritmaları kullanılarak, oyun mekaniği dijital bir sisteme entegre edilmiştir. Kullanıcı etkileşimi, dış kesmeler (interrupts) veya dijital giriş okuma yöntemleriyle minimize edilmiş gecikme süresiyle sağlanmaktadır.

Proje kodumuzda kuşu yani karekterimizi “0” karakteri ile engelleri ise “#” karakteri ile temsil ediyoruz. Alt ve üst sıra olmak kaydıyla dizgi ile bu dizileri sürekli olarak oyunun ilerlemesi ile çoğaltıyoruz. Oyunun amacı sadece düğmeye basarak kuşu, engellerden başarıyla geçirmektir.
Daha fazla ilerlemeden önce, Arduino’daki “Kesmeler/Interrupts” kavramı bu projeyi uygulamak için çok önemlidir. Bu yüzden, Arduino’da Kesmeleri nasıl kullanılacağını kolayca anlayabileceğiniz bu basit Arduino Kesmeler Yazısını gözden geçirmenizi öneririz.
Gerekli Malzemeler
- Arduino UNO
- 16×2 LCD Ekran
- Buton
- Jumper/Kablo
- Breadboard/ Devre kartı
- 5V Güç Kaynağı
Devre Şeması

Devre şemasından ve gerekli bileşenlerin listesinden, projenin uygulanmasının ne kadar basit olduğu hakkında bir fikir edinebilirsiniz. Tek ihtiyacınız olan 16×2 LCD ekranı Arduino UNO ile arayüzlemek ve ayrıca bir Kesme Butonu eklemek.
16×2 LCD Ekrana gelince, RS ve E pinlerini Arduino UNO’nun Dijital I/O Pinleri 8 ve 7’ye bağlayın. Veri Pinleri D4 – D7 Arduino’nun 6, 5, 4 ve 3 Pinlerine bağlanır.
16×2 LCD Ekranın kontrastını ayarlamak için 10KΩ POT bağlanır, eğer pot kullanmak istemiyorsanız doğrudan kod kısmında kontrast ayarını yapabilirsiniz. Diğer tüm bağlantılar devre şemasında açıkça belirtilmiştir.
Pin 2 ile GND arasına bir Buton bağlanır.
LCD Ekran ile Oyun Proje Kodu
Tüm bağlantıları devre şemasına göre yaptıktan sonra kodu Arduino’ya yükleyin. Güç kaynağını açtığınız anda, oyun LCD’de “OYUNA BASLA” görüntüleyerek başlar.
Oyun başladıktan sonra, Flappy Bird, basma düğmesi yardımıyla kesme pimi kullanılarak konumu değiştirilebilir. Kuş üstteyse, düğmeye basarak onu aşağı veya tam tersine hareket ettirebilirsiniz.
Kuş engellerden herhangi birine dokunursa kaybedersiniz oyun biter. Bu oyunun basit bir versiyonu olduğu için sadece birkaç engel var ve tüm bu engelleri başarıyla aşarsanız oyunu kazanacaksınız.
Bonus: I2C Ekran İçin Arduino Kodu
Teknik Özet
Projenizi geliştirirken şu temel bileşenlerin ve bilimsel prensiplerin farkında olmanız, projenin doğruluğu açısından kritiktir:
- Fizik Motoru: Karakterin hareketi genellikle
formülü (hız = hız + yerçekimi) ile basit bir Euler entegrasyonu kullanılarak hesaplanır. - Haberleşme: Ekran verileri genellikle 400kHz hızındaki I2C hattı üzerinden taşınır.
- Bellek Yönetimi: Arduino Uno’nun 2KB’lık SRAM kapasitesi nedeniyle, grafik verilerinin “PROGMEM” (Flash Bellek) içinde saklanması performans açısından bir zorunluluktur.
Interrupt Timelaması ve Durum Makinesi Tasarımı Notu
Flappy Bird oyunu Arduino’da gerçeklenirken, buton basmanın anlık algılanması ve oyun mantığının senkronizasyonu kritiktir. External interrupt (INT0/INT1) kullanılması durumunda, buton basıldığında oyunun durum makinesine ait flag’inin ayarlanması gerekir.
Ardından, main loop içinde bu flag kontrol edilerek karakter konumu değiştirilir; böylelikle GPU rendering çevrimi tetiklenmiş olur. LCD güncellemesi, debouncing işleminin (≥20ms) sonrasında yapılmalıdır. Hareket hesaplama ve çarpışma tespiti her frame’de gerçekleştirilse de (~100ms araları), interrupt tabanlı buton yerine polling kullanılırsa 1-2 frame gecikmesi kaçınılmazdır.
Optimal deneyim için timer/counter periyodisini ve interrupt vektörünü sıfırlama işleminin aynı döngüde yer almasına dikkat edilmelidir.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.

