Last Updated on October 16, 2025
Have you ever watched Quiz shows or participated and wondered how they instantly detect who pressed the button first? to make the light and buzzer ON, Of course electronics! there are different types of fastest finger first quiz buzzer circuit available, but here is the Quickest and easy to build quiz buzzer circuit with 16 MHz clock speed.
Here we are going to build simple and reliable fastest finger first quiz buzzer system using an Arduino Nano. This project is perfect for small quiz competitions or fun events where multiple player compete to play or answer first.
Here we designed it for 3 players you can add more players by adding extra push buttons and LEDs (you have to add it on code also). This project detects first button pressed and then locks out others instantly each player represent unique color and buzzer tone frequency. Reset button clears and readies the system again.
Schematic
Wiring
Components Required
- Arduino Nano
- Push buttons = 4, 3 for players + 1 for reset
- LED = 3, (5mm – Red, Green, Yellow)
- 5V Buzzer (Piezo type)
- Resistor 1KΩ = 3
- Breadboard & Wires
- USB Cable to program Arduino nano
Working Video
Construction & Working
Each button is connected to a digital pin with internal pull up enabled so that we don’t need external Resistor. Connect the pins of button, LED and Arduino nano as per the table.
Arduino Nano Pin | Component Pin |
D1 (Tx) | Red Button |
D2 | Green Button |
D3 | Yellow Button |
D8 | Reset Button |
D4 | Red LED Anode |
D5 | Green LED Anode |
D6 | Yellow LED Anode |
D7 | Buzzer Positive pin |
GND | Ground Line |
Each LED cathode pins are connected to GND through 1KΩ Resistor.
Code for Quiz Buzzer
// ------------------------------------------------------ // Fastest Finger First Quiz Buzzer using Arduino Nano // Author: Paul Brace (Modified & Improved by RiyazDeen) // Date: Updated Version - October 2025 // ------------------------------------------------------ // Features: // - 3 player buttons (Red, Green, Amber) // - First button pressed lights its LED and plays unique tone // - Reset button flashes all LEDs twice and readies the system // - Simple debounce and reliable single-winner logic // ------------------------------------------------------ const int redButton = 1; const int greenButton = 2; const int amberButton = 3; const int redLED = 4; const int greenLED = 5; const int amberLED = 6; const int buzzer = 7; const int resetButton = 8; // Tone frequencies for each player const int redNote = 262; // C4 const int greenNote = 523; // C5 const int amberNote = 1047; // C6 const int duration = 250; // tone duration (ms) bool waiting = false; // ------------------------------------------------------ // Setup // ------------------------------------------------------ void setup() { pinMode(redButton, INPUT_PULLUP); pinMode(greenButton, INPUT_PULLUP); pinMode(amberButton, INPUT_PULLUP); pinMode(resetButton, INPUT_PULLUP); pinMode(redLED, OUTPUT); pinMode(greenLED, OUTPUT); pinMode(amberLED, OUTPUT); pinMode(buzzer, OUTPUT); // Initial LED test sequence for (int i = 0; i < 2; i++) { FlashLEDs(); } // Ready signal tone(buzzer, 1000, 200); delay(300); waiting = true; } // ------------------------------------------------------ // Function: Flash all LEDs twice // ------------------------------------------------------ void FlashLEDs() { for (int i = 0; i < 2; i++) { digitalWrite(redLED, HIGH); digitalWrite(greenLED, HIGH); digitalWrite(amberLED, HIGH); delay(300); digitalWrite(redLED, LOW); digitalWrite(greenLED, LOW); digitalWrite(amberLED, LOW); delay(300); } } // ------------------------------------------------------ // Function: Check button presses (first one wins) // ------------------------------------------------------ bool checkButtons() { if (digitalRead(redButton) == LOW) { digitalWrite(redLED, HIGH); tone(buzzer, redNote, duration); delay(50); // debounce return true; } if (digitalRead(greenButton) == LOW) { digitalWrite(greenLED, HIGH); tone(buzzer, greenNote, duration); delay(50); return true; } if (digitalRead(amberButton) == LOW) { digitalWrite(amberLED, HIGH); tone(buzzer, amberNote, duration); delay(50); return true; } return false; } // ------------------------------------------------------ // Main Loop // ------------------------------------------------------ void loop() { // If Reset button is pressed if (digitalRead(resetButton) == LOW) { FlashLEDs(); tone(buzzer, 1000, 200); // ready beep delay(300); waiting = true; } // Check for first player if (waiting) { waiting = !checkButtons(); // once pressed, waiting becomes false } }
After wiring just upload the code after done uploading, Arduino Nano gets ready by blinking all three LEDs and goes OFF then give alert buzzer sound, now its ready to detect fastest finger (which button pressed first). When the Arduino detects a Low signal (button press) then it decides which player first and activates that player’s LED and tone, other buttons are ignored until the system is reset.
The first button is detected using digitalRead(), Reset triggers all LEDs to flash twice and gives a ready beep. Here the use of INPUT_PULLUP ensures the input stay stable and there is no random triggering even if you use long wires between external components and Arduino Nano boards.