# Quiz Game Buzzer

29,929

270

35

See version 2... Now with Bluetooth here : https://www.instructables.com/id/Quiz-Game-Show-Buzzer-Bluetooth-Edition/

A good friend of mine who's a teacher was doing quizzes in her class making students compete to answer questions... resulting in them complaining they raised their hands before the others.
I decided to give her this quiz show type buzzer for Christmas to solve her problems.

When one of the players press it's button (the fastest player wins this), the led of the right colour lights up saying he's in control... and no other buttons from the other players work, until the master of the game decides if the answer is good or not by pressing a little button on the main unit, giving a point or not to the player in control.

If you have any questions, comments, constructive criticism... don't hesitate to write :)

If you like my build, please like the video on YouTube and subscribe, it would be nice :)

P.S. There is a little problem with the display that I couldn't figure out how to solve. When playing a tune, the display doesn't light up anymore, like if no current goes to it anymore... anybody has an idea what the problem could be or how to fix it in code ? See the video if you don't understand what I mean.

### Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

## Step 2: The Plan

Sorry for my writing... I know it's not a very professional plan, but if I have more time I will make a better one and replace it... feel free to ask me anything about it if it's not clear ;)

## Step 3: The Prototype

I've decided to try my idea with an Arduino prototype.

The different buttons are for each "team" and for the master of the game to accept or reject an answer, giving the point to the team answering the question or not.

The leds lit up to know which team can currently answer.

The speaker plays a little tune... but it's not amplified, so it's not very loud.

The display shows the current score for each teams.

## Step 4: The Code

So... I'm including my code, but I'm not explaining it... and yes I know there is no comments... if you have questions, feel free to ask me, but I didn't do this to make a programming tutorial.

First you need to include "pitches.h"... but to be able to include it, you need to get it from here... Arduino Tone Tutorial

#include "pitches.h"

Then let's define some arrays to help ourselves for later when we need to use the 8 digits 7 segments display

```// array to activate particular digit on the 8x7segment module<br>// it is the common anode of 7 segment
byte digit[8] = {
0b10000000,  //digit 1 from right
0b01000000,  //digit 2 from right
0b00100000,  //digit 3 from right
0b00010000,  //digit 4 from right
0b00001000,  //digit 5 from right
0b00000100,  //digit 6 from right
0b00000010,  //digit 7 from right
0b00000001   //digit 8 from right
};
//array for decimal number, it is the cathode, please refer to the datasheet.
//therefore a logic low will activete the particular segment
//PGFEDCBA, segment on 7 segment, P is the dot
byte number[12] = {
0b11000000,  // 0
0b11111001,  // 1
0b10100100,  // 2
0b10110000,  // 3
0b10011001,  // 4
0b10010010,  // 5
0b10000010,  // 6
0b11111000,  // 7
0b10000000,  // 8
0b10010000,  // 9
0b01111111,  //dot
0b11111111   //blank
};```

We should also define some constants that will help us identify input and output pins later in the code

```const int blueLEDPin = 12;
const int greenLEDPin = 11;
const int redLEDPin = 10;
const int yellowLEDPin = 9;

const int teamPinDiff = 5;  //to help with computations later<

const int blueButton = 17;
const int greenButton = 16;
const int redButton = 15;
const int yellowButton = 14;
const int acceptButton = 18;
const int refuseButton = 19;

const int speakerPin = 8;

const int latchPin = 7;  //connect to RCK of 8x7segment module
const int clockPin = 6;  //connect to SCK of 8x7segment module
const int dataPin = 5;  //connect to DIO of 8x7segment module

const int multiplexDelay = 1;

const int dotNumber = 10;
const int blankNumber = 11;
```

We also need to keep some variables to know what's going on in the program

```int currentTeam = 0;
int blueScore = 0;
int greenScore = 0;
int redScore = 0;
int yellowScore = 0;byte blueDigit1 = number[blankNumber];
byte blueDigit2 = number[0];
byte greenDigit1 = number[blankNumber];
byte greenDigit2 = number[0];
byte redDigit1 = number[blankNumber];
byte redDigit2 = number[0];
byte yellowDigit1 = number[blankNumber];
byte yellowDigit2 = number[0];```

Then we setup the pin modes and the display

```void setup()
{
pinMode(blueLEDPin, OUTPUT);
pinMode(greenLEDPin, OUTPUT);
pinMode(redLEDPin, OUTPUT);
pinMode(yellowLEDPin, OUTPUT);
pinMode(blueButton, INPUT);
pinMode(greenButton, INPUT);
pinMode(redButton, INPUT);
pinMode(yellowButton, INPUT);
pinMode(acceptButton, INPUT);
pinMode(refuseButton, INPUT);
pinMode(speakerPin, OUTPUT);

digitalWrite(blueLEDPin, LOW);
digitalWrite(greenLEDPin, LOW);
digitalWrite(redLEDPin, LOW);
digitalWrite(yellowLEDPin, LOW);

pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
digitalWrite(latchPin, HIGH);
}```

And we create the loop function that will run after setup

```void loop()
{
ProgramLoop();
WriteScore();
}```

As you see, I've created functions to separate my code a bit better... so let's create those functions

```void ProgramLoop()
{
if (currentTeam == 0) {
currentTeam = blueLEDPin;
}
else if (digitalRead(greenButton) == HIGH) {
currentTeam = greenLEDPin;
}
else if (digitalRead(redButton) == HIGH) {
currentTeam = redLEDPin;
}
else if (digitalRead(yellowButton) == HIGH) {
currentTeam = yellowLEDPin;
}
}
else
{
digitalWrite(currentTeam, HIGH);
if (digitalRead(currentTeam + teamPinDiff) == LOW) {
PlayAccept();
IncrementScore();
}
else if (digitalRead(refuseButton) == HIGH) {
PlayDeny();
ResetState();
}
}
}
}```
```void ResetState()
{
currentTeam = 0;
digitalWrite(blueLEDPin, LOW);
digitalWrite(greenLEDPin, LOW);
digitalWrite(redLEDPin, LOW);
digitalWrite(yellowLEDPin, LOW);
}```
```void IncrementScore()
{
switch (currentTeam) {
case blueLEDPin:
blueScore++;
if (blueScore > 9) {
if (blueScore > 99) {
blueScore = 0;
}
blueDigit1 = number[blueScore / 10];
}
blueDigit2 = number[blueScore % 10];
break;
case greenLEDPin:
greenScore++;
if (greenScore > 9) {
if (greenScore > 99) {
greenScore = 0;
}
greenDigit1 = number[greenScore / 10];
}
greenDigit2 = number[greenScore % 10];
break;
case redLEDPin:
redScore++;
if (redScore > 9) {
if (redScore > 99) {
redScore = 0;
}
redDigit1 = number[redScore / 10];
}
redDigit2 = number[redScore % 10];
break;
case yellowLEDPin:
yellowScore++;
if (yellowScore > 9) {
if (yellowScore > 99) {
yellowScore = 0;
}
yellowDigit1 = number[yellowScore / 10];
}
yellowDigit2 = number[yellowScore % 10];
break;
}
ResetState();
}```
```void WriteScore()
{
display8x7segment(digit[0], number[dotNumber]);
display8x7segment(digit[0], blueDigit2);
display8x7segment(digit[1], blueDigit1);
display8x7segment(digit[2], number[dotNumber]);
display8x7segment(digit[2], greenDigit2);
display8x7segment(digit[3], greenDigit1);
display8x7segment(digit[4], number[dotNumber]);
display8x7segment(digit[4], redDigit2);
display8x7segment(digit[5], redDigit1);
display8x7segment(digit[6], number[dotNumber]);
display8x7segment(digit[6], yellowDigit2);
display8x7segment(digit[7], yellowDigit1);
}

void display8x7segment(byte digit, byte number)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, digit); // clears the right display
shiftOut(dataPin, clockPin, MSBFIRST, number); // clears the left display
digitalWrite(latchPin, HIGH);
delay(1);
}```
```void PlayAnswerBlue()
{
display8x7segment(digit[7], number[blankNumber]);
beep(speakerPin, NOTE_C5, 100);
delay(25);
beep(speakerPin, NOTE_C5, 100);
delay(25);
beep(speakerPin, NOTE_C5, 100);
}

display8x7segment(digit[7], number[blankNumber]);
beep(speakerPin, NOTE_D5, 100);
delay(25);
beep(speakerPin, NOTE_D5, 100);
delay(25);
beep(speakerPin, NOTE_D5, 100);
}

display8x7segment(digit[7], number[blankNumber]);
beep(speakerPin, NOTE_E5, 100);
delay(25);
beep(speakerPin, NOTE_E5, 100);
delay(25);
beep(speakerPin, NOTE_E5, 100);
}

display8x7segment(digit[7], number[blankNumber]);
beep(speakerPin, NOTE_F5, 100);
delay(25);
beep(speakerPin, NOTE_F5, 100);
delay(25);
beep(speakerPin, NOTE_F5, 100);
}

void PlayAccept() {
display8x7segment(digit[7], number[blankNumber]);
beep(speakerPin, NOTE_C5, 75);
delay(10);
beep(speakerPin, NOTE_D5, 75);
delay(10);
beep(speakerPin, NOTE_E5, 75);
delay(10);
beep(speakerPin, NOTE_G5, 75);
delay(10);
beep(speakerPin, NOTE_E5, 75);
delay(10);
beep(speakerPin, NOTE_G5, 75);
delay(10);
beep(speakerPin, NOTE_C6, 75);
}

void PlayDeny() {
display8x7segment(digit[7], number[blankNumber]);
beep(speakerPin, NOTE_A4, 1000);
}

void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds)
{
int x;
long delayAmount = (long)(1000000/frequencyInHertz);
long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
for (x=0; x < loopTime; x++)
{
digitalWrite(speakerPin, HIGH);
delayMicroseconds(delayAmount);
digitalWrite(speakerPin, LOW);
delayMicroseconds(delayAmount);
}
}```

## Step 5: The Buttons

I made the buttons with some big coloured buttons and some speaker cables... you can use whatever kind of cables you want. I also added connectors to make it easier to transport by removing it from the main unit.

## Step 6: The Main Unit

Here I've soldered everything together on the board and to all the components.

Then I've put everything in a wooden box that I built with the help of my dad, it's custom made for this project and took a lot of time to built, but I'm really happy with the final product.

Oh and the Arduino has been replaced by an ATmega328 chip with a 16mhz ceramic resonator to save on cost and on space.

I'm also using a 5V power supply to power the whole thing... since the power should be more or less constant, I made the bet of not using a voltage regulator, but it would probably be safer to use one.

## Step 7: The Finished Product

Here's the Game Show Buzzer in action :)

See version 2... Now with Bluetooth here : https://www.instructables.com/id/Quiz-Game-Show-Buzzer-Bluetooth-Edition/

## Step 8: Here's How It Plays

If you like my build, please like the video on YouTube and subscribe, it would be nice :)

Runner Up in the
Microcontroller Contest

## Recommendations

• ### Internet of Things Class

22,798 Enrolled

## 35 Discussions

Thank you for sharing this project, I'm also trying to recreate this buzzer system for some Retro Themed Trivia. I've put it all together now but I'm learning the process of using a different 8-Digit LED Display MAX7219 which I think does modify some of the code.

good job mr......i,m from indonesia student..... i,m coding mr...thank you.......jokosantoso592.js@gmail.com.......mr.clapoti is the best.....please coding i like

It is just to help with the algorithm, so you can read a pin according to a team number... it's to make the code smaller and not repeat too mnay things.

Wonderful result. Seems to be very useful for this kind of games.

I'm in the process of making this for my own classroom. I just wanted to say awesome job and thanks for the detailed instructions! One quick thing I noticed, there is a copy/paste issue in the first block of code right before the "//array for decimal number" line. I figured I'd point this out to help avoid confusion. Thanks again!

I was wondering how I could change it so that there would eight boxes instead of four can you please help, thanks. : )

Hi, I'm interested about this project. Btw, I'm still new with Arduino, so looking to this project, I want to try and improve my Arduino skill. I just want to ask, the code you had provided here, I just can copy it, and compile it together? No need extra alteration, except the tone?

3 replies

You don't need to change anything, if you do the electronics like I did and plug everything on the same pin, it should work correctly.
Ask me if you have other questions :)

Good luck :)

ok. im nt worried about the wiring. just the code, so, i just copy from the first one, and keep following until i get to bottom? is it like that?

I need a little help with the code: error: 'display' was not declared in this scope and the last line of the code: for (x=0;x

sketch_sep07f.ino: In function 'void beep(unsigned char, int, long int)':

sketch_sep07f:305: error: expected `;' at end of input

sketch_sep07f:305: error: expected primary-expression at end of input

sketch_sep07f:305: error: expected `)' at end of input

If someone can help that would be great

Thanks