Créez un jeu Arduino basé sur un contrôleur SNES: 8 étapes

Créez un jeu Arduino basé sur un contrôleur SNES: 8 étapes

Table des matières:

Anonim

Dans cette instruction, je vais vous montrer comment prendre un contrôleur SNES, le brancher sur un Arduino et créer un jeu simple de Simon Says.

Cela pourrait être utilisé pour créer un jeu plus complexe, ou peut-être même essayer de créer une mini-console basée sur Arduino. Finalement, je vais avoir une vidéo du jeu en action, mais je ne sais pas quand.

Provisions:

Étape 1: Matériel nécessaire

Les matériaux nécessaires sont les suivants:

-1 Arduino

-1 petite planche à pain

-1 ancien contrôleur SNES que vous voudriez bien déchirer

-10-15 Fils de connexion (j'utilise 11)

-5 LED

-ruban

Étape 2: Connectez tous les fils pour l'Arduino

Branchez les fils de cavalier dans les broches 2 à 9 de l'arduino. Voir ci-dessous pour voir ce que chaque broche fait, ainsi que mon jeu de couleurs recommandé.

Pin 2: Pin stroboscopique. Se connecte au fil orange du contrôleur, donc je ferais le cavalier rose ou orange.

Pin 3: Pin de l'horloge. Se connecte au fil jaune du contrôleur, je recommande donc un cavalier jaune.

Pin 4: Pin de données. Le fil rouge sur le contrôleur, un cavalier rouge serait donc préférable.

Broche 5: Alimentation pour la led supérieure.

Broche 6: Alimentation pour le led droit.

Broche 7: Alimentation pour la led inférieure.

Broche 8: Alimentation pour le led gauche.

Les broches 5 à 8 doivent avoir la même couleur de câble de démarrage. Je choisis le vert foncé.

Pin 9: Puissance pour led indicateur de jeu. J'ai utilisé le vert clair.

5V: broche d'alimentation, se connecte au fil blanc du contrôleur, j'ai donc utilisé un cavalier blanc.

GND: Fil marron du contrôleur, j'ai utilisé un cavalier noir.

GND: Utilisé pour connecter tous les terrains de la planche à pain à Arduino, j’utilise le bleu pour tous les fils de terre.

Étape 3: Configuration des voyants et de la planche à pain

Placez vos LED sur la planche à pain en forme de losange. Assurez-vous que 2 broches de LED ne partagent pas la même ligne numérotée. Câblez toutes les cathodes (broches courtes sur les leds) aux lignes de masse de votre carte de montage, puis branchez-la à l'une des GND de l'arduino. Connectez les cavaliers des broches 5 à 8 aux anodes de vos voyants, en fonction de leur position, comme indiqué dans la dernière étape.

Pour l’indicateur de jeu, placez-le loin des autres, connectez son anode à la broche 9 et votre cathode à la rampe de mise à la terre.

Étape 4: Branchement du contrôleur

Jusqu'à présent, vous n'avez pas eu à vous soucier du tout du contrôleur. Maintenant, vous devez couper le boîtier en plastique de l'extrémité du fil afin de pouvoir accéder aux fils à l'intérieur. Ils devraient avoir quelques petites extrémités métalliques (se référer aux images), il devrait donc être assez simple de brancher des fils de liaison, non?

Faux.

D'abord, fixez le cordon du contrôleur au bureau près de l'arduino. Si vous le laissez bouger, vous aurez du mal à établir de bonnes relations. Mes fils de cavalier glissent tout droit hors des petites choses en métal. J'ai donc pris un couteau de poche et écarté les extrémités (voir les images) afin de pouvoir enfoncer le fil de cavalier perpendiculairement dans la prise. Lorsque vous raccordez les 5 fils au contrôleur, assurez-vous qu'ils ne se touchent pas et que les couleurs correspondent correctement.

Étape 5:

À ce stade, tout devrait être correctement câblé et prêt à fonctionner. Téléchargez le croquis Arduino lié, compilez-le, puis téléchargez-le sur votre arduino. Pour jouer, attendez que le voyant de jeu cesse de clignoter, puis utilisez AXBY comme 4 directions cardinales. Dans les prochaines étapes, je tenterai d’expliquer le code, mais si vous voulez seulement un jeu qui fonctionne, vous pouvez vous arrêter ici.

Simon_Says_snes.ino

Étape 6: Le code, partie 1

Tout d'abord, un peu de contexte sur la manière dont le contrôleur envoie les données. Afin de recevoir des données du contrôleur, vous définissez la broche stroboscopique sur haute, puis lisez votre premier bit de données (bit le moins significatif). Pour obtenir le deuxième bit, vous devez basculer la broche d'horloge, puis lire à partir de la broche de données. Vous continuez de le faire 16 fois. L'état du contrôleur est un nombre de 2 octets, les 12 octets les moins significatifs contenant les boutons en cours d'utilisation et les 4 octets les plus significatifs étant inutiles.

Les 7 premières lignes sont donc assez simples, car elles attribuent simplement un nom aux 3 broches du contrôleur et à la broche de l'indicateur de jeu.

Les lignes 8 à 20 déclarent les données hexadécimales utilisées pour détecter le bouton enfoncé sur le contrôleur. Chaque valeur hexadécimale active un bit séparé dans le flux de données. Vous pouvez donc utiliser des décalages de bits pour déterminer si un bouton est enfoncé ou utiliser un bit et.

La variable 'tableau' est juste un tableau d'entiers de 30 pouces de long. Ceci stocke la séquence des presses pour le jeu.

'pos' est une variable de position. Plus sur cela plus tard.

'timeForPress' est la durée pendant laquelle vous devez appuyer sur les boutons.

La prochaine étape est la méthode setup (). Nous commençons par créer le générateur de nombres aléatoires, puis définissons le mode des broches pour chacune des broches 2 à 9. Ensuite, nous ouvrons la communication série, à des fins de débogage, et définissons la séquence de boutons sur 4. Je l’ai fait parce que le système de numérotation des voyants n’atteint que 3, le 4 n’est donc qu’un espace réservé. Maintenant, définissez timeForPress sur 1000 et appelez la méthode genSequence (), qui remplit notre tableau avec des entiers aléatoires compris entre 0 et 3 (inclus). Ensuite, il positionne notre position sur 0, pour indiquer qu'il n'a pas encore démarré le jeu, puis affiche l'indicateur de jeu pour indiquer que le jeu est sur le point de commencer.

Étape 7: Le code, partie 2

Dans cette étape, je couvrirai rapidement les méthodes utilisées pour obtenir des données du contrôleur. Je vous ai expliqué la théorie à l'étape précédente, mais je vais maintenant exposer les appels de fonction réels.

Je pense que j'ai un peu de ce code de cette instructable. Pas tout à fait sûr cependant.

Trois méthodes sont utilisées pour vérifier l’entrée du contrôleur:

boutons()

strobe ()

shiftin ()

La méthode buttons () définit d’abord une variable de retour et un compteur de places. Il strobe ensuite (à l'aide de strobe ()) et entre dans une boucle for (). Dans la boucle for, il lit et stocke les données bit par bit à l'aide de la méthode shiftin () et des opérateurs au niveau du bit.

La méthode strobe () est assez simple. En gros, il suffit de placer la broche stroboscopique sur HIGH, puis de nouveau sur LOW. Des choses assez simples. Ceci indique au contrôleur de commencer à transmettre des données.

La méthode shiftin () lit les données. Il prend les données de la broche de données, puis bascule la broche d'horloge, ce qui indique au contrôleur d'envoyer le bit suivant.

En utilisant simplement ces trois méthodes, vous pouvez lire l’état du contrôleur. Vous ne devriez jamais avoir à appeler directement strobe () ou shiftin (). Sur une note finale, lorsque vous vérifiez si un bouton est enfoncé, vous devez utiliser 2 opérateurs au niveau des bits. Le ~ (tilde) est un bitwise non, et inverse les données, puis le & vérifie l'état vs quel que soit le bouton sur lequel vous voulez appuyer.

Étape 8: Le code, partie 3

Ceci est la dernière étape du code. Je vais simplement passer rapidement en revue le fonctionnement de la boucle de jeu, car cela devrait être assez facile à suivre pour un programmeur débutant.

La méthode loop () commence par imprimer en série l’état du contrôleur. Il lit ensuite la séquence stockée dans le tableau, puis vérifie l'entrée de l'utilisateur à l'aide de la méthode readAndCheckInput, qui consiste essentiellement en une boucle for contenant des instructions if. Si vous vous trompez, il sort de la boucle et fait clignoter puis se termine.

Je suppose que cela signifie que ce tutoriel est terminé! Si vous faites des jeux sympas, commentez et mettez une photo, j'aimerais les voir!

Bonne chance!