-
Notifications
You must be signed in to change notification settings - Fork 0
/
Tiebreaker_pushbutton.c
93 lines (79 loc) · 1.93 KB
/
Tiebreaker_pushbutton.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//
// This sketch implements a "Jeopardy" style contestant response tiebreaker.
//
// Each contestant has a pushbutton switch. When they know the answer,
// they push it. This turns on the corresponding light.
// The light for the first person to push their button blinks.
//
// Pressing the reset switch restarts the game.
//
// J. Peterson, Apr '12
//
// The LEDs, cathodes connected to ground
int Lights[3] = {13, 12, 11};
// The pushbutton switches connect the input to ground when closed.
int Switches[3] = { 10, 9, 8 };
// Connect to ground to reset the game
int Reset = 7;
// Set to -1 when no winner set.
int winner;
boolean SwitchPushed[3] = { false, false, false };
void setup()
{
int i;
for (i = 0; i < 3; i++)
{
pinMode(Lights[i], OUTPUT);
pinMode(Switches[i], INPUT);
digitalWrite(Switches[i], HIGH); // Enable pullup
}
pinMode( Reset, INPUT );
digitalWrite( Reset, HIGH ); // Enable pullup
LightsOff();
}
// Reset to the initial state.
void LightsOff()
{
int i;
winner = -1;
for (i = 0; i < 3; i++)
{
digitalWrite( Lights[i], LOW);
SwitchPushed[i] = false;
}
}
void loop()
{
int i;
// If no winner selected, first button selects the winner.
if (winner == -1)
{
for (i = 0; (i < 3) && (winner == -1); i++)
if (digitalRead( Switches[i] ) == LOW)
winner = i;
}
else
{
for (i = 0; i < 3; i++)
{
if (i == winner) // Blink winner's light
{
if (((millis() /100) % 10) & 1)
digitalWrite( Lights[winner], HIGH );
else
digitalWrite( Lights[winner], LOW );
}
else
{
// When switch is pushed, record it.
if (digitalRead( Switches[i] ) == LOW)
SwitchPushed[i] = true;
// Display non-winner lights
digitalWrite( Lights[i], SwitchPushed[i] ? HIGH : LOW );
}
}
}
// Reset button
if (digitalRead( Reset ) == LOW)
LightsOff();
}