Hackster is hosting Impact Spotlights: Smart Home. Watch the stream live on Thursday!Hackster is hosting Impact Spotlights: Smart Home. Stream on Thursday!
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,609
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
0 projects • 11 followers
Contact

Comments

Please log in or sign up to comment.