ENIB 2022 - groupe A : Memory Game : Différence entre versions
(→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 = | + | |
| + | |||
| + | 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(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 | + | void main_menu() |
| − | + | { | |
| − | + | 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) | ||
{ | { | ||
| − | + | 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) | |
| − | |||
| − | |||
| − | |||
| − | if (digitalRead( | ||
{ | { | ||
| − | + | 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); | ||
| + | } | ||
| + | } | ||
| + | |||
| − | 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) | ||
{ | { | ||
| − | + | Serial.println("Button 3 Pressed"); | |
| + | play_note(3, LENGTH); | ||
} | } | ||
| − | + | if (digitalRead(D0) == LOW) | |
| − | |||
| − | |||
| − | |||
| − | |||
{ | { | ||
| − | + | Serial.println("Button 4 Pressed"); | |
| + | play_note(4, LENGTH); | ||
} | } | ||
| − | + | } | |
| − | |||
| − | |||
} | } | ||
Version du 14 janvier 2022 à 15:16
photo de l'équipe
Que fait ce projet ?
Ce projet est un Simon avec 4 leds et 4 boutons poussoirs.
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);
}
}
}
