Arduino: Game Using LEDS
by Winston Barber in Circuits > Arduino
1758 Views, 1 Favorites, 0 Comments
Arduino: Game Using LEDS
This Arduino project is a simple memory game using LEDS. To play the game you need to press the button on the upper right area and a chain of 5 LEDS will light up. In order to win you will need to press them in the exact same order. You will be able to tell if you got it right from the two red and green LEDS to the right. Finally you can change the speed that the LEDS light up and how many light up each round to make the game a bit more challenging.
Parts
To make this project you will ned the following:
> 1 Arduino UNO board
> 1 breadboard
> 7 LEDS
> 1 piezo
> 6 buttons
> 13 resistors (optional)
> A lot of cables (approximately 25)
Circuit
If the schematic is unclear do here is a clearer explanation:
> LEDS (left to right):
// Game LEDS
- Green LED -- > pin 7
- Red LED -- > pin 8
- Yellow LED -- > pin 9
- Red LED -- > pin 10
- Green LED -- > pin 11
// Correct or false LEDS
- Green LED -- > pin A0 (14)
- Red LED -- > pin A1 (15)
> Buttons (left to right):
// Game buttons:
- Button 1 -- > pin 6
- Button 2 -- > pin 5
- Button 3 -- > pin 4
- Button 4 -- > pin 3
- Button 5 -- > pin 2
- Button (reset) -- > pin 12
> Piezo:
- piezo -- > pin 13
Code
// Sorry for the format it broke when I copied it (press ctrl + t while selecting all the text to fix if it bothers you)
//from left to right LEDS
const int led1 = 7;
const int led2 = 8;
const int led3 = 9;
const int led4 = 10;
const int led5 = 11;
//from left to right BUTTONS
const int b1 = 6;
const int b2 = 5;
const int b3 = 4;
const int b4 = 3;
const int b5 = 2;
//restart game button const
int restart = 12;
//correct or false
const int ledGreen = 14;
const int ledRed = 15;
boolean played = false;
boolean out = false;
boolean winner = false;
int i;
int z;
//piezo pin const
int piezo = 13;
//button states
int buttonState1;
int buttonState2;
int buttonState3;
int buttonState4;
int buttonState5;
int restartButtonState;
//check LEDS
int ledON; //check which LEDS are on
int ledPrevious = -1; //dont have duplicates (optional)
//scoring system
int score = 0; //scoring system
int rounds = 20; //rounds
int countRound = 1;
//speed of LEDS
int s = 500; //speed of LEDS (suggested speed 800 for easy, 600 normal, <600 hard)
int a = 0; //accelaration of LEDS (every round)
int digits = 4; //how many leds on every round (its -1)
int sp = 50; //speed when playing
//timer
unsigned long startMillis;
const unsigned long period = 1000;
boolean once = false;
//arrays with saved rounds
int savedOrder[5];
int savedLed[5];
void setup () {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(b1, INPUT_PULLUP);
pinMode(b2, INPUT_PULLUP);
pinMode(b3, INPUT_PULLUP);
pinMode(b4, INPUT_PULLUP);
pinMode(b5, INPUT_PULLUP);
pinMode(ledGreen, OUTPUT);
pinMode(ledRed, OUTPUT);
pinMode(restart, INPUT_PULLUP);
Serial.begin(9600);
}
void loop () {
restartButtonState = digitalRead(restart);
if (restartButtonState == LOW) {
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, LOW);
for (int j = 0 ; j <= digits ; j++) {
randomSeed(analogRead(A5));
do { //optional same LED twice or not
ledPrevious = ledON;
ledON = random(1, 6);
}
while(ledPrevious == ledON);
savedLed[j] = ledON;
if (savedLed[j] == 1) {
digitalWrite(led1, HIGH);
delay(s);
digitalWrite(led1, LOW);
delay(s);
}
else if (savedLed[j] == 2) {
digitalWrite(led2, HIGH);
delay(s);
digitalWrite(led2, LOW);
delay(s);
}
else if (savedLed[j] == 3) {
digitalWrite(led3, HIGH);
delay(s);
digitalWrite(led3, LOW);
delay(s);
}
else if (savedLed[j] == 4) {
digitalWrite(led4, HIGH);
delay(s);
digitalWrite(led4, LOW);
delay(s);
}
else if (savedLed[j] == 5) {
digitalWrite(led5, HIGH);
delay(s);
digitalWrite(led5, LOW);
delay(s);
}
savedOrder[j] = j;
if (j == digits) {
played = true;
i = 0;
}
}
}
if (played == true) {
do {
played = false;
readButtonStates();
if (buttonState1 == LOW) {
if (savedLed[i] == 1 && savedOrder[i] == i) {
digitalWrite(led1, HIGH);
digitalWrite(ledGreen, HIGH);
delay(s);
digitalWrite(led1, LOW);
digitalWrite(ledGreen, LOW);
delay(sp);
i++;
}
else {
digitalWrite(ledRed, HIGH);
delay(s);
digitalWrite(ledRed, LOW);
delay(sp);
out = true;
}
}
else if (buttonState2 == LOW) {
if (savedLed[i] == 2 && savedOrder[i] == i) {
digitalWrite(led2, HIGH);
digitalWrite(ledGreen, HIGH);
delay(s);
digitalWrite(led2, LOW);
digitalWrite(ledGreen, LOW);
delay(sp);
i++;
}
else {
digitalWrite(ledRed, HIGH);
delay(sp);
digitalWrite(ledRed, LOW);
delay(sp);
out = true;
}
}
else if (buttonState3 == LOW) {
if (savedLed[i] == 3 && savedOrder[i] == i) {
digitalWrite(led3, HIGH);
digitalWrite(ledGreen, HIGH);
delay(s);
digitalWrite(led3, LOW);
digitalWrite(ledGreen, LOW);
delay(sp);
i++;
}
else {
digitalWrite(ledRed, HIGH);
delay(s);
digitalWrite(ledRed, LOW);
delay(sp);
out = true;
}
}
else if (buttonState4 == LOW) {
if (savedLed[i] == 4 && savedOrder[i] == i) {
digitalWrite(led4, HIGH);
digitalWrite(ledGreen, HIGH);
delay(s);
digitalWrite(led4, LOW);
digitalWrite(ledGreen, LOW);
delay(sp);
i++;
}
else {
digitalWrite(ledRed, HIGH);
delay(s);
digitalWrite(ledRed, LOW);
delay(sp);
out = true;
}
}
else if (buttonState5 == LOW) {
if (savedLed[i] == 5 && savedOrder[i] == i) {
digitalWrite(led5, HIGH);
digitalWrite(ledGreen, HIGH);
delay(s);
digitalWrite(led5, LOW);
digitalWrite(ledGreen, LOW);
delay(sp);
i++;
}
else {
digitalWrite(ledRed, HIGH);
delay(s);
digitalWrite(ledRed, LOW);
delay(sp);
out = true;
}
}
if (i == digits+1) {
Serial.write("win");
winner = true;
}
}
while (out == false && winner == false);
}
if (winner == true) {
tone(piezo, 2000);
delay(200);
noTone(piezo);
delay(200);
digitalWrite(ledGreen, HIGH);
winner = false;
}
else if (out == true) {
tone(piezo, 200);
delay(200);
noTone(piezo);
delay(200);
digitalWrite(ledRed, HIGH);
out = false;
}
}
void readButtonStates() {
buttonState1 = digitalRead(b1);
buttonState2 = digitalRead(b2);
buttonState3 = digitalRead(b3);
buttonState4 = digitalRead(b4); buttonState5 = digitalRead(b5);
}