Memory Game Final

by 739128 in Circuits > Arduino

106 Views, 0 Favorites, 0 Comments

Memory Game Final

5D4C92F6-1358-45AD-9ED8-16F728F09338 (1).png
5D4C92F6-1358-45AD-9ED8-16F728F09338 (1).png
5D4C92F6-1358-45AD-9ED8-16F728F09338.png

I made a memory game circuit which you play by matching the order of the leds flashing remembering them and pushing the button

Supplies

5D4C92F6-1358-45AD-9ED8-16F728F09338.png

Components include

Arduino 

Breadboard 

4x 10k resistors 

4x 330 resistors

Wires of all colors 

4x push buttons 

Buzzer

Placing Buttons and Leds

5D4C92F6-1358-45AD-9ED8-16F728F09338.png

For the first step is to place the push button and leds use the picture above to place them and follow the pattern four times for the four Leds remember to connect one of the sides of the pushbutton to the negative rail

Wiring Arduino

5D4C92F6-1358-45AD-9ED8-16F728F09338.png

Follow the picture and wire accordingly if your confused about which arduino pin the wire goes into dont be afraid to just choose your own and change the variables in the code as all you have to do is match it

Coding

5D4C92F6-1358-45AD-9ED8-16F728F09338.png

add the code to your arduino and make any necessary changes to variables :

const int button1 = 2;

const int button2 = 3;

const int button3 = 4;

const int button4 = 5;

const int led1 = 7;

const int led2 = 8;

const int led3 = 9;

const int led4 = 10;

const int buzzer = 12;


int game_on = 0;

int wait = 0;

int currentlevel = 1;

long rand_num = 0;

int rando = 0;

int butwait = 500;

int ledtime = 500;

int n_levels = 10;

int pinandtone = 0;

int right = 0;

int speedfactor = 5;

int leddelay = 200;


const int tones[] = {261, 349, 392, 440, 2700};



int buttonState[] = {0,0,0,0};

int lastButtonState[] = {0,0,0,0};

int buttonPushCounter[] = {0,0,0,0};



void playTone(int tone, int duration) {

for (long i = 0; i < duration * 1000L; i += tone * 2) {

digitalWrite(buzzer, HIGH);

delayMicroseconds(tone);

digitalWrite(buzzer, LOW);

delayMicroseconds(tone);

}

}


void setup() {

randomSeed(analogRead(0));

pinMode(button1, INPUT);

pinMode(button2, INPUT);

pinMode(button3, INPUT);

pinMode(button4, INPUT);

pinMode(led1, OUTPUT);

pinMode(led2, OUTPUT);

pinMode(led3, OUTPUT);

pinMode(led4, OUTPUT);

pinMode(buzzer, OUTPUT);


}



void loop() {

int n_array[n_levels];

int u_array[n_levels];


int i;


if (game_on == 0){

for(i=0; i<n_levels; i=i+1){

n_array[i]=0;

u_array[i]=0;

rand_num = random(1,200);

if (rand_num <= 50)

rando=0;

else if (rand_num>50 && rand_num<=100)

rando=1;

else if (rand_num>100 && rand_num<=150)

rando=2;

else if (rand_num<=200)

rando=3;

n_array[i]=rando;

}

game_on = 1;


}




if (wait == 0){

delay (200);

i = 0;

for (i = 0; i < currentlevel; i= i + 1){

leddelay = ledtime/(1+(speedfactor/n_levels)*(currentlevel - 1));

pinandtone = n_array[i];

digitalWrite(pinandtone+7, HIGH);

playTone(tones[pinandtone], leddelay);

digitalWrite(pinandtone+7, LOW);

delay(100/speedfactor);

}

wait = 1;

}

i = 0;

int buttonchange = 0;

int j = 0;

while (j < currentlevel){

while (buttonchange == 0){

for (i = 0; i < 4; i = i + 1){

buttonState[i] = digitalRead(i+2);

buttonchange = buttonchange + buttonState[i];

}

}

for (i = 0; i < 4; i = i + 1){

if (buttonState[i] == HIGH) {

digitalWrite(i+7, HIGH);

playTone(tones[i], ledtime);

digitalWrite(i+7, LOW);

wait = 0;

u_array[j]=i;

buttonState[i] = LOW;

buttonchange = 0;

}

}

if (u_array[j] == n_array[j]){

j++;

right = 1;

}

else{

right = 0;

i = 4;

j = currentlevel;

wait = 0;

}

}


if (right == 0){

delay(300);

i = 0;

game_on = 0;

currentlevel = 1;

for (i = 0; i < 4; i = i + 1){

digitalWrite(i+7, HIGH);

}

playTone(tones[4], ledtime);

for (i = 0; i < 4; i = i + 1){

digitalWrite(i+7, LOW);

}

delay (200);

for (i = 0; i < 4; i = i + 1){

digitalWrite(i+7, HIGH);

}

playTone(tones[4], ledtime);

for (i = 0; i < 4; i = i + 1){

digitalWrite(i+7, LOW);

}

delay(500);

game_on = 0;

}




if (right == 1){

currentlevel++;

wait = 0;

}

if (currentlevel == n_levels){

delay(500);

int notes[] = {2, 2, 2, 2, 0, 1, 2, 1, 2};

int note = 0;

int tempo[] = {200, 200, 200, 400, 400, 400, 200, 200, 600};

int breaks[] = {100, 100, 100, 200, 200, 200, 300, 100, 200};

for (i = 0; i < 9; i = i + 1){

note = notes[i];

digitalWrite(note+7, HIGH);

playTone(tones[note], tempo[i]);

digitalWrite(note+7, LOW);

delay(breaks[i]);

}


game_on = 0;

currentlevel = 1;

n_levels = n_levels + 2;

speedfactor = speedfactor + 1;

}

}

Play It

Final Evaluation

upload the code onto your computer and see if it works it should be something as shown in the video above

Resources

5D4C92F6-1358-45AD-9ED8-16F728F09338.png

I used the memory game from this link https://www.instructables.com/ARDUINO-MEMORY-GAME-2/ to help me as a basis of how it should work and look  and used the video https://www.youtube.com/watch?v=azBmL9qMK-8 on how to get the loop to work