ENIB 2022 - groupe A : Memory Game : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Liste des composants)
(Liste des composants)
Ligne 13 : Ligne 13 :
 
*1 haut parleur piezo
 
*1 haut parleur piezo
 
*des câbles
 
*des câbles
 +
*1 boite de glace chocolat menthe
  
const int speaker = D1; // Set to the pin you connected the speaker to
+
 
 +
 
 +
Le code :
 +
 
 +
const int speaker = D8; // Set to the pin you connected the speaker to
  
 
//*****************************************
 
//*****************************************
Ligne 30 : Ligne 35 :
  
 
void setup() {
 
void setup() {
 +
  pinMode(D1, OUTPUT);
 
   pinMode(D2, OUTPUT); // Set up LED PINS
 
   pinMode(D2, OUTPUT); // Set up LED PINS
 
   pinMode(D3, OUTPUT);
 
   pinMode(D3, OUTPUT);
 
   pinMode(D4, OUTPUT);
 
   pinMode(D4, OUTPUT);
  pinMode(D1, OUTPUT);
+
  
 
   pinMode(D6, INPUT); // Set up button pins
 
   pinMode(D6, INPUT); // Set up button pins
Ligne 43 : Ligne 49 :
 
   
 
   
 
   }
 
   }
 +
 +
void loop() {
 +
  //setPins(); // Set the LED and Button pins HIGH
 
    
 
    
 +
  //generate_game(); // Was used for testing a single-game mode before main menu was implimented
 +
  //testButtons(); // Used to test buttons without playing the game
 +
  main_menu();
 +
}
  
void loop(){
+
void main_menu()
digitalRead(D6);
+
{
digitalRead(D7);
+
  digitalWrite(D1,LOW);
 +
  digitalWrite(D2,LOW);
 +
  digitalWrite(D3,LOW);
 +
  digitalWrite(D4,LOW);
  
if (digitalRead(D6) == LOW)
+
  digitalWrite(D7,HIGH);
 +
  digitalWrite(D6,HIGH);
 +
  digitalWrite(D5,HIGH);
 +
  digitalWrite(D0,HIGH);
 +
  while (1 == 1)
 +
  {
 +
    if (digitalRead(D6) == LOW)
 
     {
 
     {
       digitalWrite (D2,HIGH);
+
       difficulty = 1;
 +
      generate_game();
  
 +
      play_game();
 +
    }
 +
    if (digitalRead(D7) == LOW)
 +
    {
 +
      difficulty = 2;
 +
      generate_game();
 +
      play_game();
 +
    }
 +
    if (digitalRead(D5) == LOW)
 +
    {
 +
      difficulty = 3;
 +
      generate_game();
 +
      play_game();
 
     }
 
     }
     else{     
+
     if (digitalRead(D0) == LOW)
      digitalWrite (D2,LOW);
 
      }
 
     
 
if (digitalRead(D7) == LOW)
 
 
     {
 
     {
       digitalWrite (D3,HIGH);
+
       difficulty = 4;
 +
      generate_game();
 +
      play_game();
 
     }
 
     }
     else{    
+
  }
       digitalWrite (D3,LOW);
+
}
 +
 
 +
 
 +
 
 +
void play_game()
 +
{
 +
 
 +
  int roundCount = 0;
 +
  int playerTurn = 1;
 +
  bool buttonPress = false;
 +
  int currentNote;
 +
  int userInput = 0;
 +
  bool loss = false;
 +
  play_note(1, 100);
 +
  play_note(2, 100);
 +
  play_note(3, 100);
 +
  play_note(4, 100);
 +
  delay(1000);
 +
  for (int currentRound=1; (currentRound - 1)<=(difficulty * 5); currentRound++) // Number of rounds to play
 +
     {
 +
       roundCount += 1;
 +
      playerTurn = 1;
 +
      buttonPress = false;
 +
      userInput = 0;
 +
      for (int j = 1; j != currentRound; j++)
 +
      {
 +
        play_note(gamepattern[j - 1], LENGTH); // Play current round note(s)
 
       }
 
       }
 +
      while (playerTurn < currentRound) {
 +
        currentNote = gamepattern[playerTurn - 1];
 +
        Serial.println(currentNote);
 +
        while (buttonPress == false) {
 +
          if (digitalRead(D6) == LOW) // Button 1 Pressed
 +
          {
 +
            buttonPress = true;
 +
            userInput = 1;
 +
          }
 +
          if (digitalRead(D7) == LOW) // Button 2 Pressed
 +
          {
 +
            buttonPress = true;
 +
           
 +
            userInput = 2;
 +
          }
 +
          if (digitalRead(D5) == LOW) // Button 3 Pressed
 +
          {
 +
            buttonPress = true;
 +
            userInput = 3;
 +
          }
 +
          if (digitalRead(D0) == LOW) // Button 4 Pressed
 +
          {
 +
            buttonPress = true;
 +
            userInput = 4;
 +
          }
 +
          if (buttonPress == true) // A button was Pressed
 +
          {
 +
            play_note(userInput, LENGTH); // Play the note pushed
 +
            if (currentNote == userInput) // You pushed the right one!
 +
            {
 +
              playerTurn++;
 +
            }
 +
            else // You pushed the wrong one! :(
 +
            {
 +
              game_over(false);
 +
            }
 +
          }
 +
           
 +
    }
 +
    buttonPress = false;
 +
  }
 +
  }
 +
  if (loss == false){
 +
    Serial.println("You Win!");
 +
    game_over(true);
 +
  }
 +
}
 +
   
  
if (digitalRead(D5) == LOW)
+
 
 +
void generate_game() {
 +
  randomSeed(analogRead(D8));
 +
  for (int i=0; i<(difficulty * 5); i++) // For each level of difficulty, add 5 more turns to the game
 +
  {
 +
    gamepattern[i] = random(1, 5);
 +
 
 +
  }
 +
}
 +
 
 +
void play_note(int index, int notespeed) {
 +
  digitalWrite(index + 1, HIGH);
 +
  tone(speaker, notes[ index - 1 ], notespeed);
 +
  if (index==2){
 +
      digitalWrite(D3,HIGH);
 +
  }
 +
  delay(notespeed * 2);
 +
  digitalWrite(index + 1, LOW);
 +
    if (index==2){
 +
      digitalWrite(D3,LOW                        );
 +
  }
 +
 
 +
}
 +
 
 +
void game_over(bool win) {
 +
  if (win) {
 +
    Serial.println("You Win!");
 +
    for (int i = 0; i < 10; i++){
 +
      play_note(1, 50);
 +
      play_note(2, 50);
 +
      play_note(3, 50);
 +
      play_note(4, 50);
 +
    }
 +
  }
 +
 
 +
  else {
 +
    Serial.println("You Lose!");
 +
    for (int i = 0; i < 6; i++){
 +
      play_note(4, 100);
 +
      play_note(3, 100);
 +
      play_note(2, 100);
 +
      play_note(1, 100);
 +
    }
 +
  }
 +
  Serial.println("Game over");
 +
  main_menu();
 +
}
 +
 
 +
void testButtons() // Created this function to test buttons without having to run the entire game
 +
{
 +
  while (1 == 1){
 +
    if (digitalRead(D6) == LOW)
 +
    {
 +
      Serial.println("Button 1 Pressed");
 +
      play_note(1, LENGTH);
 +
    }
 +
    if (digitalRead(D7) == LOW)
 +
    {
 +
      Serial.println("Button 2 Pressed");
 +
      play_note(2, LENGTH);
 +
    }
 +
    if (digitalRead(D5) == LOW)  
 
     {
 
     {
       digitalWrite (D4,HIGH);
+
       Serial.println("Button 3 Pressed");
 +
      play_note(3, LENGTH);
 
     }
 
     }
     else{     
+
     if (digitalRead(D0) == LOW)
      digitalWrite (D4,LOW);
 
      }
 
 
 
      if (digitalRead(D0) == LOW)
 
 
     {
 
     {
       digitalWrite (D1,HIGH);
+
       Serial.println("Button 4 Pressed");
 +
      play_note(4, LENGTH);
 
     }
 
     }
    else{     
+
  }
      digitalWrite (D1,LOW);
 
      }
 
 
}
 
}
  

Version du 14 janvier 2022 à 16:16

photo de l'équipe

Photoenib2018.jpg

Que fait ce projet ?

Ce projet est un Simon avec 4 leds et 4 boutons poussoirs.

Prototype.png

Liste des composants

  • 4 leds de différentes couleurs
  • 4 boutons poussoirs
  • 1 carte arduino uno
  • 1 carte labdec
  • 1 haut parleur piezo
  • des câbles
  • 1 boite de glace chocolat menthe


Le code :

const int speaker = D8; // Set to the pin you connected the speaker to

//*****************************************

int LENGTH = 400; // Length of time to play the main notes

int notes[4] = {100, 350, 600, 850}; // Values for the 4 notes used in the game

int gamepattern[20]; // Array to store game pattern in during play

int difficulty = 1;

//*****************************************


void setup() {

 pinMode(D1, OUTPUT);
 pinMode(D2, OUTPUT); // Set up LED PINS
 pinMode(D3, OUTPUT);
 pinMode(D4, OUTPUT);

 pinMode(D6, INPUT); // Set up button pins
 pinMode(D7, INPUT);
 pinMode(D5, INPUT);
 pinMode(D0, INPUT);
 
 Serial.begin(9600); // Enable serial output so we can debug using the serial reader in the Arduino IDE

 }

void loop() {

 //setPins(); // Set the LED and Button pins HIGH
 
 //generate_game(); // Was used for testing a single-game mode before main menu was implimented
 //testButtons(); // Used to test buttons without playing the game
 main_menu();

}

void main_menu() {

 digitalWrite(D1,LOW);
 digitalWrite(D2,LOW);
 digitalWrite(D3,LOW);
 digitalWrite(D4,LOW);
 digitalWrite(D7,HIGH);
 digitalWrite(D6,HIGH);
 digitalWrite(D5,HIGH);
 digitalWrite(D0,HIGH);
 while (1 == 1)
 {
   if (digitalRead(D6) == LOW)
   {
     difficulty = 1;
     generate_game();
     play_game();
   }
   if (digitalRead(D7) == LOW)
   {
     difficulty = 2;
     generate_game();
     play_game();
   }
   if (digitalRead(D5) == LOW)
   {
     difficulty = 3;
     generate_game();
     play_game();
   }
   if (digitalRead(D0) == LOW)
   {
     difficulty = 4;
     generate_game();
     play_game();
   }
 }

}


void play_game() {

 int roundCount = 0;
 int playerTurn = 1;
 bool buttonPress = false;
 int currentNote;
 int userInput = 0;
 bool loss = false;
 play_note(1, 100);
 play_note(2, 100);
 play_note(3, 100);
 play_note(4, 100);
 delay(1000);
 for (int currentRound=1; (currentRound - 1)<=(difficulty * 5); currentRound++) // Number of rounds to play
   {
     roundCount += 1;
     playerTurn = 1;
     buttonPress = false;
     userInput = 0;
     for (int j = 1; j != currentRound; j++)
     {
       play_note(gamepattern[j - 1], LENGTH); // Play current round note(s)
     }
     while (playerTurn < currentRound) {
       currentNote = gamepattern[playerTurn - 1];
       Serial.println(currentNote);
       while (buttonPress == false) {
          if (digitalRead(D6) == LOW) // Button 1 Pressed
          {
            buttonPress = true;
            userInput = 1;
          }
          if (digitalRead(D7) == LOW) // Button 2 Pressed
          {
            buttonPress = true;
            
            userInput = 2;
          }
          if (digitalRead(D5) == LOW) // Button 3 Pressed
          {
            buttonPress = true;
            userInput = 3;
          }
          if (digitalRead(D0) == LOW) // Button 4 Pressed
          {
            buttonPress = true;
            userInput = 4;
          }
          if (buttonPress == true) // A button was Pressed
          {
            play_note(userInput, LENGTH); // Play the note pushed
            if (currentNote == userInput) // You pushed the right one!
            {
              playerTurn++;
            }
            else // You pushed the wrong one! :(
            {
              game_over(false);
            }
         }
           
   }
   buttonPress = false;
  }
 }
 if (loss == false){
   Serial.println("You Win!");
   game_over(true);
 }
}
   


void generate_game() {

 randomSeed(analogRead(D8));
 for (int i=0; i<(difficulty * 5); i++) // For each level of difficulty, add 5 more turns to the game
 {
   gamepattern[i] = random(1, 5);
 }

}

void play_note(int index, int notespeed) {

 digitalWrite(index + 1, HIGH);
 tone(speaker, notes[ index - 1 ], notespeed);
 if (index==2){
     digitalWrite(D3,HIGH);
 }
 delay(notespeed * 2);
 digitalWrite(index + 1, LOW);
   if (index==2){
     digitalWrite(D3,LOW                         );
 }

}

void game_over(bool win) {

 if (win) {
   Serial.println("You Win!");
    for (int i = 0; i < 10; i++){
     play_note(1, 50);
     play_note(2, 50);
     play_note(3, 50);
     play_note(4, 50);
   }
 }
 
 else {
   Serial.println("You Lose!");
   for (int i = 0; i < 6; i++){
     play_note(4, 100);
     play_note(3, 100);
     play_note(2, 100);
     play_note(1, 100);
   }
 }
 Serial.println("Game over");
 main_menu();

}

void testButtons() // Created this function to test buttons without having to run the entire game {

 while (1 == 1){
   if (digitalRead(D6) == LOW)
   {
     Serial.println("Button 1 Pressed");
     play_note(1, LENGTH);
   }
   if (digitalRead(D7) == LOW)
   {
     Serial.println("Button 2 Pressed");
     play_note(2, LENGTH);
   }
   if (digitalRead(D5) == LOW) 
   {
     Serial.println("Button 3 Pressed");
     play_note(3, LENGTH);
   }
   if (digitalRead(D0) == LOW)
   {
     Serial.println("Button 4 Pressed");
     play_note(4, LENGTH);
   }
 }

}

Catégories