Jeu : PunchPoints

Parlez nous de vos projets et de vos idées, imaginez des applications

Jeu : PunchPoints

Message non lude TheDevLoper » Mer 1 Fév 2012 13:45

Bonjour a tous !

Je m'appelle Thomas j'ai 13ans, je suis nouveau sur le forum (Inscription datant d'hier), je possédé depuis 2jours la carte Arduino.
Il y as peut j'ai entrepris de créer un petit jeu dont j'ai intitulé PunchPoints.

Le jeu se joue a 2,
les deux joueurs ont un bouton devant eux et doivent appuyer sur leur bouton le plus de fois possible jusqu’à que leurs résultats soit additionner et que le nombre est égale a 10 (j'ai mis 10 pour débuter).
Puis le programme différencie les résultats des joueurs et si par exemple le joueur 1 gagne, la led s'allumera.

Sauf que (et vous devez vous en doutez) il y as des erreurs, certainement dans le code et dans mon circuit ! Même si j'ai "beau" a appuyer 30 fois sur un bouton rien ne se passe.
Voila mon code :
Code: Tout sélectionner
/*
Jeu du PunchPoints réaliser par Thomas
début du projet : 31/01/12 a 19h21
fin du projet :
*/
int traite = 0, traite2 = 0, compteur = 0, compteur2 = 0, resultat = 0;

void setup() {
  pinMode(2, OUTPUT);//Lampe
  pinMode(4, OUTPUT);//Buzzeur
  pinMode(8, INPUT);//Bouton du buzzeur
  pinMode(12, INPUT);//Bouton de la LED
}

void loop() {
  while(resultat != 3) {
    digitalRead(8);
    digitalRead(12);
   
    if(8 == HIGH)
    compteur++;
   
    if(12 == HIGH)
    compteur2++;
   
    resultat = resultat + compteur + compteur2;
  }
 
  if(compteur > compteur2)
  {
  digitalWrite(4, HIGH);
  delay(1000);
  digitalWrite(2, HIGH);
  }
 
  else if(compteur < compteur2)
  {
    digitalWrite(2, HIGH);
    delay(1000);
    digitalWrite(2, LOW);
  }
}


Pour le circuit je vous est fait une petite vidéo (je m'excuse pour la qualité)


Merci d'avoir lu ! En espérant une réponse dans les plus bref délais, merci d'avance.
Pour m'aidez financièrement pour le développement du site de la communauté MineDestiné:
Site: http://www.moneylink.fr/id=6728
Musique: http://www.moneylink.fr/id=6732
Ca peux vous aidez ca, non ? http://www.moneylink.fr/id=6723
TheDevLoper
 
Messages: 26
Inscription: Mar 31 Jan 2012 10:33

Re: Jeu : PunchPoints

Message non lude phil » Mer 1 Fév 2012 14:53

Bonjour,

un des problèmes ce situe ici

Code: Tout sélectionner
   
    digitalRead(8);
    digitalRead(12);
   
    if(8 == HIGH)
    compteur++;
   
    if(12 == HIGH)
    compteur2++;

J’imagine que tu veux que si l'arduino voie que la pin 8 ou 12 est à HIGH tes compteurs (compteur et compteur2) s'incrémentent
Cependant, le test que tu fait pour regarder cela est "if(8 == HIGH) " cette condition sera toujours fausse !!!

Si tu fait
Code: Tout sélectionner
   
 
    if(digitalRead(8) == HIGH)
    compteur++;
   
    if(digitalRead(12) == HIGH)
    compteur2++;

Il y a des chances ce cela marche mieux. ;)

Cependant, il y a un autre problème : si tu laisse le ou les boutons "on", les compteurs vont s'incrémenter à chaque loop et donc ton jeu ne va pas marcher comme tu le souhaite.

Il y a deux solutions pour ça :
1 utiliser les interruptions externes (et c'est trop la classe). Tu peux en avoir 2 sur un arduino uno (pin 2 et 3) http://arduino.cc/fr/Main/AttachInterrupt
2 utiliser une variable qui va "retenir que tu as déjà appuyé sur le bouton au loop précédent" et intégrer ça dans ton code...

Si j'ai un peu de temps, j'essayerai de te faire des exemples !!!
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Jeu : PunchPoints

Message non lude TheDevLoper » Mer 1 Fév 2012 15:09

Merci, mais je n'y arrive pas :x !
Donc je ne suis pas contre pour un exemple.
De plus je ne sais meme pas si mon montage est juste... D’ailleurs je ne sais même pas pourquoi je l'est branché sur la broche GND.
A quoi sert elle ? et pourquoi l'utiliser ?

Merci d'avance
Pour m'aidez financièrement pour le développement du site de la communauté MineDestiné:
Site: http://www.moneylink.fr/id=6728
Musique: http://www.moneylink.fr/id=6732
Ca peux vous aidez ca, non ? http://www.moneylink.fr/id=6723
TheDevLoper
 
Messages: 26
Inscription: Mar 31 Jan 2012 10:33

Re: Jeu : PunchPoints

Message non lude phil » Mer 1 Fév 2012 16:11

Un petit schéma pourrai aider à savoir si ce que tu as fait est correct ...
Peux-tu en poster un ?
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Jeu : PunchPoints

Message non lude TheDevLoper » Mer 1 Fév 2012 16:20

J'aimerais bien, oui, mais je n'est aucun logiciel prévu a cette effet.
J'ai fait des recherches mais les logiciels ne sont destiné qu'aux professionnel, je n'est pas trouvé de logiciel pour les débutants/amateurs.

En auriez-vous un ?

Merci d'avance.
Pour m'aidez financièrement pour le développement du site de la communauté MineDestiné:
Site: http://www.moneylink.fr/id=6728
Musique: http://www.moneylink.fr/id=6732
Ca peux vous aidez ca, non ? http://www.moneylink.fr/id=6723
TheDevLoper
 
Messages: 26
Inscription: Mar 31 Jan 2012 10:33

Re: Jeu : PunchPoints

Message non lude phil » Mer 1 Fév 2012 16:34

Pour faire des schemas tu peux utiliser fritzing
http://fritzing.org/download/

voila un petit tutorial qui peut t'aider
http://arduino.cc/en/Tutorial/ButtonStateChange
Cet exemple permet d'allumer la led qui est sur la carte arduino au bout de 4 actions successives
sur le bouton installé sur la pin 2
Tu remarquera qu'il y a des instructions de type Serial.println...
Dans ton IDE arduino, clique sur Serial Monitor, sélectionne le bon port COM et choisis 9600 pour la vitesse et... :o :o :o Magique !!! Mon arduino envoie des messages à mon PC !!! C'est pratique pour faire du debug.

J'ai vite fait une modif de l'exemple pour fonctionner avec 2 boutons mais je l'ai pas testé...
Ce code permet d'avoir 2 boutons (pin 2 et 3). Si le nombre total de push sur les boutons est un multiple de 10, alors la led sur la carte aduino s'allume. Sinon elle est éteinte.

Code: Tout sélectionner
const int  buttonPin = 2;    // the pin that the pushbutton is attached to
const int  buttonPin2 = 3;    // the pin that the pushbutton is attached to


const int ledPin = 13;       // the pin that the LED is attached to

// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button
int buttonState2 = 0;         // current state of the button
int lastButtonState2 = 0;     // previous state of the button




void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);

}


void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);
  buttonState2 = digitalRead(buttonPin2);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      buttonPushCounter++;
      Serial.println("on B1");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    }
    else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off B1");
    }
  }
  if (buttonState2 != lastButtonState2) {
    // if the state has changed, increment the counter
    if (buttonState2 == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      buttonPushCounter++;
      Serial.println("on b2");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    }
    else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off b2");
    }
  }
 
  // save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;
  lastButtonState2 = buttonState2;
 
  // turns on the LED every ten button pushes by
  // checking the modulo of the button push counter.
  // the modulo function gives you the remainder of
  // the division of two numbers:
  if (buttonPushCounter % 10 == 0) {
    digitalWrite(ledPin, HIGH);
  } else {
   digitalWrite(ledPin, LOW);
  }
 
}
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Jeu : PunchPoints

Message non lude TheDevLoper » Mer 1 Fév 2012 17:19

Merci, je vais le tester.
Cependant j'aurais quelque questions a te poser :
-A quoi sert la borne GND et pourquoi l'utiliser ?
-A quoi sert les borne 5V et 3,3V, et de même, pourquoi les utiliser ?
-Si je fait un circuit sans résistance, mon circuit ne va pas griller :? ? (Ma carte est branchée sur mon PC.)

Merci d'avance.
Pour m'aidez financièrement pour le développement du site de la communauté MineDestiné:
Site: http://www.moneylink.fr/id=6728
Musique: http://www.moneylink.fr/id=6732
Ca peux vous aidez ca, non ? http://www.moneylink.fr/id=6723
TheDevLoper
 
Messages: 26
Inscription: Mar 31 Jan 2012 10:33

Re: Jeu : PunchPoints

Message non lude phil » Mer 1 Fév 2012 18:20

La borne GND c'est la masse (le - si tu préféré)
La borne +5 c'est un point qui "donne" du 5 V (le + si tu préféré)

Basiquement, si tu veux faire marcher une led il faut faire un circuit comme ceci

+5---LED---Résistance 1k---GND

-Si je fait un circuit sans résistance, mon circuit ne va pas griller :? ? (Ma carte est branchée sur mon PC.)

Oui c'est possible...
Dans le tuto que j'ai posté plus haut, tu remarqueras qu'il y a une résistance de 10 k entre la pin 2 et le GND.
Cette résistance sert a ne pas faire de court-circuit quand tu appuie sur le bouton...

D'une manière générale il ne faut pas connecter le +5 directement au GND sinon BOOOM !!!! :twisted: :twisted: :twisted: :twisted:
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Jeu : PunchPoints

Message non lude TheDevLoper » Mer 1 Fév 2012 18:28

Voila, je pense avoir fini mon montage.
http://www.fufox.net/?d=B3E309401786

J’espère l'avoir bien fait...

EDIT: Je viens de lire ton message :lol:
Ok je ferais donc attention de ne pas brancher le 5V avec le GND !
Mais pourquoi placer le résistor après la LED ?! il faut plutôt placer le resistor avant la LED ?
Encore merci pour tes explications :)

EDIT2: Sinon il y as l'image :
Image
Pour m'aidez financièrement pour le développement du site de la communauté MineDestiné:
Site: http://www.moneylink.fr/id=6728
Musique: http://www.moneylink.fr/id=6732
Ca peux vous aidez ca, non ? http://www.moneylink.fr/id=6723
TheDevLoper
 
Messages: 26
Inscription: Mar 31 Jan 2012 10:33

Re: Jeu : PunchPoints

Message non lude phil » Mer 1 Fév 2012 18:48

Mais pourquoi placer le résistor après la LED ?! il faut plutôt placer le resistor avant la LED ?

ça n a pas d'importance...

Sinon pour le schéma, il y a un problème je pense...
J’essaye de te faire un truc ce soir
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Jeu : PunchPoints

Message non lude TheDevLoper » Mer 1 Fév 2012 18:54

Super ! merci, une petite question pour la route :) , Je n'utilise pas de 5V et ca marche tres bien ! j'utilise le bornes (1, 3 ,8, 13 etc...) comme borne + et le GND pour la borne -. J'utilise de petites tables d’essais (2) et je n'est pas de fil rouge et bleu donc si ca marche sans le 5V pourquoi le mettre ?

Merci.
Pour m'aidez financièrement pour le développement du site de la communauté MineDestiné:
Site: http://www.moneylink.fr/id=6728
Musique: http://www.moneylink.fr/id=6732
Ca peux vous aidez ca, non ? http://www.moneylink.fr/id=6723
TheDevLoper
 
Messages: 26
Inscription: Mar 31 Jan 2012 10:33

Re: Jeu : PunchPoints

Message non lude phil » Mer 1 Fév 2012 23:40

ok, ok, ok,

mais c'est pas tout a fait ce que tu as représenté sur ton schéma ;)

Si j'ai bien compris tu fais :

pin 2 -- led 1 -- GND
pin 4 -- led 2 -- GND
pin 8 -- bouton 1 -- GND
pin 13 -- bouton 2 -- GND

Si ça marche sans utiliser le +5V et sans résistance de pullup ni 5V c'est que l'appel de la fonction"pinMode(buttonPin, INPUT);" active sur cette pin le pullup interne.

Au fait dans fritzing tu peux utiliser des breadboards à la place de la plaque d'essai que tu as utilisé
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Jeu : PunchPoints

Message non lude TheDevLoper » Jeu 2 Fév 2012 12:54

Ha ! donc si j'ai bien compris, on est pas obligé de déclarer ses led (par exemple) si on utilise la broche 5V ou 3,3 ?
Pour m'aidez financièrement pour le développement du site de la communauté MineDestiné:
Site: http://www.moneylink.fr/id=6728
Musique: http://www.moneylink.fr/id=6732
Ca peux vous aidez ca, non ? http://www.moneylink.fr/id=6723
TheDevLoper
 
Messages: 26
Inscription: Mar 31 Jan 2012 10:33

Re: Jeu : PunchPoints

Message non lude phil » Jeu 2 Fév 2012 14:20

2 choses :

1 - Il est préférable d'utiliser une résistance avec les leds de manière à limiter le courant.
Tu peux trouver un outil de calcul ici http://www.volta-electricite.info/articles.php?lng=fr&pg=6152.
Si tu sais pas quoi mettre, utilise une résistance de 1kohms. Ta leds n’aura pas son intensité maximale mais elle ne grillera pas.

2 -
a ! donc si j'ai bien compris, on est pas obligé de déclarer ses led (par exemple) si on utilise la broche 5V ou 3,3 ?

Je ne comprend pas bien ta question... Quand tu configure une pin en output (pinMode(ledPin, OUTPUT);), cette pin fournira du 5V quand elle est "HIGH" ( digitalWrite(ledPin, HIGH);) et sera relié à la masse quand elle est "LOW" (digitalWrite(ledPin, LOW);)
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Jeu : PunchPoints

Message non lude TheDevLoper » Jeu 2 Fév 2012 16:02

Ok, sinon pour le montage a tu eu le temps d'arriver a un résultat ?
Pour m'aidez financièrement pour le développement du site de la communauté MineDestiné:
Site: http://www.moneylink.fr/id=6728
Musique: http://www.moneylink.fr/id=6732
Ca peux vous aidez ca, non ? http://www.moneylink.fr/id=6723
TheDevLoper
 
Messages: 26
Inscription: Mar 31 Jan 2012 10:33

Re: Jeu : PunchPoints

Message non lude phil » Jeu 2 Fév 2012 18:02

non (j'ai pas eu le temps....)
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Jeu : PunchPoints

Message non lude TheDevLoper » Ven 3 Fév 2012 14:20

Quelqu'un aurai le temps de m'aider ?
Je n'est aucune idée comment réaliser mon projet.
Si quelqu'un peu m'aider, ca serai sympa
Pour m'aidez financièrement pour le développement du site de la communauté MineDestiné:
Site: http://www.moneylink.fr/id=6728
Musique: http://www.moneylink.fr/id=6732
Ca peux vous aidez ca, non ? http://www.moneylink.fr/id=6723
TheDevLoper
 
Messages: 26
Inscription: Mar 31 Jan 2012 10:33

Re: Jeu : PunchPoints

Message non lude phil » Jeu 9 Fév 2012 11:40

J'ai fait un petit montage pour ton jeu

Le principe est le suivant:
Chacun des joueurs a un bouton et doit bouriner dessus...
Au bout de "scoremax" (6) appuis au total, les deux leds clignotent en cas d'égalité, la led1 clignote pour la victoire du joueur 1 et la led2 clignote pour la victoire du joueur 2.
Ensuite c'est reparti.

Ce n'est pas parfait, notamment tu verra qu'il est possible de voir quelques "rebonds" (comptabilisation de plusieurs appuis pour un seul appui). Quand j’aurai un peu de temps à nouveau je regarderai ça... Cela dit tu peux d’inspirer du mécanisme anti rebond de ce montage http://www.sonelec-musique.com/electronique_bases_bascule_on_off.html


Voila comme se doit être câblé
Image

Et le code (avec des interruption dedant...)
Code: Tout sélectionner
#define led1 9 //led pour le joueur 1
#define led2 13 // led pour le joueur 2
#define sw1 0 //interuption 0 sur la pin 2
#define sw2 1 //interuption 1 sur la pin 3
volatile int score1 = 0;
volatile int score2 = 0;
volatile boolean led1State = false;
volatile boolean led2State = false;
int scoremax = 6; //le nombre total d'appui sur les boutons pour considérer que la partie est finie

void setup()
{
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  attachInterrupt(sw1, plus1, FALLING);
  attachInterrupt(sw2, plus2, FALLING);
  led1State = false;
  led2State = false;
}


void plus1() // quand on appuie sur le bouton 1 (pin 2)
{
  score1++;
  led1State = !led1State;
}
void plus2() // quand on appuie sur le bouton 2 (pin 3)
{
  score2++;
  led2State = !led2State;
}


void loop()
{
  digitalWrite(led1, led1State);
  digitalWrite(led2, led2State);

  Serial.print("score1=");
  Serial.print(score1);
  Serial.print(" score2=");
  Serial.println(score2);

  if (score1+score2>=scoremax) //si on attend le score max
  {
    detachInterrupt(sw1);  //on déactive les interruptions
    detachInterrupt(sw2);

    if (score1==score2) //cas de l'égalité
    {
      Serial.println("Egalité");
      for (int i=0;i<20;i++) // on fait clignoter les deux leds 10 fois
      {
        digitalWrite(led1, led1State);
        digitalWrite(led2, led1State);
        delay(500);
        led1State=!led1State;
      }
    }
    else
    {
      if ( score1>score2) //Le joueur 1 gagne
      {
        Serial.print("Victoire joueur 1");
        digitalWrite(led2, LOW);
        for (int i=0;i<20;i++) // on fait clignoter la led 1 10 fois
        {
        digitalWrite(led1, led1State);
        delay(500);
        led1State=!led1State;
        }
      }
      else //Le joueur 2 gagne
      {
        Serial.print("Victoire joueur 2");  // on fait clignoter la led 2 10 fois
        digitalWrite(led1, LOW);
        for (int i=0;i<20;i++)
        {
        digitalWrite(led2, led1State);
        delay(500);
        led1State=!led1State;
        }
      }
    }
    score1 = 0; //reinitialiation des score
    score2 = 0;
    digitalWrite(led1, LOW); // on eteint les leds
    digitalWrite(led2, LOW);
    attachInterrupt(sw1, plus1, FALLING); // on réactive les interruptions et on repart pour une nouvelle partie...
    attachInterrupt(sw2, plus2, FALLING);
  }
}
Dernière édition par phil le Lun 13 Fév 2012 16:29, édité 1 fois.
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19

Re: Jeu : PunchPoints

Message non lude phil » Lun 13 Fév 2012 12:28

Si ça marche sans utiliser le +5V et sans résistance de pullup ni 5V c'est que l'appel de la fonction"pinMode(buttonPin, INPUT);" active sur cette pin le pullup interne.

J'ai dit une bêtise la dernière fois...
C'est avec pinMode(buttonPin, INPUT); ET digitalWrite(buttonPin, HIGH); que l'on active les pullup interne...
Plus de détail ici
http://arduino.cc/fr/Main/ApprendreBrochesEntreeSortie

Au fait, t'as pu essayé ?
all your shields are belong to us...
Avatar de l’utilisateur
phil
 
Messages: 192
Inscription: Mer 7 Sep 2011 11:19


Retourner vers Vos projets, vos idées

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités