Bird
Raised Fist0
Raspberry Piprogramming~10 mins

Reaction time game in Raspberry Pi - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Reaction time game
Start Game
↓
Wait Random Time
↓
Show Signal (LED ON)
↓
Wait for Button Press
↓
Calculate Reaction Time
↓
Display Reaction Time
↓
Option to Restart or Exit
The game waits a random time, then signals the player to press a button, measures reaction time, and shows the result.
Execution Sample
Raspberry Pi
import time
import random
import RPi.GPIO as GPIO

# Setup pins
LED_PIN = 18
BUTTON_PIN = 23

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Wait random time
wait_time = random.uniform(2, 5)
time.sleep(wait_time)

# Turn on LED
GPIO.output(LED_PIN, GPIO.HIGH)
start_time = time.time()

# Wait for button press
while GPIO.input(BUTTON_PIN) == GPIO.HIGH:
    pass

reaction_time = time.time() - start_time
print(f"Reaction time: {reaction_time:.3f} seconds")
This code waits a random time, lights an LED, waits for a button press, then prints the reaction time.
Execution Table
StepActionVariable ValuesOutput/State
1Setup GPIO pinsLED_PIN=18, BUTTON_PIN=23Pins ready
2Generate wait_timewait_time=3.7 (example)Waiting...
3Sleep for wait_timetime.sleep(3.7)Paused
4Turn on LEDLED_PIN=ONLED lights up
5Record start_timestart_time=1000.0 (example)Timer started
6Wait for button pressBUTTON_PIN=HIGH initiallyWaiting for press
7Button pressedBUTTON_PIN=LOWDetected press
8Calculate reaction_timereaction_time=0.245Reaction time calculated
9Print reaction_timereaction_time=0.245Output: Reaction time: 0.245 seconds
💡 Button pressed, reaction time measured and displayed
Variable Tracker
VariableStartAfter Step 2After Step 4After Step 5After Step 7Final
wait_timeNone3.73.73.73.73.7
LED_PIN1818ONONONON
BUTTON_PIN23232323LOWLOW
start_timeNoneNoneNone1000.01000.01000.0
reaction_timeNoneNoneNoneNoneNone0.245
Key Moments - 3 Insights
Why do we wait a random time before turning on the LED?
Waiting a random time (see Step 2 and 3) prevents the player from predicting when to press the button, ensuring the reaction time is genuine.
Why do we check if BUTTON_PIN is HIGH in the while loop?
The button input is HIGH when not pressed (Step 6). The loop waits until it becomes LOW (pressed), so we detect the exact moment the player reacts.
How is reaction time calculated?
Reaction time is the difference between the current time and start_time recorded when LED turned on (Step 8). This measures how fast the player pressed the button.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of LED_PIN after Step 4?
AOFF
BON
CHIGH
DLOW
💡 Hint
Check the 'Variable Values' column at Step 4 in the execution_table.
At which step does the program detect the button press?
AStep 7
BStep 6
CStep 5
DStep 8
💡 Hint
Look for the step where BUTTON_PIN changes from HIGH to LOW in the execution_table.
If the random wait_time was shorter, how would the reaction_time change?
AIt would be longer
BIt would be shorter
CIt would stay the same
DIt would be zero
💡 Hint
Reaction time measures time after LED lights up, independent of wait_time (see variable_tracker).
Concept Snapshot
Reaction time game on Raspberry Pi:
- Wait random time (2-5 sec)
- Turn on LED as signal
- Wait for button press
- Calculate reaction time = press time - LED on time
- Show result
Use GPIO pins for LED and button input.
Full Transcript
This reaction time game uses Raspberry Pi GPIO pins. First, the program sets up the LED and button pins. It waits a random time between 2 and 5 seconds to prevent guessing. Then it turns on the LED to signal the player to press the button. The program records the time when the LED turns on. It waits until the button is pressed, detecting the change from HIGH to LOW. When pressed, it calculates the reaction time by subtracting the LED on time from the current time. Finally, it prints the reaction time in seconds. This process repeats if the game restarts.

Practice

(1/5)
1. What is the main purpose of a reaction time game on a Raspberry Pi?
easy
A. To measure how quickly a player presses a button after an LED lights up
B. To count how many times a button is pressed in a minute
C. To display random colors on an LED strip
D. To control the brightness of an LED using a sensor

Solution

  1. Step 1: Understand the game goal

    The reaction time game tests how fast a player reacts to a signal, usually an LED lighting up.
  2. Step 2: Identify the key action

    The player must press a button as soon as the LED lights up to measure reaction speed.
  3. Final Answer:

    To measure how quickly a player presses a button after an LED lights up -> Option A
  4. Quick Check:

    Reaction time = button press speed after LED [OK]
Hint: Focus on measuring speed after LED signal [OK]
Common Mistakes:
  • Confusing reaction time with counting presses
  • Thinking the game controls LED brightness
  • Assuming it displays colors randomly
2. Which Python code snippet correctly sets up GPIO pin 17 as an input for a button on Raspberry Pi?
easy
A. GPIO.setup(17, GPIO.OUT)
B. GPIO.setup(17, GPIO.IN)
C. GPIO.input(17, GPIO.IN)
D. GPIO.output(17, GPIO.IN)

Solution

  1. Step 1: Recall GPIO setup syntax

    To set a pin as input, use GPIO.setup(pin_number, GPIO.IN).
  2. Step 2: Match the correct option

    GPIO.setup(17, GPIO.IN) uses GPIO.setup(17, GPIO.IN), which is correct for input pin setup.
  3. Final Answer:

    GPIO.setup(17, GPIO.IN) -> Option B
  4. Quick Check:

    GPIO.setup(pin, GPIO.IN) sets input pin [OK]
Hint: Use GPIO.setup with GPIO.IN for input pins [OK]
Common Mistakes:
  • Using GPIO.OUT instead of GPIO.IN for input
  • Confusing GPIO.input() with GPIO.setup()
  • Trying to use GPIO.output() on input pins
3. What will be the output of this code snippet in a reaction time game?
import time
start = time.time()
# LED lights up here
input('Press Enter as fast as you can!')
end = time.time()
print(f'Reaction time: {end - start:.2f} seconds')
medium
A. No output because input() is not called
B. Reaction time: 0.00 seconds
C. SyntaxError due to missing parentheses
D. Reaction time: time taken between prompt and Enter press

Solution

  1. Step 1: Understand timing with time.time()

    The code records time before and after waiting for user input.
  2. Step 2: Calculate reaction time

    The difference end - start measures how long the user took to press Enter after the prompt.
  3. Final Answer:

    Reaction time: time taken between prompt and Enter press -> Option D
  4. Quick Check:

    Reaction time = end - start after input [OK]
Hint: time.time() difference measures reaction delay [OK]
Common Mistakes:
  • Assuming reaction time is always zero
  • Confusing syntax errors with correct code
  • Thinking input() is not called
4. Identify the error in this Raspberry Pi reaction game code snippet:
GPIO.setup(18, GPIO.OUT)
GPIO.setup(23, GPIO.IN)
GPIO.output(23, GPIO.HIGH)
# Wait for button press on pin 23
medium
A. Pin 23 should be set as GPIO.OUT
B. GPIO.setup() missing for pin 18
C. GPIO.output() used on input pin 23, which is incorrect
D. No error, code is correct

Solution

  1. Step 1: Check pin setup

    Pin 23 is set as input with GPIO.setup(23, GPIO.IN).
  2. Step 2: Identify incorrect usage

    GPIO.output() cannot be used on input pins; it is only for output pins.
  3. Final Answer:

    GPIO.output() used on input pin 23, which is incorrect -> Option C
  4. Quick Check:

    GPIO.output() only for output pins [OK]
Hint: Use GPIO.output only on output pins [OK]
Common Mistakes:
  • Trying to write output on input pins
  • Forgetting to setup pins before use
  • Assuming no error when pin modes mismatch
5. You want to improve your Raspberry Pi reaction time game by adding a random delay before lighting the LED. Which code snippet correctly adds a random delay between 1 and 5 seconds before turning on the LED on pin 18?
hard
A. import random import time wait = random.randint(1, 5) time.sleep(wait) GPIO.output(18, GPIO.HIGH)
B. import random wait = random.random(1, 5) time.sleep(wait) GPIO.output(18, GPIO.HIGH)
C. import random wait = random.randint(1, 5) GPIO.output(18, GPIO.HIGH) time.sleep(wait)
D. import time wait = random.randint(1, 5) time.sleep(wait) GPIO.output(18, GPIO.HIGH)

Solution

  1. Step 1: Use random.randint for integer delay

    random.randint(1, 5) returns an integer between 1 and 5 seconds.
  2. Step 2: Sleep before turning LED on

    time.sleep(wait) pauses the program before GPIO.output(18, GPIO.HIGH) lights the LED.
  3. Final Answer:

    import random import time wait = random.randint(1, 5) time.sleep(wait) GPIO.output(18, GPIO.HIGH) -> Option A
  4. Quick Check:

    random.randint + sleep before LED ON [OK]
Hint: Sleep before LED ON using random.randint delay [OK]
Common Mistakes:
  • Using random.random with arguments (invalid)
  • Sleeping after turning LED on
  • Not importing random module
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard