Skip to main content
deleted 10270 characters in body; added 76 characters in body
Source Link
Katie
  • 43
  • 1
  • 7

This is essentially my wiring just with different pins chosen: enter image description here

#include <LiquidCrystal.h>
/*(RS, E, D4, D5, D6, D7)*/
LiquidCrystal lcd(1,2,19,18,17,16); 

// Give name to all LEDs from pin 10 to 13
int led0 = 6;
int led1 = 7;
int led2 = 8;
int led3 = 9;


//Give name to all buttons from pin 0 to 3
int button0 = 10;
int button1 = 11;
int button2 = 12;
int button3 = 13;

//Setting both states to HIGH when not pressed
int button0State = HIGH;
int button1State = HIGH;
int button2State = HIGH;
int button3State = HIGH;

//Button states previously recorded, setting to HIGH (not pressed)
int lastButton0State = HIGH;
int lastButton1State = HIGH;
int lastButton2State = HIGH;
int lastButton3State = HIGH;

unsigned long debounceDelay = 50;

//Give name to the speaker (pin 8)
int speaker = 5;


// the setup routine runs once when you press reset:

void setup() {   
  Serial.begin(9600);             
  analogWrite(0,80); //Setting contrast
  lcd.begin(16,2); //Dimensions of LCD screen
  lcd.print("Welcome!");

  // initialize the digital pin as an output.

  pinMode(led0, OUTPUT);   
  pinMode(led1, OUTPUT);  
  pinMode(led2, OUTPUT);  
  pinMode(led3, OUTPUT); 

  //initialize buttons as input.

  pinMode(button0, INPUT_PULLUP);
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);

}//End setup



// the loop routine runs over and over again forever:

void loop() {

  //Debouncing buttons
  int reading0 = digitalRead(button0);
  int reading1 = digitalRead(button1);     
  int reading2 = digitalRead(button2);     
  int reading3 = digitalRead(button3);
  
  if (reading0 == lastButton0State && reading1 == lastButton1State && reading2 == lastButton2State && reading3 == lastButton3State){
    return;  // Do nothing if no change
  }
  delay (debounceDelay);  // Debounce

  // Re-read so we can catch both buttons down at once
  reading0 = digitalRead(button0);
  reading1 = digitalRead(button1);     
  reading2 = digitalRead(button2);   
  reading3 = digitalRead(button3);  

  // save for next time
  lastButton0State = reading0;
  lastButton1State = reading1;
  lastButton2State = reading2;
  lastButton3State = reading3;

  //Continue after debouncing
  WelcomeLight();
  int SIZE = 25;
  int sequence[SIZE];

  while(1){
    //First we make the random sequence (values from 0 to 3)

    randomSeed(analogRead(A0));    

    for(int j=0; j < SIZE; j++){

      sequence[j] = random(0, 4);
    }


    //Now, the game starts
    int led = 0;
    int seq = 0;
    int reading = 1;

    while (seq == 0){
      showsequence(sequence, reading);
      seq = readsequence(sequence, reading, led);
      if (seq == 0) //well done
      {
        reading ++;

      }

    }//End while

  }//End while

}//End loop



//Plays before game

void WelcomeLight(){
 
  int i = 0;
  for (i=0; i <4; i++){

    tone(speaker, NOTE_A3);
    digitalWrite(led0, HIGH);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);             

    tone(speaker, NOTE_B3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);

    tone(speaker, NOTE_C3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);

  }//End for loop

  for (i=0; i <3; i++){

    tone(speaker, NOTE_F3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(100);

    noTone(speaker);

  }//End for

  delay(200);

}//End welcome lights



//When the player loses

void FailLight(){

    tone(speaker, NOTE_G3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_F3);

    
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_E3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    
    delay(200);

  for (int i=0; i <3; i++){

    tone(speaker, NOTE_A2);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

   
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);


    delay(100);

  }//End for

  delay(200);

}//End fail method




//Returns the state of the button

int ReadButton(){

  button0 = digitalRead(10);
  Serial.print("button0: ");
  Serial.println(button0);
  
  button1 = digitalRead(11);
  Serial.print("button1: ");
  Serial.println(button1);
  
  button2 = digitalRead(12);
  Serial.print("button2: ");
  Serial.println(button2);
  
  button3 = digitalRead(13);
  Serial.print("button3: ");
  Serial.println(button3);

  if(button0 == LOW){

    digitalWrite(led0, HIGH);
    tone(speaker, NOTE_E4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led0, LOW);

    return 0;

  }//End if


  if(button1 == LOW){

    digitalWrite(led1, HIGH);
    tone(speaker, NOTE_A4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led1, LOW);

    return 1;

  }//End if


  if(button2 == LOW){

    digitalWrite(led2, HIGH);
    tone(speaker, NOTE_D4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led2, LOW);

    return 2;

  }//End if


  if(button3 == LOW){

    digitalWrite(led3, HIGH );
    tone(speaker, NOTE_G4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led3, LOW);

    return 3;

  }//End if

  else{

    return -1;
  }

}//End read button method


//Method that shows the current sequence (until 'count') with lights and sounds

void showsequence (int array[],int counts){

  int i = 0;

  while(i < counts){

    int led = array[i];
    int delayvalue = 500 - (3 * counts);
    
    switch (led){

    case 0:
      digitalWrite(led0, HIGH); 
      tone(speaker, NOTE_E4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led0, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 1:
      digitalWrite(led1, HIGH); 
      tone(speaker, NOTE_A4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led1, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 2:
      digitalWrite(led2, HIGH); 
      tone(speaker, NOTE_D4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led2, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 3:
      digitalWrite(led3, HIGH); 
      tone(speaker, NOTE_G4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led3, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    }//End of switch case

  }//End while

}//End show sequence





//Compares sequence with buttons pushed

int readsequence(int seq[], int current, int led){

  int i = 0;

  while(i < current){

  int button = ReadButton();
  Serial.print("button = ");
  Serial.println(button);
  Serial.print("seq = ");
  Serial.println(seq[i]);
  
    if(button != seq[i] && button != -1) //(game ends)
    {
    
      FailLight();
      return -1;

    }//End if

    if(button == seq[i])  // (game continues)
    {

      i++;
    }//End if


  }//End while

  delay(250);

  return 0;

}//End read sequence

This is essentially my wiring just with different pins chosen:

#include <LiquidCrystal.h>
/*(RS, E, D4, D5, D6, D7)*/
LiquidCrystal lcd(1,2,19,18,17,16); 

// Give name to all LEDs from pin 10 to 13
int led0 = 6;
int led1 = 7;
int led2 = 8;
int led3 = 9;


//Give name to all buttons from pin 0 to 3
int button0 = 10;
int button1 = 11;
int button2 = 12;
int button3 = 13;

//Setting both states to HIGH when not pressed
int button0State = HIGH;
int button1State = HIGH;
int button2State = HIGH;
int button3State = HIGH;

//Button states previously recorded, setting to HIGH (not pressed)
int lastButton0State = HIGH;
int lastButton1State = HIGH;
int lastButton2State = HIGH;
int lastButton3State = HIGH;

unsigned long debounceDelay = 50;

//Give name to the speaker (pin 8)
int speaker = 5;


// the setup routine runs once when you press reset:

void setup() {   
  Serial.begin(9600);             
  analogWrite(0,80); //Setting contrast
  lcd.begin(16,2); //Dimensions of LCD screen
  lcd.print("Welcome!");

  // initialize the digital pin as an output.

  pinMode(led0, OUTPUT);   
  pinMode(led1, OUTPUT);  
  pinMode(led2, OUTPUT);  
  pinMode(led3, OUTPUT); 

  //initialize buttons as input.

  pinMode(button0, INPUT_PULLUP);
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);

}//End setup



// the loop routine runs over and over again forever:

void loop() {

  //Debouncing buttons
  int reading0 = digitalRead(button0);
  int reading1 = digitalRead(button1);     
  int reading2 = digitalRead(button2);     
  int reading3 = digitalRead(button3);
  
  if (reading0 == lastButton0State && reading1 == lastButton1State && reading2 == lastButton2State && reading3 == lastButton3State){
    return;  // Do nothing if no change
  }
  delay (debounceDelay);  // Debounce

  // Re-read so we can catch both buttons down at once
  reading0 = digitalRead(button0);
  reading1 = digitalRead(button1);     
  reading2 = digitalRead(button2);   
  reading3 = digitalRead(button3);  

  // save for next time
  lastButton0State = reading0;
  lastButton1State = reading1;
  lastButton2State = reading2;
  lastButton3State = reading3;

  //Continue after debouncing
  WelcomeLight();
  int SIZE = 25;
  int sequence[SIZE];

  while(1){
    //First we make the random sequence (values from 0 to 3)

    randomSeed(analogRead(A0));    

    for(int j=0; j < SIZE; j++){

      sequence[j] = random(0, 4);
    }


    //Now, the game starts
    int led = 0;
    int seq = 0;
    int reading = 1;

    while (seq == 0){
      showsequence(sequence, reading);
      seq = readsequence(sequence, reading, led);
      if (seq == 0) //well done
      {
        reading ++;

      }

    }//End while

  }//End while

}//End loop



//Plays before game

void WelcomeLight(){
 
  int i = 0;
  for (i=0; i <4; i++){

    tone(speaker, NOTE_A3);
    digitalWrite(led0, HIGH);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);             

    tone(speaker, NOTE_B3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);

    tone(speaker, NOTE_C3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);

  }//End for loop

  for (i=0; i <3; i++){

    tone(speaker, NOTE_F3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(100);

    noTone(speaker);

  }//End for

  delay(200);

}//End welcome lights



//When the player loses

void FailLight(){

    tone(speaker, NOTE_G3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_F3);

    
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_E3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    
    delay(200);

  for (int i=0; i <3; i++){

    tone(speaker, NOTE_A2);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

   
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);


    delay(100);

  }//End for

  delay(200);

}//End fail method




//Returns the state of the button

int ReadButton(){

  button0 = digitalRead(10);
  Serial.print("button0: ");
  Serial.println(button0);
  
  button1 = digitalRead(11);
  Serial.print("button1: ");
  Serial.println(button1);
  
  button2 = digitalRead(12);
  Serial.print("button2: ");
  Serial.println(button2);
  
  button3 = digitalRead(13);
  Serial.print("button3: ");
  Serial.println(button3);

  if(button0 == LOW){

    digitalWrite(led0, HIGH);
    tone(speaker, NOTE_E4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led0, LOW);

    return 0;

  }//End if


  if(button1 == LOW){

    digitalWrite(led1, HIGH);
    tone(speaker, NOTE_A4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led1, LOW);

    return 1;

  }//End if


  if(button2 == LOW){

    digitalWrite(led2, HIGH);
    tone(speaker, NOTE_D4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led2, LOW);

    return 2;

  }//End if


  if(button3 == LOW){

    digitalWrite(led3, HIGH );
    tone(speaker, NOTE_G4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led3, LOW);

    return 3;

  }//End if

  else{

    return -1;
  }

}//End read button method


//Method that shows the current sequence (until 'count') with lights and sounds

void showsequence (int array[],int counts){

  int i = 0;

  while(i < counts){

    int led = array[i];
    int delayvalue = 500 - (3 * counts);
    
    switch (led){

    case 0:
      digitalWrite(led0, HIGH); 
      tone(speaker, NOTE_E4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led0, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 1:
      digitalWrite(led1, HIGH); 
      tone(speaker, NOTE_A4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led1, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 2:
      digitalWrite(led2, HIGH); 
      tone(speaker, NOTE_D4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led2, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 3:
      digitalWrite(led3, HIGH); 
      tone(speaker, NOTE_G4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led3, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    }//End of switch case

  }//End while

}//End show sequence





//Compares sequence with buttons pushed

int readsequence(int seq[], int current, int led){

  int i = 0;

  while(i < current){

  int button = ReadButton();
  Serial.print("button = ");
  Serial.println(button);
  Serial.print("seq = ");
  Serial.println(seq[i]);
  
    if(button != seq[i] && button != -1) //(game ends)
    {
    
      FailLight();
      return -1;

    }//End if

    if(button == seq[i])  // (game continues)
    {

      i++;
    }//End if


  }//End while

  delay(250);

  return 0;

}//End read sequence

This is essentially my wiring just with different pins chosen: enter image description here

added picture
Source Link
Katie
  • 43
  • 1
  • 7

This is essentially my wiring just with different pins chosen:

This is essentially my wiring just with different pins chosen:

added debouncing
Source Link
Katie
  • 43
  • 1
  • 7
/*********************************************************************/

#include <LiquidCrystal.h>
/*(RS, E, D4, D5, D6, D7)*/
LiquidCrystal lcd(1,2,19,18,17,16); 

// Give name to all LEDs from pin 10 to 13
int led0 = 6;
int led1 = 7;
int led2 = 8;
int led3 = 9;


//Give name to all buttons from pin 0 to 3
int button0 = 10;
int button1 = 11;
int button2 = 12;
int button3 = 13;

//Setting both states to HIGH when not pressed
int button0State = HIGH;
int button1State = HIGH;
int button2State = HIGH;
int button3State = HIGH;

//Button states previously recorded, setting to HIGH (not pressed)
int lastButton0State = HIGH;
int lastButton1State = HIGH;
int lastButton2State = HIGH;
int lastButton3State = HIGH;

unsigned long debounceDelay = 50;

//Give name to the speaker (pin 8)
int speaker = 5;


// the setup routine runs once when you press reset:

void setup() {   
  Serial.begin(9600);             
  analogWrite(0,80); //Setting contrast
  lcd.begin(16,2); //Dimensions of LCD screen
  lcd.print("Welcome!");

  // initialize the digital pin as an output.

  pinMode(led0, OUTPUT);   
  pinMode(led1, OUTPUT);  
  pinMode(led2, OUTPUT);  
  pinMode(led3, OUTPUT); 

  //initialize buttons as input.

  pinMode(button0, INPUT_PULLUP);
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);

}//End setup



// the loop routine runs over and over again forever:

void loop() {

  //Debouncing buttons
  int reading0 = digitalRead(button0);
  int reading1 = digitalRead(button1);     
  int reading2 = digitalRead(button2);     
  int reading3 = digitalRead(button3);
  
  if (reading0 == lastButton0State && reading1 == lastButton1State && reading2 == lastButton2State && reading3 == lastButton3State){
    return;  // Do nothing if no change
  }
  delay (debounceDelay);  // Debounce

  // Re-read so we can catch both buttons down at once
  reading0 = digitalRead(button0);
  reading1 = digitalRead(button1);     
  reading2 = digitalRead(button2);   
  reading3 = digitalRead(button3);  

  // save for next time
  lastButton0State = reading0;
  lastButton1State = reading1;
  lastButton2State = reading2;
  lastButton3State = reading3;

  //Continue after debouncing
  WelcomeLight();
  int SIZE = 25;
  int sequence[SIZE];

  while(1){
    //First we make the random sequence (values from 0 to 3)

    randomSeed(analogRead(A0));    

    for(int j=0; j < SIZE; j++){

      sequence[j] = random(0, 4);
    }


    //Now, the game starts
    int led = 0;
    int seq = 0;
    int reading = 1;

    while (seq == 0){
      showsequence(sequence, reading);
      seq = readsequence(sequence, reading, led);
      if (seq == 0) //well done
      {
        reading ++;

      }

    }//End while

  }//End while

}//End loop



//Plays before game

void WelcomeLight(){
 
  int i = 0;
  for (i=0; i <4; i++){

    tone(speaker, NOTE_A3);
    digitalWrite(led0, HIGH);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);             

    tone(speaker, NOTE_B3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);

    tone(speaker, NOTE_C3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);

  }//End for loop

  for (i=0; i <3; i++){

    tone(speaker, NOTE_F3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(100);

    noTone(speaker);

  }//End for

  delay(200);

}//End welcome lights



//When the player loses

void FailLight(){

    tone(speaker, NOTE_G3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_F3);

    
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_E3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    
    delay(200);

  for (int i=0; i <3; i++){

    tone(speaker, NOTE_A2);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

   
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);


    delay(100);

  }//End for

  delay(200);

}//End fail method




//Returns the state of the button

int ReadButton(){

  button0 = digitalRead(10);
  Serial.print("button0: ");
  Serial.println(button0);
  
  button1 = digitalRead(11);
  Serial.print("button1: ");
  Serial.println(button1);
  
  button2 = digitalRead(12);
  Serial.print("button2: ");
  Serial.println(button2);
  
  button3 = digitalRead(13);
  Serial.print("button3: ");
  Serial.println(button3);

  if(button0 == LOW){

    digitalWrite(led0, HIGH);
    tone(speaker, NOTE_E4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led0, LOW);

    return 0;

  }//End if


  if(button1 == LOW){

    digitalWrite(led1, HIGH);
    tone(speaker, NOTE_A4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led1, LOW);

    return 1;

  }//End if


  if(button2 == LOW){

    digitalWrite(led2, HIGH);
    tone(speaker, NOTE_D4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led2, LOW);

    return 2;

  }//End if


  if(button3 == LOW){

    digitalWrite(led3, HIGH );
    tone(speaker, NOTE_G4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led3, LOW);

    return 3;

  }//End if

  else{

    return -1;
  }

}//End read button method


//Method that shows the current sequence (until 'count') with lights and sounds

void showsequence (int array[],int counts){

  int i = 0;

  while(i < counts){

    int led = array[i];
    int delayvalue = 500 - (3 * counts);
    
    switch (led){

    case 0:
      digitalWrite(led0, HIGH); 
      tone(speaker, NOTE_E4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led0, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 1:
      digitalWrite(led1, HIGH); 
      tone(speaker, NOTE_A4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led1, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 2:
      digitalWrite(led2, HIGH); 
      tone(speaker, NOTE_D4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led2, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 3:
      digitalWrite(led3, HIGH); 
      tone(speaker, NOTE_G4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led3, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    }//End of switch case

  }//End while

}//End show sequence





//Compares sequence with buttons pushed

int readsequence(int seq[], int current, int led){

  int i = 0;

  while(i < current){

  int button = ReadButton();
  Serial.print("button = ");
  Serial.println(button);
  Serial.print("seq = ");
  Serial.println(seq[i]);
  
    if(button != seq[i] && button != -1) //(game ends)
    {
    
      FailLight();
      return -1;

    }//End if

    if(button == seq[i])  // (game continues)
    {

      i++;
    }//End if


  }//End while

  delay(250);

  return 0;

}//End read sequence
/*********************************************************************/

#include <LiquidCrystal.h>
/*(RS, E, D4, D5, D6, D7)*/
LiquidCrystal lcd(1,2,19,18,17,16); 

// Give name to all LEDs from pin 10 to 13
int led0 = 6;
int led1 = 7;
int led2 = 8;
int led3 = 9;


//Give name to all buttons from pin 0 to 3
int button0 = 10;
int button1 = 11;
int button2 = 12;
int button3 = 13;

//Give name to the speaker (pin 8)
int speaker = 5;


// the setup routine runs once when you press reset:

void setup() {   
  Serial.begin(9600);             
  analogWrite(0,80); //Setting contrast
  lcd.begin(16,2); //Dimensions of LCD screen
  lcd.print("Welcome!");

  // initialize the digital pin as an output.

  pinMode(led0, OUTPUT);   
  pinMode(led1, OUTPUT);  
  pinMode(led2, OUTPUT);  
  pinMode(led3, OUTPUT); 

  //initialize buttons as input.

  pinMode(button0, INPUT_PULLUP);
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);

}//End setup



// the loop routine runs over and over again forever:

void loop() {
  
  WelcomeLight();
  int SIZE = 25;
  int sequence[SIZE];

  while(1){
    //First we make the random sequence (values from 0 to 3)

    randomSeed(analogRead(A0));    

    for(int j=0; j < SIZE; j++){

      sequence[j] = random(0, 4);
    }


    //Now, the game starts
    int led = 0;
    int seq = 0;
    int reading = 1;

    while (seq == 0){
      showsequence(sequence, reading);
      seq = readsequence(sequence, reading, led);
      if (seq == 0) //well done
      {
        reading ++;

      }

    }//End while

  }//End while

}//End loop



//Plays before game

void WelcomeLight(){
 
  int i = 0;
  for (i=0; i <4; i++){

    tone(speaker, NOTE_A3);
    digitalWrite(led0, HIGH);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);             

    tone(speaker, NOTE_B3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);

    tone(speaker, NOTE_C3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);

  }//End for loop

  for (i=0; i <3; i++){

    tone(speaker, NOTE_F3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(100);

    noTone(speaker);

  }//End for

  delay(200);

}//End welcome lights



//When the player loses

void FailLight(){

    tone(speaker, NOTE_G3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_F3);

    
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_E3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    
    delay(200);

  for (int i=0; i <3; i++){

    tone(speaker, NOTE_A2);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

   
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);


    delay(100);

  }//End for

  delay(200);

}//End fail method




//Returns the state of the button

int ReadButton(){

  button0 = digitalRead(10);
  Serial.print("button0: ");
  Serial.println(button0);
  
  button1 = digitalRead(11);
  Serial.print("button1: ");
  Serial.println(button1);
  
  button2 = digitalRead(12);
  Serial.print("button2: ");
  Serial.println(button2);
  
  button3 = digitalRead(13);
  Serial.print("button3: ");
  Serial.println(button3);

  if(button0 == LOW){

    digitalWrite(led0, HIGH);
    tone(speaker, NOTE_E4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led0, LOW);

    return 0;

  }//End if


  if(button1 == LOW){

    digitalWrite(led1, HIGH);
    tone(speaker, NOTE_A4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led1, LOW);

    return 1;

  }//End if


  if(button2 == LOW){

    digitalWrite(led2, HIGH);
    tone(speaker, NOTE_D4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led2, LOW);

    return 2;

  }//End if


  if(button3 == LOW){

    digitalWrite(led3, HIGH );
    tone(speaker, NOTE_G4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led3, LOW);

    return 3;

  }//End if

  else{

    return -1;
  }

}//End read button method


//Method that shows the current sequence (until 'count') with lights and sounds

void showsequence (int array[],int counts){

  int i = 0;

  while(i < counts){

    int led = array[i];
    int delayvalue = 500 - (3 * counts);
    
    switch (led){

    case 0:
      digitalWrite(led0, HIGH); 
      tone(speaker, NOTE_E4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led0, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 1:
      digitalWrite(led1, HIGH); 
      tone(speaker, NOTE_A4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led1, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 2:
      digitalWrite(led2, HIGH); 
      tone(speaker, NOTE_D4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led2, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 3:
      digitalWrite(led3, HIGH); 
      tone(speaker, NOTE_G4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led3, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    }//End of switch case

  }//End while

}//End show sequence





//Compares sequence with buttons pushed

int readsequence(int seq[], int current, int led){

  int i = 0;

  while(i < current){

  int button = ReadButton();
  Serial.print("button = ");
  Serial.println(button);
  Serial.print("seq = ");
  Serial.println(seq[i]);
  
    if(button != seq[i] && button != -1) //(game ends)
    {
    
      FailLight();
      return -1;

    }//End if

    if(button == seq[i])  // (game continues)
    {

      i++;
    }//End if


  }//End while

  delay(250);

  return 0;

}//End read sequence
#include <LiquidCrystal.h>
/*(RS, E, D4, D5, D6, D7)*/
LiquidCrystal lcd(1,2,19,18,17,16); 

// Give name to all LEDs from pin 10 to 13
int led0 = 6;
int led1 = 7;
int led2 = 8;
int led3 = 9;


//Give name to all buttons from pin 0 to 3
int button0 = 10;
int button1 = 11;
int button2 = 12;
int button3 = 13;

//Setting both states to HIGH when not pressed
int button0State = HIGH;
int button1State = HIGH;
int button2State = HIGH;
int button3State = HIGH;

//Button states previously recorded, setting to HIGH (not pressed)
int lastButton0State = HIGH;
int lastButton1State = HIGH;
int lastButton2State = HIGH;
int lastButton3State = HIGH;

unsigned long debounceDelay = 50;

//Give name to the speaker (pin 8)
int speaker = 5;


// the setup routine runs once when you press reset:

void setup() {   
  Serial.begin(9600);             
  analogWrite(0,80); //Setting contrast
  lcd.begin(16,2); //Dimensions of LCD screen
  lcd.print("Welcome!");

  // initialize the digital pin as an output.

  pinMode(led0, OUTPUT);   
  pinMode(led1, OUTPUT);  
  pinMode(led2, OUTPUT);  
  pinMode(led3, OUTPUT); 

  //initialize buttons as input.

  pinMode(button0, INPUT_PULLUP);
  pinMode(button1, INPUT_PULLUP);
  pinMode(button2, INPUT_PULLUP);
  pinMode(button3, INPUT_PULLUP);

}//End setup



// the loop routine runs over and over again forever:

void loop() {

  //Debouncing buttons
  int reading0 = digitalRead(button0);
  int reading1 = digitalRead(button1);     
  int reading2 = digitalRead(button2);     
  int reading3 = digitalRead(button3);
  
  if (reading0 == lastButton0State && reading1 == lastButton1State && reading2 == lastButton2State && reading3 == lastButton3State){
    return;  // Do nothing if no change
  }
  delay (debounceDelay);  // Debounce

  // Re-read so we can catch both buttons down at once
  reading0 = digitalRead(button0);
  reading1 = digitalRead(button1);     
  reading2 = digitalRead(button2);   
  reading3 = digitalRead(button3);  

  // save for next time
  lastButton0State = reading0;
  lastButton1State = reading1;
  lastButton2State = reading2;
  lastButton3State = reading3;

  //Continue after debouncing
  WelcomeLight();
  int SIZE = 25;
  int sequence[SIZE];

  while(1){
    //First we make the random sequence (values from 0 to 3)

    randomSeed(analogRead(A0));    

    for(int j=0; j < SIZE; j++){

      sequence[j] = random(0, 4);
    }


    //Now, the game starts
    int led = 0;
    int seq = 0;
    int reading = 1;

    while (seq == 0){
      showsequence(sequence, reading);
      seq = readsequence(sequence, reading, led);
      if (seq == 0) //well done
      {
        reading ++;

      }

    }//End while

  }//End while

}//End loop



//Plays before game

void WelcomeLight(){
 
  int i = 0;
  for (i=0; i <4; i++){

    tone(speaker, NOTE_A3);
    digitalWrite(led0, HIGH);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);             

    tone(speaker, NOTE_B3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(200);

    tone(speaker, NOTE_C3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);

  }//End for loop

  for (i=0; i <3; i++){

    tone(speaker, NOTE_F3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);

    delay(100);

    noTone(speaker);

  }//End for

  delay(200);

}//End welcome lights



//When the player loses

void FailLight(){

    tone(speaker, NOTE_G3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_F3);

    
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_E3);

    digitalWrite(led0, LOW);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(200);    

    tone(speaker, NOTE_D3);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    
    delay(200);

  for (int i=0; i <3; i++){

    tone(speaker, NOTE_A2);

    digitalWrite(led0, HIGH);  
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);

    delay(100);

    noTone(speaker);

   
    digitalWrite(led0, LOW);  
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);


    delay(100);

  }//End for

  delay(200);

}//End fail method




//Returns the state of the button

int ReadButton(){

  button0 = digitalRead(10);
  Serial.print("button0: ");
  Serial.println(button0);
  
  button1 = digitalRead(11);
  Serial.print("button1: ");
  Serial.println(button1);
  
  button2 = digitalRead(12);
  Serial.print("button2: ");
  Serial.println(button2);
  
  button3 = digitalRead(13);
  Serial.print("button3: ");
  Serial.println(button3);

  if(button0 == LOW){

    digitalWrite(led0, HIGH);
    tone(speaker, NOTE_E4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led0, LOW);

    return 0;

  }//End if


  if(button1 == LOW){

    digitalWrite(led1, HIGH);
    tone(speaker, NOTE_A4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led1, LOW);

    return 1;

  }//End if


  if(button2 == LOW){

    digitalWrite(led2, HIGH);
    tone(speaker, NOTE_D4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led2, LOW);

    return 2;

  }//End if


  if(button3 == LOW){

    digitalWrite(led3, HIGH );
    tone(speaker, NOTE_G4);

    delay(200);

    noTone(speaker); 
    digitalWrite(led3, LOW);

    return 3;

  }//End if

  else{

    return -1;
  }

}//End read button method


//Method that shows the current sequence (until 'count') with lights and sounds

void showsequence (int array[],int counts){

  int i = 0;

  while(i < counts){

    int led = array[i];
    int delayvalue = 500 - (3 * counts);
    
    switch (led){

    case 0:
      digitalWrite(led0, HIGH); 
      tone(speaker, NOTE_E4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led0, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 1:
      digitalWrite(led1, HIGH); 
      tone(speaker, NOTE_A4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led1, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 2:
      digitalWrite(led2, HIGH); 
      tone(speaker, NOTE_D4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led2, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    case 3:
      digitalWrite(led3, HIGH); 
      tone(speaker, NOTE_G4);
      delay(delayvalue);
      noTone(speaker); 
      digitalWrite(led3, LOW); 
      delay(delayvalue/2);
      i++;
      break;

    }//End of switch case

  }//End while

}//End show sequence





//Compares sequence with buttons pushed

int readsequence(int seq[], int current, int led){

  int i = 0;

  while(i < current){

  int button = ReadButton();
  Serial.print("button = ");
  Serial.println(button);
  Serial.print("seq = ");
  Serial.println(seq[i]);
  
    if(button != seq[i] && button != -1) //(game ends)
    {
    
      FailLight();
      return -1;

    }//End if

    if(button == seq[i])  // (game continues)
    {

      i++;
    }//End if


  }//End while

  delay(250);

  return 0;

}//End read sequence
Improved formatting
Source Link
Katie
  • 43
  • 1
  • 7
Loading
Source Link
Katie
  • 43
  • 1
  • 7
Loading