header
Adding Winning and Losing Tones

Play one tone when the player enters the pattern correctly and another when they lose.

We'll add a few more notes and two new functions, called play_losing_tone and play_winning_tone to do this.

// Use arrays to hold our pin numbers and the pattern.
// This will let us use a loop to go through the values.
int speaker = 9;
int ledPin[] = { 67 };
int inPin[] = { 24 };
int pattern[5];  // This array will hold the pattern we generate.

// Need some notes
int G = 392;
int C = 523;
int E = 659;
int F = 698;
int G2 = 784;

void setup() {
  pinMode(speakerOUTPUT);
  pinMode(ledPin[0], OUTPUT);
  pinMode(ledPin[1], OUTPUT);
  pinMode(inPin[0], INPUT);
  pinMode(inPin[1], INPUT);
  randomSeed(analogRead(0));  // Ensures that pattern is different at every reset
}

void loop() {
  play_start_tones();
  generate_pattern();
  
  // Go through each note in the pattern and see if the player matches it
  for (int i = 0i < 5i++) {
    // Until the player pushes a button, do nothing
   while ((digitalRead(inPin[0])) == LOW && (digitalRead(inPin[1]) == LOW)) { }
   if (check_input(0i) == 1) {
     play_losing_tone();
     break
   }
   if (check_input(1i) == 1) {
     play_losing_tone();
     break;
   }
   // If we get to i == 4, we've won!
   if (i == 4) {
     play_winning_tone();
   }
  }
}

int check_input(int pinint pat) {
  if(digitalRead(inPin[pin]) == HIGH) {
    digitalWrite(ledPin[pin], HIGH);
    delay(250);
    digitalWrite(ledPin[pin], LOW);
    delay(250);
    if (pattern[pat] == pin) {
      return (0); // For correct answer return 0
    } else {
      return (1); // For incorrect answer return 1
    }
  }
}

void play_start_tones() {
  for (int i = 0i < 3i++) {
    tone(speakerC);
    delay(350);
    noTone(speaker);
    delay(350);
  }
  tone(speakerF);
  delay(350);
  noTone(speaker);
}

void generate_pattern() {
  // Generate random pattern
  for (int i = 0i < 5i++) {
    int number = random(0,2);
    pattern[i] = number;
    digitalWrite(ledPin[number], HIGH);
    delay(500);
    digitalWrite(ledPin[number], LOW);
    delay(500);
  }
}

void play_losing_tone() {
  tone(speakerE);
  delay(200);
  tone(speakerC);
  delay(200);
  tone(speakerG);
  delay(200);
  noTone(speaker);
  delay(1000);  
}

void play_winning_tone() {
   tone(speakerG);
   delay(200);
   tone(speakerC);
   delay(200);
   tone(speakerE);
   delay(200);
   tone(speakerG2);
   delay(300);
   noTone(speaker);
   delay(100);
   tone(speakerE);
   delay(200);
   tone(speakerG2);
   delay(600);
   noTone(speaker);
   delay(1000);
}

Game Home