ENIB 2020 : Tûk : Différence entre versions
(→photo de l'équipe) |
|||
(6 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
==photo de l'équipe== | ==photo de l'équipe== | ||
− | [[Fichier: | + | [[Fichier:Equipe tûk.jpg|600px]] |
==Que fait ce projet ? == | ==Que fait ce projet ? == | ||
Tûk est un jeu de mémoire très inspiré du jeu Simon. | Tûk est un jeu de mémoire très inspiré du jeu Simon. | ||
Le principe du jeu se résume à suivre une séquence de couleurs données par le jeu. | Le principe du jeu se résume à suivre une séquence de couleurs données par le jeu. | ||
− | Par exemple, la première couleur qui s'allume est le jaune. Le joueur doit donc appuyer sur le bouton jaune. Puis Tûk rajoute des couleurs au fur et à mesure que le joueur réussi à répéter les séquences. | + | Par exemple, si la première couleur qui s'allume est le jaune. Le joueur doit donc appuyer sur le bouton jaune. Puis Tûk rajoute des couleurs au fur et à mesure que le joueur réussi à répéter les séquences. |
La séquence est réinitialisée à une couleur et la partie redémarre. | La séquence est réinitialisée à une couleur et la partie redémarre. | ||
==Liste des composants== | ==Liste des composants== | ||
Ligne 12 : | Ligne 12 : | ||
* 4 boutons poussoirs de couleur différentes | * 4 boutons poussoirs de couleur différentes | ||
* 4 LED de même couleur que les boutons | * 4 LED de même couleur que les boutons | ||
− | |||
* 1 haut-parleur | * 1 haut-parleur | ||
* des câbles | * des câbles | ||
* une boîte faite maison (medium 3mm) | * une boîte faite maison (medium 3mm) | ||
− | * | + | * 1 pain de câblage |
− | |||
* 1 support batterie | * 1 support batterie | ||
* 1 pile rechargeable | * 1 pile rechargeable | ||
+ | * 4 résistances de 1kΩ | ||
+ | * 4 résistances de 10kΩ | ||
+ | |||
+ | ==Montage== | ||
+ | [[Fichier:Cablage tûk.jpg|600px]] | ||
==Code== | ==Code== | ||
<pre> | <pre> | ||
− | + | /*Created by Jeremy Wilson | |
+ | |||
+ | Memory Game with Arduino | ||
+ | |||
+ | Modified by Rui Santos | ||
+ | Visit: http://randomnerdtutorials.com | ||
+ | */ | ||
+ | |||
+ | // Constants | ||
+ | const int button1 = 2; // 1st button controls Blue LED | ||
+ | const int button2 = 3; // 2nd button controls Yellow LED | ||
+ | const int button3 = 4; // 3rd button controls Green LED | ||
+ | const int button4 = 5; // 4th button controls Red LED | ||
+ | const int led1 = 7; // Blue LED | ||
+ | const int led2 = 8; // Yellow LED | ||
+ | const int led3 = 9; // Green LED | ||
+ | const int led4 = 10; // Red LED | ||
+ | const int buzzer = 12; // Buzzer Output | ||
+ | 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) { | ||
+ | digitalWrite(buzzer, HIGH); | ||
+ | delayMicroseconds(tone); | ||
+ | digitalWrite(buzzer, LOW); | ||
+ | delayMicroseconds(tone); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void setup() { | ||
+ | // initialize inputs : | ||
+ | randomSeed(analogRead(0)); | ||
+ | pinMode(button1, INPUT); | ||
+ | pinMode(button2, INPUT); | ||
+ | pinMode(button3, INPUT); | ||
+ | pinMode(button4, INPUT); | ||
+ | // initialize outputs: | ||
+ | pinMode(led1, OUTPUT); | ||
+ | pinMode(led2, OUTPUT); | ||
+ | pinMode(led3, OUTPUT); | ||
+ | pinMode(led4, OUTPUT); | ||
+ | pinMode(buzzer, OUTPUT); | ||
+ | // initialize serial communication for debugging: | ||
+ | //Serial.begin(9600); | ||
+ | } | ||
+ | int game_on = 0; | ||
+ | int wait = 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 butwait = 500; //amount of time to wait 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 | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | 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; | ||
+ | } | ||
+ | game_on = 1; | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | //shows the user the current sequence | ||
+ | if (wait == 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]; | ||
+ | digitalWrite(pinandtone+7, HIGH); | ||
+ | playTone(tones[pinandtone], leddelay); | ||
+ | digitalWrite(pinandtone+7, LOW); | ||
+ | delay(100/speedfactor); | ||
+ | } | ||
+ | wait = 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){ | ||
+ | buttonState[i] = digitalRead(i+2); | ||
+ | buttonchange = buttonchange + buttonState[i]; | ||
+ | } | ||
+ | } | ||
+ | for (i = 0; i < 4; i = i + 1){ | ||
+ | if (buttonState[i] == HIGH) { | ||
+ | digitalWrite(i+7, HIGH); | ||
+ | playTone(tones[i], ledtime); | ||
+ | digitalWrite(i+7, LOW); | ||
+ | wait = 0; | ||
+ | u_array[j]=i; | ||
+ | buttonState[i] = LOW; | ||
+ | buttonchange = 0; | ||
+ | } | ||
+ | } | ||
+ | if (u_array[j] == n_array[j]){ | ||
+ | j++; | ||
+ | right = 1; | ||
+ | } | ||
+ | else{ | ||
+ | |||
+ | right = 0; | ||
+ | i = 4; | ||
+ | j = currentlevel; | ||
+ | wait = 0; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if (right == 0){ | ||
+ | delay(300); | ||
+ | i = 0; | ||
+ | game_on = 0; | ||
+ | currentlevel = 1; | ||
+ | for (i = 0; i < 4; i = i + 1){ | ||
+ | digitalWrite(i+7, HIGH); | ||
+ | } | ||
+ | playTone(tones[4], ledtime); | ||
+ | for (i = 0; i < 4; i = i + 1){ | ||
+ | digitalWrite(i+7, LOW); | ||
+ | } | ||
+ | delay (200); | ||
+ | for (i = 0; i < 4; i = i + 1){ | ||
+ | digitalWrite(i+7, HIGH); | ||
+ | } | ||
+ | playTone(tones[4], ledtime); | ||
+ | for (i = 0; i < 4; i = i + 1){ | ||
+ | digitalWrite(i+7, LOW); | ||
+ | } | ||
+ | |||
+ | delay(500); | ||
+ | game_on = 0; | ||
+ | } | ||
+ | |||
+ | |||
+ | //if you insert the right sequence it levels up | ||
+ | if (right == 1){ | ||
+ | currentlevel++; | ||
+ | wait = 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]; | ||
+ | digitalWrite(note+7, HIGH); | ||
+ | playTone(tones[note], tempo[i]); | ||
+ | digitalWrite(note+7, LOW); | ||
+ | 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; | ||
+ | } | ||
+ | |||
+ | } | ||
</pre> | </pre> | ||
+ | |||
+ | ==Prototype== | ||
+ | |||
+ | [[Fichier:Tûk v1 dessus.jpg|600px]] | ||
+ | [[Fichier:Cablage tûk dessus.jpg|600px]] | ||
==Catégories== | ==Catégories== | ||
[[Catégorie:Enib2020]] | [[Catégorie:Enib2020]] |
Version actuelle datée du 17 janvier 2020 à 14:46
Sommaire
photo de l'équipe
Que fait ce projet ?
Tûk est un jeu de mémoire très inspiré du jeu Simon. Le principe du jeu se résume à suivre une séquence de couleurs données par le jeu. Par exemple, si la première couleur qui s'allume est le jaune. Le joueur doit donc appuyer sur le bouton jaune. Puis Tûk rajoute des couleurs au fur et à mesure que le joueur réussi à répéter les séquences. La séquence est réinitialisée à une couleur et la partie redémarre.
Liste des composants
- 1 carte Arduino
- 4 boutons poussoirs de couleur différentes
- 4 LED de même couleur que les boutons
- 1 haut-parleur
- des câbles
- une boîte faite maison (medium 3mm)
- 1 pain de câblage
- 1 support batterie
- 1 pile rechargeable
- 4 résistances de 1kΩ
- 4 résistances de 10kΩ
Montage
Code
/*Created by Jeremy Wilson Memory Game with Arduino Modified by Rui Santos Visit: http://randomnerdtutorials.com */ // Constants const int button1 = 2; // 1st button controls Blue LED const int button2 = 3; // 2nd button controls Yellow LED const int button3 = 4; // 3rd button controls Green LED const int button4 = 5; // 4th button controls Red LED const int led1 = 7; // Blue LED const int led2 = 8; // Yellow LED const int led3 = 9; // Green LED const int led4 = 10; // Red LED const int buzzer = 12; // Buzzer Output 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) { digitalWrite(buzzer, HIGH); delayMicroseconds(tone); digitalWrite(buzzer, LOW); delayMicroseconds(tone); } } void setup() { // initialize inputs : randomSeed(analogRead(0)); pinMode(button1, INPUT); pinMode(button2, INPUT); pinMode(button3, INPUT); pinMode(button4, INPUT); // initialize outputs: pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(buzzer, OUTPUT); // initialize serial communication for debugging: //Serial.begin(9600); } int game_on = 0; int wait = 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 butwait = 500; //amount of time to wait 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 void loop() { 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; } game_on = 1; } //shows the user the current sequence if (wait == 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]; digitalWrite(pinandtone+7, HIGH); playTone(tones[pinandtone], leddelay); digitalWrite(pinandtone+7, LOW); delay(100/speedfactor); } wait = 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){ buttonState[i] = digitalRead(i+2); buttonchange = buttonchange + buttonState[i]; } } for (i = 0; i < 4; i = i + 1){ if (buttonState[i] == HIGH) { digitalWrite(i+7, HIGH); playTone(tones[i], ledtime); digitalWrite(i+7, LOW); wait = 0; u_array[j]=i; buttonState[i] = LOW; buttonchange = 0; } } if (u_array[j] == n_array[j]){ j++; right = 1; } else{ right = 0; i = 4; j = currentlevel; wait = 0; } } if (right == 0){ delay(300); i = 0; game_on = 0; currentlevel = 1; for (i = 0; i < 4; i = i + 1){ digitalWrite(i+7, HIGH); } playTone(tones[4], ledtime); for (i = 0; i < 4; i = i + 1){ digitalWrite(i+7, LOW); } delay (200); for (i = 0; i < 4; i = i + 1){ digitalWrite(i+7, HIGH); } playTone(tones[4], ledtime); for (i = 0; i < 4; i = i + 1){ digitalWrite(i+7, LOW); } delay(500); game_on = 0; } //if you insert the right sequence it levels up if (right == 1){ currentlevel++; wait = 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]; digitalWrite(note+7, HIGH); playTone(tones[note], tempo[i]); digitalWrite(note+7, LOW); 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; } }