Tahmin Etmece etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

Herkese merhaba Arduino severler! Bugün, hem eğlenceli hem de öğretici bir projeye imza atacağız: LCD ekran ve butonlar kullanarak tahmin etmece oyunu geliştireceğiz. Bu proje sayesinde hem LCD ekran kullanımını, hem buton okumayı, hem de temel programlama mantığını pekiştireceğiz. Hazırsanız, malzemeleri hazırlayın ve kodlamaya başlayalım!

Gerekli Malzemeler

  • Arduino Uno (veya benzeri bir Arduino kartı)
  • 16x2 LCD Ekran
  • 3 adet Buton
  • 10K Ohm Direnç (3 adet)
  • 10K Ohm Potansiyometre
  • Breadboard
  • Jumper Kablolar

Devre Şeması

Devremizi kurarken aşağıdaki bağlantıları dikkatlice yapalım:

  • LCD Ekran Bağlantıları:
    • LCD VSS pin -> Arduino GND
    • LCD VDD pin -> Arduino 5V
    • LCD VO (Contrast) pin -> Potansiyometrenin orta bacağı (Potansiyometrenin diğer iki bacağı 5V ve GND'ye bağlanacak)
    • LCD RS pin -> Arduino Pin 12
    • LCD Enable pin -> Arduino Pin 11
    • LCD D4 pin -> Arduino Pin 5
    • LCD D5 pin -> Arduino Pin 4
    • LCD D6 pin -> Arduino Pin 3
    • LCD D7 pin -> Arduino Pin 2
    • LCD A (Anode) pin -> Arduino 5V (direnç üzerinden bağlanabilir)
    • LCD K (Cathode) pin -> Arduino GND
  • Buton Bağlantıları:
    • Her bir butonun bir bacağı -> Arduino Dijital Pin 8, 9 ve 10 (sırasıyla)
    • Her bir butonun diğer bacağı -> GND (ve 10K Ohm direnç ile Arduino 5V'a pull-up yapılarak)

Açıklama: Butonlar, pull-up dirençler sayesinde normalde HIGH durumunda olacaklar. Butona basıldığında ise LOW sinyali Arduino'ya iletilecek.

Arduino Kodu

Şimdi de kod kısmına geçelim. Aşağıdaki kodu Arduino IDE'sine kopyalayın ve kartınıza yükleyin.


 #include <LiquidCrystal.h>

 // LCD pinleri
 const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
 LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

 // Buton pinleri
 const int buttonUpPin = 8;
 const int buttonDownPin = 9;
 const int buttonEnterPin = 10;

 int randomNumber;
 int guess;
 bool gameStarted = false;

 void setup() {
  lcd.begin(16, 2);
  pinMode(buttonUpPin, INPUT_PULLUP);
  pinMode(buttonDownPin, INPUT_PULLUP);
  pinMode(buttonEnterPin, INPUT_PULLUP);

  lcd.print("Tahmin Etmece!");
  lcd.setCursor(0, 1);
  lcd.print("Baslamak icin OK");
  randomSeed(analogRead(A0)); // Rastgele sayı üretimi için seed
 }

 void loop() {
  if (!gameStarted) {
   if (digitalRead(buttonEnterPin) == LOW) {
    startGame();
   }
  } else {
   checkButtons();
   displayGuess();
  }
 }

 void startGame() {
  gameStarted = true;
  randomNumber = random(1, 101); // 1 ile 100 arasında rastgele sayı
  guess = 50; // Başlangıç tahmini
  lcd.clear();
  lcd.print("Tahmin: ");
 }

 void checkButtons() {
  if (digitalRead(buttonUpPin) == LOW) {
   delay(100); // Buton debounce
   if (guess < 100) {
    guess++;
   }
  }
  if (digitalRead(buttonDownPin) == LOW) {
   delay(100); // Buton debounce
   if (guess > 1) {
    guess--;
   }
  }
  if (digitalRead(buttonEnterPin) == LOW) {
   delay(100); // Buton debounce
   checkGuess();
  }
 }

 void displayGuess() {
  lcd.setCursor(8, 0);
  lcd.print(guess);
  lcd.print("  "); // Sayıyı temizlemek için
 }

 void checkGuess() {
  if (guess == randomNumber) {
   lcd.clear();
   lcd.print("Tebrikler!");
   lcd.setCursor(0, 1);
   lcd.print("Bildiniz!");
   delay(2000);
   gameStarted = false;
   lcd.clear();
   lcd.print("Tekrar icin OK");
   lcd.setCursor(0, 1);
   lcd.print("Basin");


  } else if (guess < randomNumber) {
   lcd.clear();
   lcd.print("Daha Yuksek!");
   delay(1000);
   lcd.clear();
   lcd.print("Tahmin: ");
  } else {
   lcd.clear();
   lcd.print("Daha Dusuk!");
   delay(1000);
   lcd.clear();
   lcd.print("Tahmin: ");
  }
 }
 

Kodun Açıklaması

  • LiquidCrystal Kütüphanesi: LCD ekranı kullanabilmek için gerekli olan kütüphane.
  • Pin Tanımlamaları: LCD ve butonların bağlı olduğu pinler tanımlanıyor.
  • setup() Fonksiyonu: LCD ekran başlatılıyor, buton pinleri giriş olarak ayarlanıyor ve rastgele sayı üretimi için bir başlangıç değeri (seed) belirleniyor.
  • loop() Fonksiyonu: Oyunun ana döngüsü. Oyun başlamadıysa, "OK" butonuna basılmasını bekliyor. Oyun başladıysa, butonları kontrol ediyor ve tahmini ekrana yazdırıyor.
  • startGame() Fonksiyonu: Oyunu başlatıyor, rastgele bir sayı üretiyor ve ilk tahmini ayarlıyor.
  • checkButtons() Fonksiyonu: Butonlara basılıp basılmadığını kontrol ediyor.
  • displayGuess() Fonksiyonu: Mevcut tahmini LCD ekrana yazdırıyor.
  • checkGuess() Fonksiyonu: Tahminin doğru olup olmadığını kontrol ediyor ve kullanıcıya geri bildirim veriyor.

Oyunun Oynanışı

  1. Arduino'yu bilgisayarınıza bağlayın ve kodu yükleyin.
  2. LCD ekranda "Tahmin Etmece!" yazısı belirecek.
  3. Oyunu başlatmak için "OK" butonuna basın.
  4. Yukarı ve aşağı butonlarını kullanarak tahmininizi ayarlayın.
  5. Tahmininizden eminseniz, "OK" butonuna basın.
  6. Eğer tahmininiz doğruysa, "Tebrikler!" yazısı belirecek. Değilse, "Daha Yüksek!" veya "Daha Düşük!" uyarıları alacaksınız.
  7. Tekrar oynamak için "OK" butonuna basın.

İpuçları ve Geliştirme Fikirleri

  • Oyuna bir zorluk seviyesi ekleyebilirsiniz (örneğin, daha geniş bir sayı aralığı).
  • Oyuna bir can sayısı ekleyebilirsiniz (örneğin, kullanıcı 5 hakkı olduğunda kaybedecek).
  • LCD ekranda kalan can sayısını gösterebilirsiniz.
  • Skor tablosu ekleyerek en iyi skorları saklayabilirsiniz.

Umarım bu proje sizin için faydalı olmuştur. İyi eğlenceler ve kodlamalar!

Etiketler: Arduino, LCD, Buton, Tahmin Etmece, Oyun, Proje, Elektronik, Kodlama, Hobi, Öğrenme

```

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

LCD Ekranlı Mini Oyun: Tahmin Etmece (Buton Kontrollü)

Merhaba sevgili Arduino severler!

Bugünkü projemizde, hem eğlenceli hem de öğretici bir uygulamaya imza atıyoruz: LCD ekranlı, buton kontrollü bir tahmin etmece oyunu! Bu proje, Arduino'nun basitliğini, LCD ekranların görsel gücünü ve butonların interaktifliğini bir araya getirerek keyifli bir deneyim sunacak. Hem elektronik bilginizi pekiştirecek hem de programlama becerilerinizi geliştireceksiniz. Hazırsanız, haydi başlayalım!

Projenin Amacı

Projemizin amacı, Arduino kullanarak rastgele bir sayı üretmek ve kullanıcının bu sayıyı butonlar aracılığıyla tahmin etmesini sağlamak. LCD ekran, kullanıcıya gerekli bilgileri (tahmin, ipucu, sonuç vb.) göstermek için kullanılacak. Böylece hem temel Arduino kavramlarını öğrenecek hem de basit bir oyun geliştirmenin keyfini çıkaracaksınız.

Gerekli Malzemeler

Bu projeyi gerçekleştirmek için aşağıdaki malzemelere ihtiyacınız olacak:

  • Arduino Uno (veya uyumlu bir kart)
  • 16x2 LCD Ekran
  • 3 adet Buton
  • 10K Ohm Potansiyometre (LCD kontrast ayarı için)
  • 220 Ohm Direnç (LCD backlight için)
  • 10K Ohm Direnç (Her bir buton için, pull-down direnci olarak)
  • Jumper Kablolar
  • Breadboard (tercihen)

Devre Şeması ve Bağlantılar

Devremizi kurarken aşağıdaki bağlantıları dikkatlice yapmanız gerekmektedir:

  • LCD Ekran Bağlantıları:
    • LCD VSS pini -> Arduino GND
    • LCD VDD pini -> Arduino 5V
    • LCD VO pini -> 10K Potansiyometre orta ucu (Potansiyometrenin diğer uçları GND ve 5V'a bağlanacak)
    • LCD RS pini -> Arduino Dijital Pin 12
    • LCD Enable pini -> Arduino Dijital Pin 11
    • LCD D4 pini -> Arduino Dijital Pin 5
    • LCD D5 pini -> Arduino Dijital Pin 4
    • LCD D6 pini -> Arduino Dijital Pin 3
    • LCD D7 pini -> Arduino Dijital Pin 2
    • LCD A (Backlight Anot) pini -> 220 Ohm Direnç üzerinden Arduino 5V
    • LCD K (Backlight Katot) pini -> Arduino GND
  • Buton Bağlantıları:
    • Buton 1 (Artış) -> Bir bacağı Arduino Dijital Pin 8'e, diğer bacağı 10K Ohm direnç üzerinden GND'ye ve aynı bacak 5V'a bağlanır.
    • Buton 2 (Azalış) -> Bir bacağı Arduino Dijital Pin 9'a, diğer bacağı 10K Ohm direnç üzerinden GND'ye ve aynı bacak 5V'a bağlanır.
    • Buton 3 (Onayla) -> Bir bacağı Arduino Dijital Pin 10'a, diğer bacağı 10K Ohm direnç üzerinden GND'ye ve aynı bacak 5V'a bağlanır.

Bağlantıları yaparken kabloların doğru pinlere takıldığından emin olun. Yanlış bağlantılar donanımınıza zarar verebilir.

Arduino Kodu

Şimdi de projemizin beyni olan Arduino koduna geçelim. Aşağıdaki kodu Arduino IDE'sine kopyalayın ve Arduino'nuza yükleyin.


#include <LiquidCrystal.h>

// LCD pinlerini tanımla
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// Buton pinlerini tanımla
const int buttonUp = 8;
const int buttonDown = 9;
const int buttonEnter = 10;

int randomNumber;
int guess = 1;
int attempts = 0;
bool gameStarted = false;

void setup() {
  // LCD ekranı başlat
  lcd.begin(16, 2);
  lcd.print("Tahmin Etmece!");

  // Buton pinlerini giriş olarak ayarla
  pinMode(buttonUp, INPUT_PULLUP);
  pinMode(buttonDown, INPUT_PULLUP);
  pinMode(buttonEnter, INPUT_PULLUP);

  randomSeed(analogRead(A0)); // Rastgele sayı üretimi için
}

void loop() {
  if (!gameStarted) {
    lcd.setCursor(0, 1);
    lcd.print("Basla icin ONAY");
    if (digitalRead(buttonEnter) == LOW) {
      startGame();
      delay(200);
    }
  } else {
    // Tahmini ekrana yazdır
    lcd.setCursor(0, 0);
    lcd.print("Tahmin: ");
    lcd.print(guess);
    lcd.print("  ");

    // Kalan hakkı ekrana yazdır
    lcd.setCursor(0, 1);
    lcd.print("Hakkınız: ");
    lcd.print(5 - attempts);
    lcd.print("  ");

    // Butonları oku
    if (digitalRead(buttonUp) == LOW) {
      guess++;
      if (guess > 100) guess = 1;
      delay(200);
    }
    if (digitalRead(buttonDown) == LOW) {
      guess--;
      if (guess < 1) guess = 100;
      delay(200);
    }
    if (digitalRead(buttonEnter) == LOW) {
      attempts++;
      checkGuess();
      delay(200);
    }
  }
}

void startGame() {
  randomNumber = random(1, 101); // 1-100 arasında rastgele sayı üret
  guess = 1;
  attempts = 0;
  gameStarted = true;
  lcd.clear();
}

void checkGuess() {
  if (guess == randomNumber) {
    lcd.clear();
    lcd.print("Tebrikler!");
    lcd.setCursor(0, 1);
    lcd.print("Bildiniz!");
    delay(2000);
    endGame(true);
  } else if (attempts >= 5) {
    lcd.clear();
    lcd.print("Kaybettiniz!");
    lcd.setCursor(0, 1);
    lcd.print("Sayi: ");
    lcd.print(randomNumber);
    delay(2000);
    endGame(false);
  } else {
    lcd.clear();
    if (guess < randomNumber) {
      lcd.print("Yukari!");
    } else {
      lcd.print("Asagi!");
    }
    delay(1000);
  }
}

void endGame(bool won) {
  gameStarted = false;
  lcd.clear();
  lcd.print("Tekrar?");
  lcd.setCursor(0, 1);
  lcd.print("ONAY ile BASLA");
  delay(1000);
}

Kodun Açıklaması

Yukarıdaki kodda şunları yaptık:

  • İlk olarak, LCD ekran ve butonlar için pinleri tanımladık.
  • `LiquidCrystal` kütüphanesini kullanarak LCD ekranı başlattık.
  • Buton pinlerini giriş olarak ayarladık ve pull-up dirençlerini etkinleştirdik.
  • `randomSeed()` fonksiyonu ile rastgele sayı üretimi için bir başlangıç değeri belirledik.
  • `loop()` fonksiyonunda, sürekli olarak butonları okuyarak kullanıcının tahminini aldık ve LCD ekranda güncelledik.
  • `checkGuess()` fonksiyonu ile kullanıcının tahminini kontrol ettik ve sonuca göre LCD ekranda mesajlar gösterdik.
  • `startGame()` ve `endGame()` fonksiyonları ile oyunu başlatıp bitirdik.

Sonuç

Tebrikler! Artık LCD ekranlı, buton kontrollü bir tahmin etmece oyununa sahipsiniz. Bu proje, Arduino'nun temellerini öğrenmek ve elektronik projeler geliştirmek için harika bir başlangıç noktasıdır. Kodu inceleyerek ve değiştirerek projenizi daha da geliştirebilirsiniz. Örneğin, zorluk seviyesini ayarlayabilir, farklı mesajlar gösterebilir veya oyuna yeni özellikler ekleyebilirsiniz.

Umarım bu proje size ilham vermiştir ve Arduino dünyasına adım atmanıza yardımcı olmuştur. Bir sonraki projede görüşmek üzere!

Etiketler: Arduino, LCD, Buton, Oyun, Tahmin Etmece, Elektronik, Proje, Kodlama

```