Arduino Forum

International => Français => Topic started by: victorberson94 on Mar 27, 2019, 05:54 pm

Title: [AIDE] jeu de reflexe- detection appui
Post by: victorberson94 on Mar 27, 2019, 05:54 pm
Bonjour

Je suis en train de faire un jeu sur arduino. Ma seule contrainte : utiliser un panneau de led de 32*16.
Du coup mon jeu est le suivant : des equations s'affichent succesivement. Le premier joueur a appuyé sur son bouton gagne si l'équation est vraie, si elle est fausse et qu'un joueur a appuyé, il perd. Si au bout de quelques secondes aucuns joueur n'a appuyé, l'équation suivante apparait

Je n'arrive pas a detecter l'appuie sur un bouton...

Voici mon code

Code: [Select]
int jeuEquation()             //fonction du jeu Equation
{
  int s1 = 0, s2 = 0, t, r;       
  while(!s1 && !s2)             //tant que aucun des boutons n'est appuyé. Si 1/2 est appuyé, on sort du while
  {
    t=random(0,14);                                             //choix random de l'equation (parmis les 15)
    afficherEquation(EQ[t][0],EQ[t][1],EQ[t][2],EQ[t][3]);      //affichage de l'equation t
    unsigned long temps = millis();
    r=random(3,10);       //on attend un temps random (entre 1 seconde et 4s) pour afficher l'équation suivante
    while(millis()-temps < 400*r)
    {
    s1=digitalRead(J1);                                         //on lit le bouton J1             
    s2=digitalRead(J2);                                         //on lit le bouton J1
    }
    //on desactive toutes les led
    afficherChiffre(1,-1);
    afficherChiffre(2,-1);
    afficherChiffre(3,-1);
    afficherChiffre(4,-1);
    afficherChiffre(5,-1);
    afficherChiffre(6,-1);
    afficherSigne(-1);
  }
  if(s1 && !s2)                                         //si c'est le joueur 1 qui a appuyé
  {
    if(EQ[t][4])                                //on verifie si l'équation etait vraie
    {
      return 1;
      Serial.println("J1 gagne");
     
    }
    else
    {
      return 2;
      Serial.println("J2 gagne");
    }
  }
  else if(!s1 && !s2)
  {
    if(EQ[t][4])
    {
      return 2;
      Serial.println("J2 gagne");
    }
    else
    {
      return 1;
      Serial.println("J1 gagne");
    }
  }
 }



Merci d'avance pour votre aide
Victor.
Title: Re: [AIDE] jeu de reflexe- detection appui
Post by: icare on Mar 27, 2019, 06:19 pm
Bonjour,
Une piste pour toi
Code: [Select]
/* ************************************************************************ */
/* Bouton poussoir appuyé                                                   */
/* ************************************************************************ */
uint8_t appuiBoutonPoussoir(uint8_t pin, uint8_t mode){
/*Mode = 0 pour BP entre entrée et masse (res entre entrée et alimentation)
  Mode = 1 pour BP entre entrée et alimentation (res entre entrée et masse)
  renvoi 0 si non appuyé et 1 si appuyé
            Mode 0            Mode 1
             Vcc               Vcc   
             ┌┴┐                │
             │ │                o │B
             └┬┘                o │P
         I/O ─┤            I/O ─┤
              │                ┌┴┐
              o │B             │ │
              o │P             └┬┘
              ┴                 ┴
             Gnd               Gnd
*/
uint8_t dummy = 0;
uint8_t appui = 0;
if(mode == 0){ //mode 0
if(digitalRead(pin) == 0){ //BP appuyé
dummy = 0;
delay(DEBOUNCE);
if(digitalRead(pin) == dummy){
appui = 1;
}
}
} else { //mode 1
if(digitalRead(pin) == 1){ //BP appuyé
dummy = 1;
delay(DEBOUNCE);
if(digitalRead(pin) == dummy){
appui = 1;
}
}
}
return appui;
}
Title: Re: [AIDE] jeu de reflexe- detection appui
Post by: jfs on Mar 27, 2019, 07:16 pm
Dans le cadre de mon cursus scolaire, je dois faire un jeu en arduino.
Ce serait pas mal de le préciser....
Title: Re: [AIDE] jeu de reflexe- detection appui
Post by: victorberson94 on Mar 28, 2019, 08:38 pm
Salut icare, merci de ta réponse

Dans ton delay, tu met "DEBOUNCE", qu'est ce que c'est?
Et mettre de delay ne risque pas d'empecher les joueurs de cliquer? le but etant que le programme soit réactif et impartial vis a vis des deux joueurs



Merci
Title: Re: [AIDE] jeu de reflexe- detection appui
Post by: icare on Mar 28, 2019, 09:31 pm
Re,
Dans ton delay, tu met "DEBOUNCE", qu'est ce que c'est?
DEBOUNCE est une durée.

Code: [Select]
#define DEBOUNCE 100 //anti-rebondissement BP


Et mettre de delay ne risque pas d'empecher les joueurs de cliquer? le but etant que le programme soit réactif et impartial vis a vis des deux joueurs
Essaie en supprimant le délais et tu comprendras pourquoi. ;)
Fait une recherche sur la toile pour voir à quoi sert le debounce.