Arduino codes for the Memory Game coded for NUCLEO-L053R8 board use

Dependencies:   arduino mbed

main.cpp

Committer:
kkc
Date:
2017-03-19
Revision:
0:c7dba72a5541

File content as of revision 0:c7dba72a5541:

#include "mbed.h"
#include "arduino.h"

    AnalogIn ran(A0);
    
    DigitalIn button1(D2);
    DigitalIn button2(D3);
    DigitalIn button3(D4);
    DigitalIn button4(D5);
    
    DigitalOut led1(D7);
    DigitalOut led2(D8);
    DigitalOut led3(D9);
    DigitalOut led4(D10);
    
    DigitalOut buzzer(D12);

    const int tones[] = {1915, 1700, 1519, 1432, 2700}; // tones when you press the LED's - the last one is when you fail.

// Variables
    int buttonState[] = {0,0,0,0};         // current state of the button
    int lastButtonState[] = {0,0,0,0};     // previous state of the button
    int buttonPushCounter[] = {0,0,0,0};


void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    buzzer = 1;
    delayMicroseconds(tone);
    buzzer = 0;
    delayMicroseconds(tone);
  }
}

int game_on = 0;
int pause = 0;
int currentlevel = 1; // This is the level (also the number of button presses to pass to next level)
long rand_num = 0; //initialize long variable for random number from 0-100.
int rando = 0; //initialize random integer for loopgame_on. Will be from 1-4 later.
int butpause = 500; //amount of time to pause for next button input (ghetto de-bounce)
int ledtime = 500; //amount of time each LED flashes for when button is pressed
int n_levels = 10; //number of levels until the game is won
int pinandtone = 0; //This integer is used when the sequence is displayed
int right = 0; //This variable must be 1 in order to go to the next level
int speedfactor = 5; //This is the final speed of the lights and sounds for the last level. This increases as more games are won
int leddelay = 200; //Initializing time for LED. This will decrease as the level increases


int main() {
    randomSeed(ran);
    
    
    while(1) {
        int n_array[n_levels];
        int u_array[n_levels];

        int i;
            //clears arrays both "n_array" and "u_array" and starts a new game
        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;
                 }
        //saves a random number in our n_array
         n_array[i]=rando;
      }
 if (i == n_levels){
   game_on = 1; 
   }

}


//shows the user the current sequence
if (pause == 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];
      if (pinandtone == 0){
        led1 = 1;
        playTone(tones[pinandtone], leddelay);
        led1 = 0;
        delay(100/speedfactor);}
      else if (pinandtone == 1){
        led2 = 1;
        playTone(tones[pinandtone], leddelay);
        led2 = 0;
        delay(100/speedfactor);}
      else if (pinandtone == 2){
        led3 = 1;
        playTone(tones[pinandtone], leddelay);
        led3 = 0;
        delay(100/speedfactor);}
      else if (pinandtone == 3){
        led4 = 1;
        playTone(tones[pinandtone], leddelay);
        led4 = 0;
        delay(100/speedfactor);}
           
    } 
    pause = 1;
}
i = 0;
int buttonchange = 0;    
int j = 0; // This is the current position in the sequence
while (j < currentlevel){    
    while (buttonchange == 0){
          for (i = 0; i < 4; i = i + 1){ 
            if (i == 0)
                buttonState[i] = button1.read();
            else if (i == 1)
                buttonState[i] = button2.read();
            else if (i == 2)
                buttonState[i] = button3.read();
            else if (i == 3)
                buttonState[i] = button4.read();
          buttonchange = buttonchange + buttonState[i];
        }
    }
    for (i = 0; i < 4; i = i + 1){
        if (buttonState[i] == 1) {
            if (i == 0){
                led1 = 1;
                playTone(tones[i], ledtime);
                led1 = 0;
            }
            else if (i == 1){
                led2 = 1;
                playTone(tones[i], ledtime);
                led2 = 0;
            }
            else if (i == 2){
                led3 = 1;
                playTone(tones[i], ledtime);
                led3 = 0;
            }
            else if (i == 3){
                led4 = 1;
                playTone(tones[i], ledtime);
                led4 = 0;
            }
                
            pause = 0;
            u_array[j]=i; 
            buttonState[i] = 0;
            buttonchange = 0;
         }
       } 
        if (u_array[j] == n_array[j]){
            j++;  
            right = 1;
            }
        else{
          
            right = 0;
            i = 4;
            j = currentlevel;
            pause = 0;
        }
}

if (right == 0){
  delay(300);
  i = 0;
  game_on = 0;
  currentlevel = 1;
  for (i = 0; i < 4; i = i + 1){
         if (i == 0)
            led1 = 1;
         else if (i == 1)
            led2 = 1;
         else if (i == 2)
            led3 = 1;
         else if (i == 3)
            led4 = 1;
         }
          playTone(tones[4], ledtime);
   for (i = 0; i < 4; i = i + 1){
         if (i == 0)
            led1 = 0;
         else if (i == 1)
            led2 = 0;
         else if (i == 2)
            led3 = 0;
         else if (i == 3)
            led4 = 0;
         }
       delay (200);
   for (i = 0; i < 4; i = i + 1){
         if (i == 0)
            led1 = 1;
         else if (i == 1)
            led2 = 1;
         else if (i== 2)
            led3 = 1;
         else if (i == 3)
            led4 = 1;
      }
        playTone(tones[4], ledtime);
   for (i = 0; i < 4; i = i + 1){
         if (i == 0)
            led1 = 0;
         else if (i == 1)
            led2 = 0;
         else if (i == 2)
            led3 = 0;
         else if (i == 3)
            led4 = 0; 
       }
       
    delay(500);
    game_on = 0;
}


//if you insert the right sequence it levels up
if (right == 1){
    currentlevel++;
    pause = 0;
    }
//if you finish the game    
if (currentlevel == n_levels){
  delay(500);
  // The following is the victory sound:
  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];
    if (note == 0){
        led1 = 1;
        playTone(tones[note], tempo[i]);
        led1 = 0;
    }
    else if (note == 1){
        led2 = 1;
        playTone(tones[note], tempo[i]);
        led2 = 0;
    }
    else if (note == 2){
        led3 = 1;
        playTone(tones[note], tempo[i]);
        led3 = 0;
    }
    else if (note == 3){
        led4 = 1;
        playTone(tones[note], tempo[i]);
        led4 = 0;
    }
    delay(breaks[i]);
  }
//sets game_on to 0, so it restarts a new game
game_on = 0;
currentlevel = 1;
n_levels = n_levels + 2;
speedfactor = speedfactor + 1;
    }
 
}
        
    }