Jeu de mémoire

De troyesGEII
Aller à : navigation, rechercher


Fabrication d'un jeu de mémoire en quantité indutrielle

Cahier des charges

  • Présentation du projet


L'objectif du projet est de réaliser un jeu de mémoire en quantité industrielle (une centaine). Ce jeu est simple : une série de leds s'allume dans un ordre particulier, le joueur doit reproduire parfaitement cette séquence.


  • Objectifs

Bête à cornes.png

  • Public ciblé
    • Dimension des cartes : le plus compact possible
    • Disposition des leds, boutons et microcontrôleur : leds et boutons organisés en 4 (comme un dé), position du microcontrôleur à définir
    • Différents niveaux possibles : la difficulté des niveaux augmente avec des séries à reproduire qui deviennent de plus en plus longues et rapides


  • Description du fonctionnement

Les leds de ce jeu sont contrôlées par un microcontrôleur AT Tiny qui permet de faire allumer aléatoirement les leds dans un ordre précis.


Tests sur carte Arduino

On fait d'abord clignoter une led sans bouton :

void setup()
{
  pinMode(13,OUTPUT); // on précise ici que la patte 13 est une sortie
}

void loop()
{
  digitalWrite(13,0); // extinction de la led 13 de la carte Arduino
  delay(100);
  digitalWrite(13,1); // éclairement de la led 13 de la carte Arduino
  delay(100);
}

On fait ensuite clignoter la led avec un bouton sur le principe suivant : si le bouton est appuyé, la led est allumée, sinon elle est éteinte. On code le programme suivant :

unsigned char ledPin = 13; // on positionne la led
unsigned char bpPin = 2;   // le bouton est sur la patte 2
unsigned char etatBp;      // on récupère l'état du bouton

void setup()
{
  pinMode(bpPin,INPUT);
  pinMode(ledPin,OUTPUT); // on configure les e/s
}

void loop()
{
  etatBp = digitalRead(bpPin); // on "lit" l'état de l'entrée
  if (etatBp==1)
       digitalWrite(ledPin,0); // on "écrit" l'état de la sortie 
  else
       digitalWrite(ledPin,1);
}

On veut savoir s'il est possible d'avoir un signal d'entrée et un signal de sortie sur la même patte du microcontrôleur. L'objectif est simple : si le bouton est appuyé, on allume la led sur la carte Arduino et la led externe, sinon on les éteint. Nous allons faire 2 programmes distincts pour observer d'une part l'état du bouton avec la liaison série, et d'autre part faire clignoter la led.

Liaison série

unsigned char bpPin = 13; // le bouton est sur la patte 13
unsigned char etatBp;    // on récupère l'état du bouton 

void setup()
{
  pinMode(bpPin,INPUT);  // on configure les e/s
  Serial.begin(9600);    // on communique avec la liaison série
}

void loop()
{
  etatBp = digitalRead(bpPin); // on "lit" l'état de l'entrée

  Serial.print("Etat du bouton : ");
  Serial.println(etatBp);      // on observe l'état du bouton avec la liaison série

  delay(500);
}

On réutilise le programme qui fait clignoter une led sans bouton vu ci-dessus. On constate que la led externe clignote, ce qui montre qu'il est possible de commander 2 opérations différentes sur une même patte de microcontrôleur.

Remarque : nous avons fait les tests sur une carte Arduino Uno alimentée en 5V. En réalité, le microcontrôleur AT Tiny que nous allons utiliser sera alimenté en 3V avec une pile CR2032. Par conséquent, nous allons faire de nouveaux tests avec une carte Arduino Due qui permet de fournir 3V.