behrooz66
Published © MIT

Buzz Wire with Score Counter

The good old buzz wire game, this time with score counter (as well as indicator lights).

IntermediateFull instructions provided36,336
Buzz Wire with Score Counter

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
×1
Buzzer
Buzzer
×1
5 mm LED: Red
5 mm LED: Red
×1
5 mm LED: Green
5 mm LED: Green
×1
Shift Register- Serial to Parallel
Texas Instruments Shift Register- Serial to Parallel
×1
7 Segment LED Display, Red
7 Segment LED Display, Red
×1
Resistor 221 ohm
Resistor 221 ohm
×10
9V battery (generic)
9V battery (generic)
×1

Hand tools and fabrication machines

Drill, Screwdriver
Drill, Screwdriver
Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Schematics

Schematic

Just keep in mind the D10 getting connected to the 5V, will constitute a failure causing the buzzer to beep and counter to count. In the schematic there wasn't a way to show it.
So build up your wires and structure accordingly :)

Code

nervous_meter_score.ino

Arduino
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

Arduino
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

Arduino
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);
  }
}

Credits

behrooz66

behrooz66

0 projects • 11 followers

Comments