Programmation de votre 4x4x4 cube arduino a conduit à faire des choses plus impressionnant

Video: How to make an LED 4x4x4 cube with Arduino Uno

La semaine dernière, je construit un cube LED - 64 LED que vous pouvez programmer pour faire des spectacles de lumière futuriste fantastique - et j`espère que vous aussi, parce qu`il est un grand projet pour vous motiver et développer votre Arduino Skillset. Je vous ai laissé avec quelques applications de base pour vous faire réfléchir, mais aujourd`hui je vais vous présenter quelques morceaux de logiciels que j`ai fait pour le cube, ainsi que des explications de code. Le but est à la fois pour vous donner quelques lightshows plus jolies à courir, mais aussi pour en apprendre davantage sur certaines des limites de la programmation du cube, et apprendre quelques nouveaux concepts de programmation dans le processus.Comment faire une LED Arduino Pulsating Cube qui ressemble Il est venu de l`avenirComment faire une LED Arduino Pulsating Cube qui ressemble Il est venu de l`avenirSi vous avez tâté avec quelques projets Arduino débutants, mais cherchez quelque chose d`un peu permanent et sur un tout autre niveau de génial, l`humble cube LED 4 x 4 x 4 est ...Lire la suite

Ceci est une coding assez avancée vous avez vraiment besoin d`avoir lu tout mon précédent tutoriels Arduino et notre Guide Arduino débutant avant de personnaliser le code fourni.

App 1: Mini Serpent

Plutôt que d`exécuter un ensemble séquence de motifs comme un serpent, je voulais programmer un serpent - un qui un artifical le rendre ses propres choix au hasard, et être tout à fait imprévisible. Il est limité à 2 segments seulement, que je vous expliquerai plus tard, et vous pouvez voir la démo ci-dessous. Télécharger le code complet ici.

Video: How To RGB 8x8x8 LED CUBE - The BUILD!

Lorsque vous traitez avec un espace 3D, vous avez besoin 3 coordonnées pour un seul point: X, Y, et Z.

cube mené arduino

Video: LED Cube 4x4x4 Arduino + 3 Shift Registers (simple pattern test)

Cependant, dans notre cube, les plans X et Z sont représentés par des broches de LED, tandis que le Y est directement mis en correspondance avec les plans de cathode. Pour faciliter le travail avec ces coordonnées et déterminer le mouvement autour du cube, je donc créé un nouveau type de données (En utilisant struct) pour représenter un seul point sur le cube - que j`ai appelé « xyz ». Il se compose de seulement deux entiers: « XZ », et « y ». Avec cette structure, je pourrais alors représenter aussi une direction, indiquée ci-dessous dans notre système de coordonnées spécial (XZ, y):

mouvement Y (Haut, bas): (Xz, y + 1), (xz, y-1)
Z mouvement (En avant, en arrière): (Xz-1, y), (xz + 1, y)
mouvement X (gauche droite): (Xz + 4, y), (xz-4, y)

Par exemple, pour déplacer la position LED (0,0) un à gauche, nous appliquons (Xz + 4, y) et finissent avec (0,4).

Il y a certaines limites qui seront placées sur le mouvement - à savoir que les coordonnées Y ne peut être possible 0 à 3 (0 étant la couche inférieure, 3 étant le haut), et les coordonnées XZ ne pouvait être 0 à 15. Une autre limite est placée sur le mouvement Z pour empêcher « saut » de l`arrière vers l`avant du cube, et vice versa. Dans ce cas, nous utilisons la fonction de module pour tester des multiples de 4 et de nier cette tentative de mouvement. Ceci est la logique est représentée dans la valide() fonction qui renvoie un vrai si la direction proposée est un mouvement acceptable, et false sinon. J`ajouté une autre fonction pour vérifier une direction inverse - qui est, si le serpent se dirige dans une direction, nous ne voulons pas revenir en arrière sur elle-même, même si elle est par ailleurs un emplacement valide pour se déplacer - et un bouge toi() fonction, qui prend une coordonnée, une direction, et renvoie les nouvelles coordonnées.

le XYZ Type de données, valide(), bouge toi() et inverse() fonctions peuvent être trouvés dans la xyz.h fichier dans les téléchargements. Si vous vous demandez pourquoi il a été mis dans un fichier séparé au lieu du fichier principal du programme, il est en raison de certaines règles du compilateur Arduino complexes qui empêchent les fonctions de retour sur mesure des types de données- ils doivent être placés dans leur propre fichier, puis importé au début du fichier principal.

Retour dans le fichier principal d`exécution, un tableau de directions stocke tous les mouvements possibles du serpent peut Make- nous pouvons simplement choisir un membre du groupe aléatoire pour obtenir une nouvelle direction. Les variables sont également créés pour stocker l`emplacement actuel (maintenant), le précédent direction et précédent emplacement. Le reste du code devrait être assez évident pour vous- juste foboucles de r, et pour allumer et éteindre les LED. Dans la boucle principale, nous vérifions si la direction proposée est valide et si elle est alors nous allons de cette façon. Sinon, nous prenons une nouvelle direction.

La seule chose à signaler dans la boucle principale est des contrôles pour corriger un bug, j`ai trouvé impliquant le multiplexage: si le nouvel emplacement était sur le même plan cathodique ou même broche d`anode, éteindre la LED précédente entraînerait à la fois sortir. Il est aussi à ce moment que je réalisai aller au-delà d`un serpent 2 segment allait être impossible avec mon implémentation actuelle: essayer d`allumer 3 LED dans un arrangement d`angle. Vous ne pouvez pas, car avec 2 couches et 2 broches LED ACTIVÉE, 4 LED allumerait, pas 3. Ceci est un problème inhérent à la conception de notre cube multiplexe limité, mais ne vous inquiétez pas: nous avons simplement besoin d`utiliser la puissance de la persistance de la vision à réécrire le procédé d`étirage.

La persistance de la vision signifie que lorsque la lumière atteint nos yeux de façon séquentielle - plus vite que nous pouvons le traiter - il semble être une seule image. Dans notre cas, plutôt que de tirer les quatre couches en même temps, nous devons tirer le premier, le désactiver, tirer le second et le désactiver: plus vite que nous pouvons dire tout changement se produit même. Tel est le principe par lequel les auteurs de messages fonctionnent, comme celui-ci:

Nouvelle méthode draw utilisant Persistence of Vision

Tout d`abord, puis, une nouvelle routine de tirage au sort. J`ai créé un 4 x 16 matrice à deux dimensions de bits (vrai ou faux) pour être une représentation littérale de l`état de cube LED. La routine de tirage mettra en œuvre persistance de la vision simplement itérer sur cela et débusquer chaque couche au cube pendant un bref moment. Il va continuer à se dessiner dans l`état actuel jusqu`à ce que le temps de rafraîchissement est écoulé, à quel point nous allons passer le contrôle à la boucle principale (). Je l`ai enregistré cette section du code dans ce fichier LED_cube_POV, donc si vous voulez juste sauter dans la programmation de vos propres jeux et tels sentent alors libre d`utiliser cela comme une base.

App 2: Game of Life

Pour l`instant, nous allons développer ce dans une version de base jeu de la vie de Conway. Pour ceux d`entre vous qui ne connaissent pas (Essayez googler pour trouver une animation d`oeuf de pâques impressionnant), la Le jeu de la vie est un exemple des automates cellulaires qui crée un modèle fascinant de comportement émergent donné quelques règles simples.

http://youtube.com/embed/XcuBvj0pw-E

Ceci est, par exemple, comment les fourmis semblent se déplacer avec intelligence et un esprit de la ruche, en dépit du fait biologique qu`ils se contentent de suivre les règles réelles hormonales très basiques. Voici le code complet à télécharger: appuyez sur la réinitialiser bouton pour redémarrer. Si vous vous trouvez obtenir le même schéma encore et, essayez de maintenir le bouton reste plus longtemps.

http://youtube.com/embed/iBnL8pulJ

Voici les règles du jeu de la vie:

  • Toute cellule en temps réel avec moins de deux voisins vivants meurt, comme si elle est causée par la sous-population.
  • Toute cellule vivante avec deux ou trois voisins vivent une vie à la prochaine génération.
  • Toute cellule vivante avec plus de trois voisins vivants meurt, comme par le surpeuplement.
  • Toute cellule morte avec exactement trois voisins vivants devient une cellule vivante, comme par reproduction.

Exécutez le code. Vous remarquerez dans les 5 à 10 « générations », les automates ont probablement venir à un repos, une certaine stabilisation sur Position- parfois ce modèle stable va changer d`emplacement et déplacer autour de la carte. Dans de rares cas, ils peuvent même avoir complètement disparu. Ceci est une limitation de seulement avoir LED 4x4x4 pour travailler avec, mais il est un bon exercice d`apprentissage de toute façon.

Pour expliquer le code:

  • Vous pouvez ne pas être familiers avec memcpy () fonction. Je l`ai utilisé cette option pour enregistrer l`état de jeu, sous forme de tableaux ne peuvent pas simplement être assignés à l`autre comme des variables normales - vous devez copier réellement dans l`espace mémoire (dans ce cas, 64 bits).
  • howManyNeighbours () fonction doit être explicite, mais dans le cas où il n`est pas - cette méthode prend une seule coordonnée et traverse chaque voisin possible (le même tableau de directions que nous avons utilisé précédemment dans l`application de serpent), pour vérifier si elles sont valables. Il vérifie ensuite si ces voyants voisins étaient « sur » dans l`état de jeu, et compte combien il y a.
  • La fonction principale de ce jeu d`application La vie est progressGame (), qui applique les règles d`automates à l`état actuel du jeu.

améliorations: J`ai passé beaucoup trop longtemps sur ce jusqu`à présent, mais vous pourriez vouloir essayer d`ajouter un chèque qui remet à zéro automatiquement la carte après 5 ou si les générations du même modèle. alors s`il vous plaît laissez-moi savoir! Je vous suggère également d`essayer d`ajouter la méthodologie de POV au jeu de serpent pour faire je l`espère un serpent plus possible.

Qu`il est de moi aujourd`hui. Je peux revisiter quelques autres applications de cube LED Arduino à un point plus tard, mais nous espérons que vous devriez être en mesure de modifier mon code et créer vos propres règles du jeu: laissez-nous savoir ce que vous venez avec dans les commentaires, donc nous pouvons tous télécharger vos créations! Comme toujours, je serai là pour répondre à vos questions et défendre mes capacités de codage horribles.

Articles connexes