Arduino İle Puan Sayaçlı Buzz Wire

Arduino İle Puan Sayaçlı Buzz Wire

Eski güzel tel oyunu, bu sefer skor sayacı (ve gösterge ışıkları).

 

Bileşenler

 

  • Arduino Nano R3
  • Buzzer
  • 5 mm LED ( Kırmızı )
  • 5 mm LED ( Yeşil )
  • Shift Register
  • 7 Segment LED Ekran ( Kırmızı )
  • 221 Ohm Direnç  x10
  • 9v Pil

 

Proje Hakkında

Eski güzel tel oyununun başarısızlıklarınızı sayan ve kabloya 10 kez vurursanız çıldıran gelişmiş bir versiyon.

 

nervous_meter_score.ino

 

 

int latchPin = 3;      // ST_CP [RCK] on 74HC595

int clockPin = 4;      // SH_CP [SCK] on 74HC595

int dataPin = 2;     // DS [S1] on 74HC595

const int STOP_LED = 6;

const int GO_LED = 7;

const int BUZZ = 8;

const int TOUCH = 10;

 

const int fail_threshold = 9;

 

enum Status

{

  STOP = 0,

  GO = 1

};

 

 

void setup() {

  Serial.begin(9600);

  displayInitialSetup();

  gameInitialSetup();

}

 

 

Status status = GO;

int failCounter = 0;

 

void loop() {

 

 

  while (failCounter > fail_threshold)

    {

      gameover();

    }

 

  switch (status)

  {

    case GO:

      digitalWrite(GO_LED, HIGH);

      digitalWrite(STOP_LED, LOW);

      digitalWrite(BUZZ, LOW);

      if (digitalRead(TOUCH) == HIGH)

      {

        status = STOP;

      }

      break;

     

    case STOP:

      digitalWrite(GO_LED, LOW);

      failCounter++;

      if (failCounter > fail_threshold)

        break;

      displayDigit(failCounter);

      Serial.println(failCounter);

      failAlarm();

      status = GO;

      break;

  }

 

}

 

 

byte seg_spin[6] =

{

  B10000000,

  B01000000,

  B00100000,

  B00010000,

  B00001000,

  B00000100

};

void gameover()

{

  for (int i=0; i<6; i++)

  {

    digitalWrite(BUZZ, HIGH);

    delay(5);

    digitalWrite(BUZZ, LOW);

    delay(50);

     digitalWrite(latchPin, LOW);

     shiftOut(dataPin, clockPin, LSBFIRST, seg_spin[i]);

     digitalWrite(latchPin, HIGH);

     delay(10);

  }

}

 


score_display.ino

 

 

byte seg_digits[10] =

{

  B11111100,  // = 0

  B01100000,  // = 1

  B11011010,  // = 2

  B11110010,  // = 3

  B01100110,  // = 4

  B10110110,  // = 5

  B10111110,  // = 6

  B11100000,  // = 7

  B11111110,  // = 8

  B11100110   // = 9

};

                            

void displayDigit(int x)

{

   digitalWrite(latchPin, LOW);

   shiftOut(dataPin, clockPin, LSBFIRST, seg_digits[x]);

   digitalWrite(latchPin, HIGH);

}

 

void displayInitialSetup()

{

  pinMode(latchPin, OUTPUT);

  pinMode(dataPin, OUTPUT); 

  pinMode(clockPin, OUTPUT);

  displayDigit(0);

}

 

game.ino

 

 

void gameInitialSetup()

{

  pinMode(STOP_LED, OUTPUT);

  pinMode(GO_LED, OUTPUT);

  pinMode(BUZZ, OUTPUT);

  pinMode(TOUCH, HIGH);

  digitalWrite(TOUCH, LOW);

}

 

 

void failAlarm()

{

    digitalWrite(STOP_LED, HIGH);

    beep();

    delay(150);

 

    digitalWrite(STOP_LED, LOW);

    digitalWrite(BUZZ, LOW);

    delay(500);

}

 

void beep()

{

  for(int i=0; i<3; i++)

  {

    digitalWrite(BUZZ, HIGH);

    delay(50);

    digitalWrite(BUZZ, LOW);

    delay(50);

  }

}


Şematik

Sadece D10'un 5V'ye bağlanmasının, zil sesinin bip sesi çıkarmasına ve saymaya neden olan bir arıza oluşturacağını unutmayın. Şemada bunu göstermenin bir yolu yoktu. Bu yüzden kablolarınızı ve yapınızı buna göre oluşturun.

Blog Etiketleri :
IdeaSoft® | E-Ticaret paketleri ile hazırlanmıştır.