Led cube 5x5x5

Bonjour

avant tout , je suis un noob de chez noob...(mais les baba de l'arduino je l'ai en tete comme contrôler une ou plusieurs leds et meme un servo-moteur)
je viens de realiser un led cube 555 branche sur une arduino mega , 25 anodes sur les pin 1 a 25 via des résistances , et les étages ou cathodes sur les pin 26 a 30

puis j'ai teste avec quelques codes trouve ca et la sur le net ( des codes qu'un pauvre novice trouve un peu complique )ca a l'air de fonctionner plus au moins bien mais ce n'est pas ca l'important , ce que j'ai pu
faire jusqu'a maintenant c'est d'ecrire quelques lignes pour faire allumer des colonnes et des etages sans plus :zipper_mouth_face:

bref comment pourrais-je faire pour controler une seu led a la fois , ecrire des caracteres ou des chiffres par exemple dois-je ajouter qque chose d'autre a l'actuel circuit ?

svp aidez moi une explication ou meme par un code explicatif qui pourra m'orienter

autre chose si demain je voudrais animer le cube par une music venant d'une autre source ( telephon , pc...etc ) dois-je y ajouter un circuit ou simplement mettre une fiche jack et balancer la sauce ( le programme de l'arduino jouera le pilote bien sur )

merci d'avance

si vous activez un étage particulier (disons pin 26) et une des 25 LEDs de cet étage (disons pin 20) ça devrait allumer cette seule LED à cet étage donné. (faites ça à la fin du setup, avec une loop() vide)

Ce type de montage fonctionne sur la persistance rétinienne, Ppour un seul étage (ou des colonnes), pas besoin de faire plus mais si vous voulez des LEDs différentes allumées à des étages différents il faut activer l’étage, puis les LEDs à allumer, puis les éteindre et passer à l’étage suivant et recommencer. en faisant cela assez vite vous aurez l’impression de voir toutes les LEDs choisies allumées dans le cube.

ensuite donc pour dessiner des chiffres ou des lettres, c’est juste bien choisir les LEDs à activer

Bonjour J-M-L

Merci beaucoup pour ta promptitude je vais voir ce que ça va donner merci beaucoup et bonne journee

Bonjour

bonne je crois que j'ai saisi le truc , exemple ce code me permet d'allumer une led sur 2 du premier etage

  digitalWrite ( pin1,0);
  digitalWrite ( pin2,1);
  digitalWrite ( pin4,1);
  digitalWrite ( pin6,1);
  digitalWrite ( pin7,0);
  digitalWrite ( pin8,1);
  digitalWrite ( pin10,1);
  digitalWrite ( pin12,1);
  digitalWrite ( pin14,1);
  digitalWrite ( pin16,1);
  digitalWrite ( pin18,1);
  digitalWrite ( pin20,1);
  digitalWrite ( pin22,1);
  digitalWrite ( pin24,1);
  
  digitalWrite ( pin26,1);

j'ai compris qu'il fallait non seulement allumer un une led mais aussi eteindre les autres , chose que je ne faisais pas avant d'ou mon désappointement quand je faisais le teste et voyais que toutes les leds s'allumaient au meme temps

merci a tous

presque bravo :slight_smile: - au lieu d'utiliser 1 et 0, utilisez HIGH et LOW ça fait plus joli même si au final c'est pareil

J-M-L:
presque bravo :slight_smile: -

bonjour
presque , pouquoi presque? disons plutôt une prouesse pour quelqu'un qui une heure avant ta réponse ( Feb 15, 2020, 09:40 am ) etait dans le noir sidéral. maintenant j'ai réussi a faire quelque chose de mon cru comme des spirales , des lettres , une pyramide ,un effet d’étincelles ...etc. certes ce n'est pas du grand STYLE mais c'est un debut

bref disons donc que je commence a maîtriser un chouia, helas je coince sur le cas suivant (d'ou ma presence ici n'est ce pas):

j'aimerais faire une animation d' un cube 2x2x2 a l’intérieur du cube 555 avec la fonction random.
j'ai réussi l'animation 2x2x2 "linéaire" (si on peut dire ca ainsi) , mais pour le faire apparaître a divers position du cube 5x5x5 randomly la je seche

un petit coup de pouce ne serait pas de trop

merci d'avance

Postez le code du cube 2-2 Linéaire

(Et pour le presque il y avait un smiley - mais on peut toujours s’améliorer donc faut pas baisser la garde et toujours pousser)

bonjour
tout d'abord merci beaucoup pour l'aide vraiment

pour le quote je ne faisait que blaguer :wink:

dans le scripte qui suit le petit cube démarre du coin du sommet haut du cube et se déplace en diag jusqu'en bas du cube 555 en un seul mvt

void loop() {
             littleCube();
              }

void littleCube()
{
  int t= 100 ;
turnEverythingOff();
    posi0(); 
turnEverythingOff();
    posi1();
turnEverythingOff();
    posi2();
turnEverythingOff();
    posi3();
turnEverythingOff(); 
    posi4();
turnEverythingOff(); 
    posi5();
turnEverythingOff();   
    posi6();
turnEverythingOff();  
    posi7 (); 
turnEverythingOff(); 
    posi8(); 
turnEverythingOff();
    posi9(); 
turnEverythingOff();
    posi10(); 
turnEverythingOff();
 }
void posi0()
 {  //cube 2*2*2 debutant au sommet du cube 5*5*5 coin gauche 
  digitalWrite (layer[0] ,0);
  digitalWrite (layer[1] ,0);
  digitalWrite (layer[2] ,0);
  digitalWrite (layer[4] ,1);
  digitalWrite (layer[3] ,1);
  digitalWrite (column[0],0 );
  digitalWrite (column[1],0 );
  digitalWrite (column[5],0 );
  digitalWrite (column[6],0 );
  delay(t);
  return ;
 }
void posi1()  //mvt en diagonal horizon 
 {
  digitalWrite (layer[0] ,0);
  digitalWrite (layer[1] ,0);
  digitalWrite (layer[2] ,0);
  digitalWrite (layer[4] ,1);
  digitalWrite (layer[3] ,1);
  digitalWrite (column[6],0 );
  digitalWrite (column[7],0 );
  digitalWrite (column[11],0 );
  digitalWrite (column[12],0 );
  delay(t);
 } 
 
void posi2() //mvt en diag horizon 
 {
  digitalWrite (layer[0] ,0);
  digitalWrite (layer[1] ,0);
  digitalWrite (layer[2] ,0);
  digitalWrite (layer[3] ,1);
  digitalWrite (layer[4] ,1);
  digitalWrite (column[12],0 );
  digitalWrite (column[13],0 );
  digitalWrite (column[17],0 );
  digitalWrite (column[18],0 );
  delay(t);
 } 
void posi3() // diag horizon
 {
  digitalWrite (layer[0] ,0);
  digitalWrite (layer[1] ,0);
  digitalWrite (layer[2] ,0);
  digitalWrite (layer[3] ,1);
  digitalWrite (layer[4] ,1);
  digitalWrite (column[18],0 );
  digitalWrite (column[19],0 );
  digitalWrite (column[23],0 );
  digitalWrite (column[24],0 );
  delay(t);
 } 

void posi4()  // descente vers le cote bas au coin 
 {
  digitalWrite (layer[0] ,0);
  digitalWrite (layer[1] ,0);
  digitalWrite (layer[2] ,1);
  digitalWrite (layer[3] ,1);
  digitalWrite (layer[4] ,0);
  digitalWrite (column[18],0 );
  digitalWrite (column[19],0 );
  digitalWrite (column[23],0 );
  digitalWrite (column[24],0 );
  delay(t);
 } 

void posi5()// descente vers le cote bas au coin 
 {
  digitalWrite (layer[0] ,0);
  digitalWrite (layer[1] ,1);
  digitalWrite (layer[2] ,1);
  digitalWrite (layer[3] ,0);
  digitalWrite (layer[4] ,0);
  digitalWrite (column[18],0 );
  digitalWrite (column[19],0 );
  digitalWrite (column[23],0 );
  digitalWrite (column[24],0 );
  delay(t);
 } 

 void posi6()  //cube 2*2*2 arret au coin cote bas du 5*5*5 cote droit 
 {
  digitalWrite (layer[0] ,1);
  digitalWrite (layer[1] ,1);
  digitalWrite (layer[2] ,0);
  digitalWrite (layer[3] ,0);
  digitalWrite (layer[4] ,0);
  digitalWrite (column[18],0 );
  digitalWrite (column[19],0 );
  digitalWrite (column[23],0 );
  digitalWrite (column[24],0 );
  delay(t);
 }

j'aimerais creer une animation ou le cube apparaît aléatoirement a divers niveau du cube 555

j'ai pense a mémoriser les fonctions posi x dans des variables, en faire, un tableau puis faire lire le tableau par random , mais je cale sur comment faire tourner la chose , voila , voilou

encore une fois merci

bonne journee

imaginez que vous avez 3 axes gradués (X, Y, Z) pour les 3 dimensions du cube - Z représentant les étages.

vous pouvez représenter à un instant T ce qu'il y a dans le cube par un tableau à 3 dimensions

byte cube[5][5][5]; // Z, X, Y

le loop() se chargerait de balayer les Z pour donner la persistance rétinienne et allumer / éteindre les LEDs tels que défini dans les 2 autres dimension du tableau

par exemple si cube[ 0 ] est le tableau à 2 dimensions

00000
00000
00000
00011
00011

ça veut dire que j'allume les 4 LEDs en bas à droite

si maintenant cube [ 1 ] est identique, vous avez crée votre mini cube 2x2x2 en bas à droite

--> vous pourriez créer une fonction qui prend une coordonnée (x,y,z) et calcule les 4 pixel à allumer pour faire un cube dont un sommet (à vous de définir lequel) se trouve à cet endroit.

une fois que vous avez cette fonction, pour faire bouger votre cube, il suffit d'appeler la fonction avec des (x,y,z) aléatoires ou suivant un chemin.

(ensuite vous pourrez optimizer en utilisant les PORTS et du binaire pour le tableau)


corrigez votre post ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

merci beaucoup (je risque de te soûler avec mes remerciement , mais helas je n'ai que ca a te dire , et puis vu tes efforts a vouloir m'aider sincèrement merci )

bon je verrais ca demain

merci donc

aidez nous à garder le forum organisé en éditant votre post #7 et en rajoutant les balises de code... merci d'avance.