Gamoover

Vous aimez GAMOOVER ? Vous avez trouvé la perle rare grâce à notre forum ?
Alors pourquoi pas nous soutenir en effectuant un petit don Paypal sur : contribution@gamoover.net
C'est peut être un détail pour vous, mais nous, ça nous aiderait beaucoup !

[idée] pour fabriquer un penny puncher

Démarré par deltaone, Dimanche 26 Février 2006, 10:24:26 AM

jeremiggy

En tout cas oui, étant donné qu'il s'agit de son court ça peu attendre la fin du son pour incrémenter le compteur.

En tout cas si tu es sur le départ je te souhaite de bonnes vacances.  ^-

jeremiggy

Citation de: Noelfhim le Mardi 22 Juillet 2014, 12:31:37 PM
Je ne suis pas sûr à 100%, il faudrait que je reprenne la doc et là je suis sur le départ (j'ai quand même regardé vite fait et c'est pas clair, il disent que la piste est finie sans préciser si c'est une pise demandée par port série ou par trigger).

Je sais que la carte peut informer de la fin de la lecture mais je ne sais pas si ça concerne ou pas les sons déclenchés par trigger ou seulement ceux demandés par l'arduino.

Dans le 2è cas si tu peux attendre la fin du son pour incrémenter un compteur, ça ne pose pas de problème (sauf qu'on est pas sûr que la carte marche comme ça).

Régis.

As-tu eu un petit moment pour jeter un oeil sur cette histoire de shield mp3? j'ai essayé de me documenté un peu mais tout me semble flou pour ma part (j'y connais pas grand chose en même temps donc bon...)

Noelfhim

Citation de: jeremiggy le Dimanche 14 Septembre 2014, 15:18:01 PM
As-tu eu un petit moment pour jeter un oeil sur cette histoire de shield mp3? j'ai essayé de me documenté un peu mais tout me semble flou pour ma part (j'y connais pas grand chose en même temps donc bon...)

Excuse moi, j'avais un peu zappé.

J'ai relu la doc et je pense que c'est bon sans être sûr à 100% (la doc n'est pas claire, il faudrait tester).

Pour moi, il y a 3 approches possibles :

1) 2 switchs ensembles (ou un switch double)
Avantages :
- indépendance des 2 cartes
- simplicité du code
Inconvénients :
- si on lance un bonus, il va falloir attendre la fin du son (on peut mettre une durée en dur)

2) switch sur l'arduino
Avanatages :
- l'arduino gère
- pas de raison que ça ne fonctionne pas
Inconvénients :
- ça fait des opérations en plus pour l'arduino (à un moment ça peut ramer)

3) switch sur la carte
Avantages :
- on soulage l'arduino qui peut faire autre chose pendant ce temps là
- normalement (c'est le point où je ne suis pas 100% sûr), on peut récupérer le fait que la piste soit finie ou en train de jouer (je sais qu'on peut mais je ne suis pas sûr que ça marche avec les triggers)
Inconvénients :
- pas sûr que ça marche à 100%
- beaucoup de communications série (cela dit, c'est comme ça qu'un arduino fait le relais entre une télécommande et un ar drone et ça réagit super bien)

Dans tous les cas, ça reste assez simple à coder. En tout cas, je ne vois pas de gros inconvénient de ce côté là.

Voilà. Est-ce que je t'ai répondu ?

Régis.

jeremiggy

#451
Oui et merci pour ta réponse, j'explore les différentes pistes possible.

On m'a donné l'idée autrement d'utiliser un lecteur MP3 pour la musique de fond, quelque chose dans ce genre mp3et l'arduino s'occupe de lancer la lecture de la musique et de la mettre en pose pendant le jeu bonus et un shield mp3 avec l'arduino gère lui juste les bruitages.
Qu'en pense tu?


Noelfhim

Citation de: jeremiggy le Jeudi 18 Septembre 2014, 10:51:25 AM
On m'a donné l'idée autrement d'utiliser un lecteur MP3 pour la musique de fond, quelque chose dans ce genre mp3et l'arduino s'occupe de lancer la lecture de la musique et de la mettre en pose pendant le jeu bonus et un shield mp3 avec l'arduino gère lui juste les bruitages.
Qu'en pense tu?

C'est possible. C'est sans doute moins cher. De là à savoir si c'est mieux...

Il va falloir interfacer ça avec l'arduino (je dirais un petit relais) et compter une carte SD.

On aurait pu se demander si un lot de cartes comme ça n'aurait pas suffit (c'est pas cher) mais la carte SD en plus, je doute.

Bref, pourquoi pas, à toi de voir. Celle que j'avais trouvé avait l'avantage de prendre en charge une partie du taf en solo (par exemple des bruitages sans autre conséquences pour le jeu) sans charger l'arduino mais c'est plus cher.

De mon point de vue, tout est possible, c'est plus ou moins simple et plus ou moins cher. Le seul risque c'est à qu'un moment l'arduino ne suive plus (qu'il rame) mais à ce moment on peut toujours le remplacer par un modèle plus puissant sans avoir à refaire le programme ni les câblages alors c'est pas grave.

Régis.

jeremiggy

Tu connais ce shield ? http://shop.mchobby.be/shields/428-mp3-shield-music-maker-vs1053.html
Est-il bon pour jouer mes bruitages (si j'ai bien compris le principe quand même, on stock tout les bruitages sur une carte sd et après c'est via le programme que l'on peut lancer un fichier bien particulier se trouvant sur la carte?)

Noelfhim

Citation de: jeremiggy le Lundi 22 Septembre 2014, 15:54:28 PM
Tu connais ce shield ? http://shop.mchobby.be/shields/428-mp3-shield-music-maker-vs1053.html
Est-il bon pour jouer mes bruitages (si j'ai bien compris le principe quand même, on stock tout les bruitages sur une carte sd et après c'est via le programme que l'on peut lancer un fichier bien particulier se trouvant sur la carte?)

Je ne connais pas spécialement.

De ce que j'ai lu, on peut lui faire jouer du MIDI ce qui est sympa (reste à voir la qualité).

Ce que je n'ai pas trouvé c'est la capacité à lire plusieurs sons. Dans les exemples de la bibliothèque, ils jouent une musique et ajoutent une 2è via un moyen un peu détournés. Je ne sais pas si on peut en jouer un 3è en même temps.

Régis.

Noelfhim

J'ai trouvé ça : simulateur d'aduino

Du coup, si on passe par là, je peux relire et compléter le code de l'arduino sans avoir à reproduire le montage.

Régis.

jeremiggy

Bonjour,

Je suis de retour, je travail sérieusement sur le jeu bonus de mon coin pusher.
Pour se faire, j'ai un arduino MEGA.
Je test un peu mais le code je ne connais vraiment rien, j'essai avec les tutos sur le net mais ça reste terriblement flou pour moi.
Pour le moment je suis en phase de test avant d'inclure l'ensemble dans la machine.
Alors voila, pour le moment j'ai branché sur mon arduino un microswitch NO sur la broche 52 et 6 leds sur les broches 23,25,27,29,31 et 33.
Je n'arrive pas en créer le code qui permettrai de partir des leds éteintes qui s'allumerai les une après les autres à chaque appui sur le switch (un appui la led 1 s'allume, un second appui et la led 2 s'allume en plus de la 1 etc..).

Une âme charitable prête à aider un âne ignorant?
Merci

tilowil

#457
Salut,

Voila ce que je peux te proposer. Ce n'est pas parfait, mais il a le mérite de répondre à ta demande.
Je n'ai pas d'Arduino Méga dans mon simulateur, mais le UNO suffit.

int led1 = 8;
int led2 = 9;
int led3 = 10;
int led4 = 11;
int led5 = 12;
int led6 = 13;
int compteur = 0;

int bp = 2;
int bpstate = 0;

void setup() {
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 pinMode(led5, OUTPUT);
 pinMode(led6, OUTPUT);
 pinMode(bp, INPUT);
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 digitalWrite(led5, LOW);
 digitalWrite(led6, LOW);
}

void loop() {
 bpstate = digitalRead(bp);
 if (bpstate == HIGH)
 {
  bpstate = LOW;
   compteur = compteur + 1;
 }
 if (compteur >= 7)
 {
    compteur=6;
 }
 if (compteur >= 1)
 {
   digitalWrite(led1,HIGH);
 }
 if (compteur >= 2)
 {
   digitalWrite(led2,HIGH);
 }
 if (compteur >= 3)
 {
   digitalWrite(led3,HIGH);
 }
 if (compteur >= 4)
 {
   digitalWrite(led4,HIGH);
 }
 if (compteur >= 5)
 {
   digitalWrite(led5,HIGH);
 }
 if (compteur >= 6)
 {
   digitalWrite(led6,HIGH);
 }
 delay(500);
}


Au demarrage


1 appui sur le bouton represantant le microswitch.


2 appuis sur le bouton


6 appuis sur le bouton.

jeremiggy

#458
Salut,

Tout d'abord un grand merci pour ta réactivité et le code.

Par contre je l'ai utilisé et ça ne fonctionne pas chez moi, après avoir transféré le code les leds s'allument puis s'éteignent une à une puis plus rien aucune réaction en appuyant sur le BP.

PS: Par contre je sais pas si ça joue mais dans mon branchement ce ne sont pas les + des leds qui sont reliés aux borches de l'arduino mais les -.

tilowil

#459
Salut,

J'ai respecté ton cahier des charges. A savoir au départ toutes les leds éteinte. A chaque impulsion sur le microswitch (Bouton poussoir sur mon prototypage) on allume une led en laissant la précédente allumée. Donc 1ere impulsion, 1 led allumée (led1), 2eme impulsion 2 leds allumées (led1, led2), 3eme impulsion 3 leds allumées (led1, led2, led3),... , 6eme impulsion toutes les leds allumées. N'ayant pas eu l'information de ce qu'il allait ce passe une fois les 6 leds allumées (commande d'un moteur, émission de musique, ...), donc je suis rester sur l'allumage des leds. Après on peut partir sur un modulo de 7 qui à la 7eme impulsion éteint toutes les leds, puis à la 8eme impulsion on allume 1 led, et ainsi de suite.
Tu n'as pas donné toutes les informations ;), j'ai fait en fonction de ce que tu demandais.

A+

[edit] oui ca joue car les broches de l'arduino délivre du +5V sur un front haut (HIGH) et 0V sur un front bas (LOW). N'ayant pas eu le sens de branchement de tes leds, je les ai câblé sur mon prototype dans le sens standards. et j'ai fait mon programme dans ce sens aussi. Il faut que tu inverses mon code en remplacant tous les HIGH par de LOW et tous les LOW par des HIGH. Il faut que tu donnes toutes les informations. Je ne sais pas de quel endroit tu es (manque l'infos de ta localisation) mais je donne des cours gratuit de développement et de base en électronique au Fablab de Beauvais. Si tu n'es pas de cette région tu as peut être un Fablab dans ta region qui donne des cours gratuit de developpement.

A+

jeremiggy

Non en effet je ne suis pas de ce secteur mais l'idée de prendre des cours d'électronique un jour ou l'autre j'y viendrais.

En tout cas en remplacant les HIGH et LOW et inversement ça marche!.
C'est un bon début. Maintenant il est clair que mon jeu bonus va plus loin que ça. Je reviens dans la journée avec une explication clair du but recherché et les branchements réalisés.

Encore merci en tout cas pour ton code.

Noelfhim

Hello,

Déjà, le programme est pas mal dans l'ensemble.

Si je peux me permettre de pinailler un peu quand même...

1) Le fait de remettre le compteur à 6 quand on dépasse ça ne sert à rien dans le ce contexte. Ca ne gêne pas mais ça pourrait bien gêner un codeur débutant qui veut déclencher une action ensuite.

2) Remettre le bp à LOW ne sert à rien non plus.

3) Là on prend en compte une impulsion, c'est à dire que si on appuie longtemps sur le bouton (plus d'une demi-seconde) on va allumer plusieurs leds à la fois (et ça pourrait bien arriver sans appuyer longtemps si on n'a pas de chance). Ca pourrait aussi ne pas réagir si on appuie vraiment pas longtemps.

Pour le point 3, ça dépend de ce qu'on veut faire. Suivant la façon dont ça va vraiment réagir, on peut stocker l'état voire mettre une interruption.

Supposons qu'on est face à une pièce qui tombe à un endroit (je n'ai pas relu mais je crois me souvenir que c'est ça), il faut considérer que ça sera bref, très bref. Et du coup, ça ne marchera pas forcément.

Je propose un état et une interruption (en mise à jour du programme).
A propos des interruptions, il faut regarder ce tableau (ici pin 2 = int 0 pour arduino uno).

Là où les variables sont déclarées :

int bpint = 0;
// la variable bpstate ne me sert plus

void bpchange()
{
  if (digitalRead(bp) == LOW) compteur++;
}


Dans le setup() :
attachInterrupt(bpint, bpchange, CHANGE);

Dans le main(), j'enlève tout ce qui est avant :
if (compteur >= 1)

Petite explication de texte : le main() ne comprend plus qu'une boucle qui allume les bonnes diodes.
L'interruption est une fonction qui est appelée en interrompant le reste du programme (d'où son nom) et se contente de regarder l'état du bouton. Elle est appelée quand l'état change. Donc si l'état est LOW c'est que la pièce vient de passer (en fait, ça marcherait pareil avec HIGH, c'est la vieille histoire du bouton relâché ou enfoncé pour détecter la frappe d'une touche, ça change juste le timing).
Et donc du coup si l'interruption est appelée, une fois sur deux on peut ajouter une diode. On aurait pu aussi ne pas lire l'état du bouton et incrémenter le compteur à chaque fois et multiplier par 2 les valeurs de test à la fin du main, ceux qui décident de faire des digitalWrite(). En fait, cette dernière option est mieux parce qu'elle économise une lecture, un test et une variable (mais comme je l'ai dit, je pinaille).

En tout cas, je pense vraiment que l'interruption est préférable si on détecte une chute de pièce.

Régis.

tilowil

Salut,

J'ai juste repondu à un besoin et comme je l'ai bien dit :
Citation de: tilowil le Lundi 25 Mai 2015, 01:33:23 AM
Ce n'est pas parfait, mais il a le mérite de répondre à ta demande.
Ensuite bien sur que j'aurai pu utiliser les interruptions, mais avec un microswitch branché en 52 ce n'est pas possible :D.

A+

jeremiggy

#463
Salut tout le monde.

Merci de vous intéresser à mon projet.

Je viens de découvrir tes remarques Noelfhim et ça me dépasse complètement! je ne pige quasiment rien! J'ai vraiment d'énormes lacunes dans ce domaine.
De mon côté j'avais travaillé à partir du code proposé par tilowil pour arriver à ça dans l'optique de ne plus allumer 6 leds mais 15.

int led1 = 25;
int led2 = 27;
int led3 = 29;
int led4 = 31;
int led5 = 33;
int led6 = 35;
int led7 = 37;
int led8 = 39;
int led9 = 41;
int led10 = 43;
int led11 = 45;
int led12 = 47;
int led13 = 49;
int led14 = 51;
int led15 = 53;
int compteur = 0;

int bp = 13;
int bpstate = 0;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);
  pinMode(led14, OUTPUT);
  pinMode(led15, OUTPUT);
  pinMode(bp, INPUT);
  digitalWrite(led1, HIGH);
  digitalWrite(led2, HIGH);
  digitalWrite(led3, HIGH);
  digitalWrite(led4, HIGH);
  digitalWrite(led5, HIGH);
  digitalWrite(led6, HIGH);
  digitalWrite(led7, HIGH);
  digitalWrite(led8, HIGH);
  digitalWrite(led9, HIGH);
  digitalWrite(led10, HIGH);
  digitalWrite(led11, HIGH);
  digitalWrite(led12, HIGH);
  digitalWrite(led13, HIGH);
  digitalWrite(led14, HIGH);
  digitalWrite(led15, HIGH);
}

void loop() {
  bpstate = digitalRead(bp);
  if (bpstate == LOW)
  {
   bpstate = HIGH;
    compteur = compteur + 1;
  }
  if (compteur >= 16)
  {
     compteur=15;
  }
  if (compteur >= 1)
  {
    digitalWrite(led1,LOW);
  }
  if (compteur >= 2)
  {
    digitalWrite(led2,LOW);
  }
  if (compteur >= 3)
  {
    digitalWrite(led3,LOW);
  }
  if (compteur >= 4)
  {
    digitalWrite(led4,LOW);
  }
  if (compteur >= 5)
  {
    digitalWrite(led5,LOW);
  }
  if (compteur >= 6)
  {
    digitalWrite(led6,LOW);
  }
  if (compteur >= 7)
  {
    digitalWrite(led7,LOW);
  }
  if (compteur >= 8)
  {
    digitalWrite(led8,LOW);
  }
  if (compteur >= 9)
  {
    digitalWrite(led9,LOW);
  }
  if (compteur >= 10)
  {
    digitalWrite(led10,LOW);
  }
  if (compteur >= 11)
  {
    digitalWrite(led11,LOW);
  }
  if (compteur >= 12)
  {
    digitalWrite(led12,LOW);
  }
  if (compteur >= 13)
  {
    digitalWrite(led13,LOW);
  }
  if (compteur >= 14)
  {
    digitalWrite(led14,LOW);
  }
  if (compteur >= 15)
  {
    digitalWrite(led15,LOW);
  }
  delay(500);
}


Je complique en peu les choses maintenant, j'ai ajouté 2 switch supplémentaire ce qui me fait 3 switch pour 15 leds. L'idée est que le switch 1 allume les 5 premières leds, le switch 2 les 5 suivantes et le 3 ième et dernier switch les 5 dernières.
Comment coder tout ça?