Go Down

Topic: Ordonner un appui de bouton d'arcade pour l'ouverture d'un electroaimant (Read 126 times) previous topic - next topic

XScapeLille

Bonjour à tous,

Tous d'abord je tiens à préciser que je débute dans le monde magique de l'Arduino :)

Je suis propriétaire d'un Escape Game et dans le cadre d'une création d'énigme, j'ai un projet très ciblé :

Pour la partie branchement, ya pas de soucis, par contre c'est plus au niveau du code que je galère.

Explications :
J'ai 6 boutons d'arcades, et j'aimerai que l'Arduino ouvre un electro-aimant une fois les 6 boutons appuyés dans le bon ordre. Les joueurs doivent appuyer sur la bonne séquence afin de permettre à l'arduino d'exécuter le bon code et s'ils dépassent un délai entre chaque appui (10-15 secondes), la séquence se réinitialise.

J'ai donc branché les 6 boutons sur les PIN 1 à 6 et j'ai tapé ce code :

Code: [Select]
void setup() {

  pinMode(1, INPUT);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT);
  pinMode(13, OUTPUT);
}


Mais c'est la que je coince, je n'arrive à comprendre comment ordonner la séquence (exemple d'abord on appuie sur le 1, puis le 3-5-2-4-6) et surtout faire en sorte que tout fonctionne.

Est ce qu'une âme charitable pourrait m'aider à comprendre s'il vous plait ?

infobarquee

bonjour,
code trop restreint pour voir ce que tu as réalisé

une petite recherche sur le forum, sujet déjà évoqué il y a peu de temps.
AUCUNE AIDE PAR MP

J-M-L

Cherchez aussi les posts sur la gestion d'un mot de passe par exemple

Vous pouvez aussi vous inspirer de mon tuto sur les machines à états car c'en est une assez  simple:

--------------- (EDIT cf ci dessous) ---------------

État D de départ
Une seul transition possible
- le bon bouton amène à État 1

État 1
Deux transitions possibles:
- le bon bouton amėne à Etat 2
- un timeout de 15 secondes ramène à État D (éventuellement avec un déclenchement buzzer "fail")

 État 2
Deux transitions possibles:
- le bon bouton amėne à Etat 3
- un timeout de 15 secondes ramène à État D (éventuellement avec un déclenchement buzzer "fail")

État 3
Deux transitions possibles:
- le bon bouton amėne à Etat 4
- un timeout de 15 secondes ramène à État D (éventuellement avec un déclenchement buzzer "fail")

Etc jusqu'à

État x
Deux transitions possibles:
- le bon bouton action: {ouvre l'électro aimant, buzzer succès} et amėne à Etat F (final)
- un timeout de 15 secondes ramène à État D (éventuellement avec un déclenchement buzzer "fail")

État F
Une transition possible:
- un timeout de X secondes action: {ferme l'électro aimant} et ramène à État D

---------------
Attention si le buzzer sonne des le début c'est une indication facile pour essayer de trouver  par déduction la bonne séquence
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

kamill

Bonjour,

Tu mémorises les touches appuyées dans un tableau.
A chaque appui sur une touche tu mémorise cette touche à l'index courant et tu fais progresser l'index
Lorsque l'index vaut 6 tu compares au tableau ou tu as mis le code à composer.
Le time-out réinitialise l'index à 0

J-M-L

Soit on teste à chaque fois, soit on teste 6 d'un coup effectivement deux approches possibles

Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

kamill

Notre ami XScapeLille n'est pas très précis sur le moyen de trouver la combinaison.

Avec mon algorithme, il faut introduire la combinaison sans taper de fausse touche, ce qui fait que s'il n'y a pas d'indice sur la combinaison ça va être très très long.

Avec ton algorithme, il suffit de taper sur tous les boutons dans l'ordre (ou dans le désordre) au maximum 6 fois pour déverrouiller le bazar. Mais c'est peut être ce que veut XScapeLille: trouver une astuce pour ouvrir sans connaitre le code.

J-M-L

Avec ton algorithme, il suffit de taper sur tous les boutons dans l'ordre (ou dans le désordre) au maximum 6 fois pour déverrouiller le bazar. Mais c'est peut être ce que veut XScapeLille: trouver une astuce pour ouvrir sans connaitre le code.
Non. la machine revient au début si vous avez tapé le mauvais bouton. Si le buzzer sonne (cf la petite note en bas de page) c'est bien sûr un indice pour l'utilisateur et donc ouvre la porte à une attaque "brute force" mais l'ordre doit être respecté à 100%, ne fonctionne pas dans le désordre.

si le buzzer ne sonne pas, l'utilisateur ne sait jamais s'il est revenu au début ou pas, la machine ne teste comme cela que les 6 derniers "click" s'ils sont rentrés dans l'ordre.

Comme l'OP ne mentionne pas de bouton de validation, dans votre approche comment fait un utilisateur qui s'est trompé pour savoir comment recommencer une séquence? il vous faudrait un buffer glissant des 6 dernières entrées

EDIT: Kamill à 100% raison - J'ai dit n'importe quoi, je n'ai pas recopié ma bonne description de machine ci dessus... il fallait lire bien sûr (comme quoi poster avant 7h du mat et le café...)
----------

État D de départ
Une seul transition possible
- le bon bouton amène à État 1

État 1
Trois transitions possibles:
- le mauvais bouton amène à l'état D
- le bon bouton amėne à Etat 2
- un timeout de 15 secondes ramène à État D (éventuellement avec un déclenchement buzzer "fail")

 État 2
Trois transitions possibles:
- le mauvais bouton amène à l'état D
- le bon bouton amėne à Etat 3
- un timeout de 15 secondes ramène à État D (éventuellement avec un déclenchement buzzer "fail")

État 3
Trois transitions possibles:
- le mauvais bouton amène à l'état D
- le bon bouton amėne à Etat 4
- un timeout de 15 secondes ramène à État D (éventuellement avec un déclenchement buzzer "fail")

Etc jusqu'à

État x
Trois transitions possibles:
- le mauvais bouton amène à l'état D
- le bon bouton action: {ouvre l'électro aimant, buzzer succès} et amėne à Etat F (final)
- un timeout de 15 secondes ramène à État D (éventuellement avec un déclenchement buzzer "fail")

État F
Une transition possible:
- un timeout de X secondes action: {ferme l'électro aimant} et ramène à État D

---------------
Attention si le buzzer sonne dès le début sur timeout c'est une indication facile pour essayer de trouver  par déduction la bonne séquence mais ça prend du temps car il faut attendre le timeout à chaque essai.. donc s'ils sont pris par le temps, ce n'est pas forcément une bonne idée mais leur permettrait de s'en sortir s'ils n'ont pas trouvé tous les indices.

Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

Go Up