simon2 2

Arduino ile takip oyunu tasarlama – 2

Arduino ile projelerin yanında  küçük oyunlar da  tasarlayabilirsiniz. Bu yazımızda arduinomuz ile 4 LED ve 4 butonla yapabileceklerinize inanamıyacaksınız. Tamamen hafızanıza hitap eden bir proje.

Adım adım zorlaşarak sizden onu takip etmenizi isteyecektir,hata yapmanız durumunda eski atarilerde olduğu gibi uyarı melodisi ve tekrar baştan başlar.

simon2 1

Breadboarda kurulmuş hali

simon2 2

Projemizde her renge göre bir ton duyacaksınız. .

Projemizin bağlantı şeması

simon2

 

Programımız

/*
www.arduinom.org
*/
#include <Tone.h>
Tone speakerpin;
int starttune[] = {NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_F4, NOTE_G4};
int duration2[] = {100, 200, 100, 200, 100, 400, 100, 100, 100, 100, 200, 100, 500};
int note[] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5};
int duration[] = {100, 100, 100, 300, 100, 300};
boolean button[] = {2, 3, 4, 5}; //Buton bağlantıları
boolean ledpin[] = {8, 9, 10, 11};  // LED pinleri
int turn = 0;  // sayıcı
int buttonstate = 0;  //buton durum
int randomArray[100]; //
int inputArray[100]; 
 
 
void setup()
{
  Serial.begin(9600);
  speakerpin.begin(12); // hoparlör
 
  for(int x=0; x<4; x++)  // LED çıkış pinleri
  {
    pinMode(ledpin[x], OUTPUT);
  }
   
  for(int x=0; x<4; x++)
  {
    pinMode(button[x], INPUT);  // butonlar giriş olarak ayarlandı
    digitalWrite(button[x], HIGH); 
  }
 
  randomSeed(analogRead(0));
  for (int thisNote = 0; thisNote < 13; thisNote ++) {
      
     speakerpin.play(starttune[thisNote]);
      
     if (thisNote==0 || thisNote==2 || thisNote==4 || thisNote== 6)
     {
       digitalWrite(ledpin[0], HIGH);
     }
     if (thisNote==1 || thisNote==3 || thisNote==5 || thisNote== 7 || thisNote==9 || thisNote==11)
     {
       digitalWrite(ledpin[1], HIGH);
     }
     if (thisNote==8 || thisNote==12)
     {
       digitalWrite(ledpin[2], HIGH);
     } 
     if (thisNote==10)
     {  
       digitalWrite(ledpin[3], HIGH);
     }
     delay(duration2[thisNote]);
      
     speakerpin.stop();
     digitalWrite(ledpin[0], LOW);
     digitalWrite(ledpin[1], LOW);
     digitalWrite(ledpin[2], LOW);
     digitalWrite(ledpin[3], LOW);
     delay(25);
    }
  delay(1000);
}
  
void loop()
{  
  for (int y=0; y<=99; y++)
  {
     
    digitalWrite(ledpin[0], HIGH);
    digitalWrite(ledpin[1], HIGH);
    digitalWrite(ledpin[2], HIGH);
    digitalWrite(ledpin[3], HIGH);
   
    for (int thisNote = 0; thisNote < 6; thisNote ++) {
     
     speakerpin.play(note[thisNote]);
     
     delay(duration[thisNote]);
     
     speakerpin.stop();
     delay(25);
    }
     
    digitalWrite(ledpin[0], LOW);
    digitalWrite(ledpin[1], LOW);
    digitalWrite(ledpin[2], LOW);
    digitalWrite(ledpin[3], LOW);
    delay(1000);
   
    for (int y=turn; y <= turn; y++)
    {
      Serial.println("");
      Serial.print("Turn: ");
      Serial.print(y);
      Serial.println("");
      randomArray[y] = random(1, 5);
      for (int x=0; x <= turn; x++)
      {
        Serial.print(randomArray[x]);
       
        for(int y=0; y<4; y++)
        {
       
          if (randomArray[x] == 1 && ledpin[y] == 8)
          { 
            digitalWrite(ledpin[y], HIGH);
            speakerpin.play(NOTE_G3, 100);
            delay(400);
            digitalWrite(ledpin[y], LOW);
            delay(100);
          }
 
          if (randomArray[x] == 2 && ledpin[y] == 9)
          {
            digitalWrite(ledpin[y], HIGH);
            speakerpin.play(NOTE_A3, 100);
            delay(400);
            digitalWrite(ledpin[y], LOW);
            delay(100);
          }
   
          if (randomArray[x] == 3 && ledpin[y] == 10)
          {
            digitalWrite(ledpin[y], HIGH);
            speakerpin.play(NOTE_B3, 100);
            delay(400);
            digitalWrite(ledpin[y], LOW);
            delay(100);
          }
 
          if (randomArray[x] == 4 && ledpin[y] == 11)
          {
            digitalWrite(ledpin[y], HIGH);
            speakerpin.play(NOTE_C4, 100);
            delay(400);
            digitalWrite(ledpin[y], LOW);
            delay(100);
          }
        }
      }
    }
    input();
  }
}
  
  
  
void input() {
 
  for (int x=0; x <= turn;)
  {
 
    for(int y=0; y<4; y++)
    {
       
      buttonstate = digitalRead(button[y]);
     
      if (buttonstate == LOW && button[y] == 2)
      {
        digitalWrite(ledpin[0], HIGH);
        speakerpin.play(NOTE_G3, 100);
        delay(200);
        digitalWrite(ledpin[0], LOW);
        inputArray[x] = 1;
        delay(250);
        Serial.print(" ");
        Serial.print(1);
        if (inputArray[x] != randomArray[x]) {
          fail();                             
        }                                     
        x++;
      }
       if (buttonstate == LOW && button[y] == 3)
      {
        digitalWrite(ledpin[1], HIGH);
        speakerpin.play(NOTE_A3, 100);
        delay(200);
        digitalWrite(ledpin[1], LOW);
        inputArray[x] = 2;
        delay(250);
        Serial.print(" ");
        Serial.print(2);
        if (inputArray[x] != randomArray[x]) {
          fail();
        }
        x++;
      }
 
      if (buttonstate == LOW && button[y] == 4)
      {
        digitalWrite(ledpin[2], HIGH);
        speakerpin.play(NOTE_B3, 100);
        delay(200);
        digitalWrite(ledpin[2], LOW);
        inputArray[x] = 3;
        delay(250);
        Serial.print(" ");
        Serial.print(3);
        if (inputArray[x] != randomArray[x]) {
          fail();
        }
        x++;
      }
 
      if (buttonstate == LOW && button[y] == 5)
      {
        digitalWrite(ledpin[3], HIGH);
        speakerpin.play(NOTE_C4, 100);
        delay(200);
        digitalWrite(ledpin[3], LOW);
        inputArray[x] = 4;
        delay(250);
        Serial.print(" ");
        Serial.print(4);
        if (inputArray[x] != randomArray[x])
        {
          fail();
        }
        x++;
      }
    }
  }
  delay(500);
  turn++; //bir level yukarı
}
 
void fail() { //hata
  
  for (int y=0; y<=2; y++)
  { //hatadan dolayı bu mesajı alırsınız
     
    digitalWrite(ledpin[0], HIGH);
    digitalWrite(ledpin[1], HIGH);
    digitalWrite(ledpin[2], HIGH);
    digitalWrite(ledpin[3], HIGH);
    speakerpin.play(NOTE_G3, 300);
    delay(200);
    digitalWrite(ledpin[0], LOW);
    digitalWrite(ledpin[1], LOW);
    digitalWrite(ledpin[2], LOW);
    digitalWrite(ledpin[3], LOW);
    speakerpin.play(NOTE_C3, 300);
    delay(200);
  }
  delay(500);
  turn = -1; //resetle
}

Boş zamanlarda arduino ile uğraşan kendi halinde bir Öğretmen.

  1. mute 16 Nisan 2016 16:43

    warning: narrowing conversion of ’10’ from ‘int’ to ‘boolean {aka bool}’ inside { } [-Wnarrowing]

    bu sorunu veriyor her pinde yardımcı olabilirmisiniz ???

    Cevapla
    • Arduinocu 17 Nisan 2016 11:38

      kütüphaneyi doğru yüklediğinizden emin olun.

      saygılar

      Cevapla
  2. slhlvrn 6 Ekim 2015 07:31

    Ama programı yükleyince sadece başlangıç sesi geliyor sonra hiç ses yok

    Cevapla
    • admin 6 Ekim 2015 19:41

      sanırım butonlardan birinde sıkıntı war butonu algılayarak oyun bitti müziği çalıyor olabilir butonları tek tek çıkararak deneyebilir misin ?

      Cevapla
  3. slhlvrn 6 Ekim 2015 07:28

    Evet kontrol ettim hatta başka bir program ile test ettim sorun yok devre çalışıyor

    Cevapla
  4. admin 6 Ekim 2015 07:02

    Led baglantilarini kontrol edermisin ….

    arduinonun butona baglanan noktasinin GND ye gittiginden emin olmalisiniz \

    Cevapla
  5. salih 5 Ekim 2015 22:37

    ben bunu yaptım fakat başlangıçta ses geliyor sonra bişey olmuyor lütfen yardım

    Cevapla
  6. slhlvrn 5 Ekim 2015 14:02

    Teşekkür ederim bunu bugün yapıp denicem 🙂

    Cevapla
  7. slhlvrn 5 Ekim 2015 12:40

    Merhaba benim bir sorum olacak butona gnd mi giriş olucak

    Cevapla
    • admin 5 Ekim 2015 13:06

      Evet gnd girişli Ground olarak ( – ) Giriş olarak ayarlandı .
      aslında buton açık ve arduınoya herhangi değer gittmiyor . Eğer butona basılırsa Butona bağlı uca eksı değer gidiyor.

      Cevapla
  8. admin 14 Eylül 2015 17:41

    Denenmiş ve çalışan bir projedir. Çok hoşunuza gidecek buna emin olabilirsiniz.

    Cevapla

Bir Cevap Yazın

Time limit is exhausted. Please reload CAPTCHA.