Go Down

Topic: [AIDE] jeu de reflexe- detection appui (Read 139 times) previous topic - next topic

victorberson94

Mar 27, 2019, 05:54 pm Last Edit: Mar 27, 2019, 06:11 pm by victorberson94
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.

icare

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;
}
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

jfs

Dans le cadre de mon cursus scolaire, je dois faire un jeu en arduino.
Ce serait pas mal de le préciser....
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

victorberson94

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

icare

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.
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

Go Up