Arduino Star Wars Trivia Game
![1212170003.jpg](/proxy/?url=https://content.instructables.com/FSN/85FA/JB2S19Y7/FSN85FAJB2S19Y7.jpg&filename=1212170003.jpg)
This project is an instructable on how to build a Star Wars Trivia Game. A player will get asked 5 questions. They answer either True or False. Three right answers and the player wins. This game is easy to customize and can be lengthen at a users content. The hardwire is straightforward, not clumsy or random like a blaster. Its a civilized game. And don't have a bad feeling about it, it will be just like Beggar's Canyon.
Materials Needed:
1 Breadboard
1 Arduino Uno
1 Buzzer
2 Buttons
1 LCD Screen
6 220 Resistor
30 Wires
Add a Button
![Button 1.jpg](/proxy/?url=https://content.instructables.com/FBH/TZEV/JASJNDEG/FBHTZEVJASJNDEG.jpg&filename=Button 1.jpg)
![button1.jpg](/proxy/?url=https://content.instructables.com/FME/G1RL/JASJNDEX/FMEG1RLJASJNDEX.jpg&filename=button1.jpg)
Just like Luke Skywalker, Ive learned not to rush into situations. So we are going to start small. Lets just add 1 button.
- The very first thing we need to do is to wire the 5V pin to the postive(red) side of the breadboard. After that we need to run a wire from a ground pin to the negative(blue) side of the breadboard. As these are lightsaber colors, they shouldn't be to hard to remember.
- Next we need to run a wire on the top right prong of the button to a pin. I used 13. Remember to try and plan ahead as space will become very limited.
- On the bottom left prong, a wire will be used to connect the button to the postive part of the breadboard.
- Bottom right prong will have a resistor that will be put in the grounded side of the breadboard.
Now we are going to code the Arduino to register the button.
<p>#include <LiquidCrystal.h> <br></p><p>int trueButton = 13; </p><p>int score = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(trueButtonPin, INPUT);</p><p>}</p><p>void loop() { // put your main code here, to run repeatedly:</p><p>}</p>
Add 1 More Buttons
![NewFInal.jpg](/proxy/?url=https://content.instructables.com/FIA/9PGI/JB2S189R/FIA9PGIJB2S189R.jpg&filename=NewFInal.jpg)
![1208171358.jpg](/proxy/?url=https://content.instructables.com/FLF/FYCI/JB2S18DC/FLFFYCIJB2S18DC.jpg&filename=1208171358.jpg)
Now we are going to put 1 more buttons on the breadboard. The second button will be used for False Statements
In wiring the buttons, simply follow the instructions from step 1 twice.
1.We need to run a wire on the top right prong of the button to a pin. Remember to try and plan ahead as space will become very limited.
2.On the bottom left prong, a wire will be used to connect the button to the postive part of the breadboard.
3.Bottom right prong will have a resistor that will be put in the grounded side of the breadboard.
Now we are going to redo the code so that the extra button is regersited.
<p>#include <LiquidCrystal.h> <br></p><p>int trueButton = 13; int falseButton = 12;</p><p>int score = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(trueButton, INPUT); pinMode(falseButton, INPUT);</p><p>}</p><p>void loop() { // put your main code here, to run repeatedly:</p><p>}</p>
Add 2 Leds
![1208171402.jpg](/proxy/?url=https://content.instructables.com/FG1/1GU2/JB2S1976/FG11GU2JB2S1976.jpg&filename=1208171402.jpg)
![NewBuzzer.jpg](/proxy/?url=https://content.instructables.com/FQO/3QDQ/JB2S19W1/FQO3QDQJB2S19W1.jpg&filename=NewBuzzer.jpg)
Now we are going to add 2 LEDS. These will help show which player hit their button first. To keep in the spirit of our game, lets make the LEDS blue and red. Blue will be for True and Red will be for False. If the Player hits the True button, Blue will go off. If the player hits the False button, Red will go off. We will program this into the code.
- Run a wire on the left to the grounding rail
- use a resistor to help with the flow and run a wire to a pin at the end of the resistor.
Code follows
<p>#include <LiquidCrystal.h> <br></p><p>int trueButton = 13; int falseButton = 12;</p><p>int bluePin = 11; int redPin = 10;</p><p>int score = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(trueButton, INPUT); pinMode(falseButton, INPUT);</p><p>pinMode(bluePin, OUTPUT); pinMode(redPin, OUTPUT);</p><p>}</p><p>void loop() { // put your main code here, to run repeatedly:</p>
Add a Buzzer
![NEWnewBuzzer.jpg](/proxy/?url=https://content.instructables.com/FD6/LUCC/JB2S197I/FD6LUCCJB2S197I.jpg&filename=NEWnewBuzzer.jpg)
![1208171409.jpg](/proxy/?url=https://content.instructables.com/F9P/ABIV/JB2S1987/F9PABIVJB2S1987.jpg&filename=1208171409.jpg)
Now whats a game without noises? So lets add a buzzer. Depending on the which player hits their button, a different noise will emit from the buzzer. Here is how to wire a buzzer.
- On the positive side of the buzzer, hook a resistor right below its prong. Run a wire at the end of the resistor in a pin. Note that in order to save space, I'm going to use the Analog pins. Yes, the analog pins can be used as digital. I am going to hook mine into A0. Also note that A0 can also be described as pin 14.
- On the other prong, run a wire into the grounding rail on the breadboard.
Now lets code the buzzer into what we have so far.
<p>#include <LiquidCrystal.h> <br></p><p>int trueButton = 13; int falseButton = 12;</p><p>int bluePin = 11; int redPin = 10;</p><p>int buzzer = 9;</p><p>int score = 0; void setup() { // put your setup code here, to run once: Serial(9600); pinMode(trueButton, INPUT); pinMode(falseButton, INPUT);</p><p>pinMode(bluePin, OUTPUT); pinMode(redPin, OUTPUT);</p><p>pinMode(buzzer, OUTPUT); }</p><p>void loop() { // put your main code here, to run repeatedly:</p><p>}</p>
Add an LCD Screen
![NewLCd.jpg](/proxy/?url=https://content.instructables.com/FB5/1VUD/JB2S197K/FB51VUDJB2S197K.jpg&filename=NewLCd.jpg)
![1211172346.jpg](/proxy/?url=https://content.instructables.com/F5X/HDCU/JB2S1AUH/F5XHDCUJB2S1AUH.jpg&filename=1211172346.jpg)
A trivia game is useless unless we can see the questions. So lets add an LCD screen. Here is where it will all come together. Now, I know the breadboard is getting full. so we are going to have to be careful on how we wire this. Here are the instructions for the screen.
First, add an potentiometer to your breadboard to control the lcd screen. Be careful of where you put it since you are probably running out of space by now.
Use the front left to connect your potentiometer to the power rail
Use the front right to ground your potentiometer.The back will be connected to the lcd screen.
Add the LCD screen to your breadboard. Start on the left, just like how we read.
Ground the first screen pin to the grounding rail
Wire the second pin to the power rail.
Third LCD pin goes to Pin 8 on the Arduino
Fourth LCD pin goes to Pin 7 on the Arduino
Fifth goes to Pin 6 on the Arduino
Sixth Pin goes to pin 5 on the Arduino
Pins 7 through 10 on the LCD screen are empty
Pin 11 goes to Pin 4 on the Arduino
Pin 12 goes to the grounded rail
Pin 13 goes to Pin 3 on the Arduino
Pin 14 goes to the back of the potentiometer
Pin 15 goes to the Power rail
Pin 16 goes to the Ground Rail.
Now that we have the LED Screen wired in, lets look at our code.
Modify Code
This is where the fun begins.
Now you will have to update your code to use the lcd screen. For that you will use the library Liquid Crystal.
Now lets code the logic and lcd screen into the code.
#include <LiquidCrystal.h>
String topQuestions[] = {"Chewie is a ", "Is Luke ", "Rey is from", "Kylo Ren Is", "Jar Jar was "}; String bottomQuestions[] = {"Wookie", "Sith","Tatooine", "Ben Solo", "Annoying" }; int maxNumQuestions =5; int location = 0; int answers[] = {0, 1, 1, 0, 0};
int trueButton = 12; int falseButton = 13;
int bluePin = 10; int redPin = 11;
LiquidCrystal lcd(3,4,5,6,7,8); //Sets the LCD Screen
int buzzer = 9;
int score = 0;
void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(trueButton, INPUT); pinMode(falseButton, INPUT);
pinMode(bluePin, OUTPUT); pinMode(redPin, OUTPUT);
pinMode(buzzer, OUTPUT);
lcd.begin(16,2); lcd.print("Time To Play"); lcd.setCursor(0,1); lcd.print("Star Wars Trivia!"); digitalWrite(bluePin, HIGH); digitalWrite(redPin, HIGH); tone(buzzer, 5000, 500);
delay(3000); lcd.clear(); digitalWrite(bluePin, LOW); digitalWrite(redPin, LOW); } void loop() { lcd.setCursor(0,0); lcd.print(topQuestions[location]); lcd.setCursor(0,1); lcd.print(bottomQuestions[location]); int playerAnswer = buttonPressed(); if(answers[location] == playerAnswer) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Correct!"); tone(buzzer, 5000, 500); digitalWrite(bluePin, HIGH); digitalWrite(redPin, HIGH);
delay(3000); lcd.clear(); digitalWrite(bluePin, LOW); digitalWrite(redPin, LOW); score ++; location++; if(location >= maxNumQuestions) { location = 0; } } else if(-1 != playerAnswer) { lcd.clear(); lcd.setCursor(0,0); lcd.print("WRONG!"); tone(buzzer, 1500, 500); delay(3000); lcd.clear(); location++; if(location >= maxNumQuestions) { location = 0; } } if(score >= 3) { lcd.clear(); lcd.setCursor(0,0); lcd.print("You Win!"); digitalWrite(bluePin, HIGH); digitalWrite(redPin, HIGH); tone(buzzer, 6000, 500);
delay(3000); lcd.clear(); digitalWrite(bluePin, LOW); digitalWrite(redPin, LOW); location = 0; score = 0; } }
int buttonPressed() { int answerButton = -1;
if(digitalRead(trueButton) == HIGH) { digitalWrite(bluePin, HIGH); answerButton = 0; } else if(digitalRead(falseButton) == HIGH) { digitalWrite(redPin, HIGH); answerButton = 1; } digitalWrite(bluePin, LOW); digitalWrite(redPin, LOW);
return answerButton; }
Never Tell Me the Odds
![1212170003.jpg](/proxy/?url=https://content.instructables.com/FVW/T58Z/JB2S1E8U/FVWT58ZJB2S1E8U.jpg&filename=1212170003.jpg)
Thats It! The Star Wars Trivia Game is completed! Thank You for reading my Instructables and for putting up with the constant Star Wars references. I hope you've enjoyed it.
May The Force Be With You