nerdherd | Bonjour à tous.
En ce moment je travail sur un projet personnel d'un cube LED en 3D 4*4*4, le cube marche parfaitement à l'aide d'une carte Arduino Uno.
Seulement mon problème et que j'utilise un code qui n'est pas le mien et j'aimerai le comprendre, ainsi que l'algorithme contenu dans void loop (boucle faire tant que), afin d'améliorer ou modifier certaines choses.
J'avais déjà commencé moi même un programme, mais celui ci fonctionnant parfaitement, je me dois de le comprendre si une ame généreuse pouvait m'aider ce serait très sympa.
Voici le code, enfait les pins des LED sont associées à un tableau, et on peut créer des séquences très simplement avec des 0 et des 1 tout en haut du code. Voici le code complet tel que je l'ai trouvé :
Code :
- //int LEDPin[] = {16, 3, 1, 15, 4, 6, 14, 5, 7};
- int LEDPin[] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
- //int PlanePin[] = {19, 18, 17};
- int PlanePin[] = {2, 3, 4};
- // initialization
- void setup()
- {
- int pin; // loop counter
- // set up LED pins as output (active HIGH)
- for (pin=0; pin<PLANESIZE; pin++) {
- pinMode( LEDPin[pin], OUTPUT );
- }
- // set up plane pins as outputs (active LOW)
- for (pin=0; pin<CUBESIZE; pin++) {
- pinMode( PlanePin[pin], OUTPUT );
- }
- }
- // display pattern in table until DisplayTime is zero (then repeat)
- void loop()
- {
- // declare variables
- byte PatternBuf[ PLANESIZE ]; // saves current pattern from PatternTable
- int PatternIdx;
- byte DisplayTime; // time*100ms to display pattern
- unsigned long EndTime;
- int plane; // loop counter for cube refresh
- int patbufidx; // indexes which byte from pattern buffer
- int ledrow; // counts LEDs in refresh loop
- int ledcol; // counts LEDs in refresh loop
- int ledpin; // counts LEDs in refresh loop
- // Initialize PatternIdx to beginning of pattern table
- PatternIdx = 0;
- // loop over entries in pattern table - while DisplayTime>0
- do {
- // read pattern from PROGMEM and save in array
- memcpy_P( PatternBuf, PatternTable+PatternIdx, PLANESIZE );
- PatternIdx += PLANESIZE;
- // read DisplayTime from PROGMEM and increment index
- DisplayTime = pgm_read_byte_near( PatternTable + PatternIdx++ );
- // compute EndTime from current time (ms) and DisplayTime
- EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;
- // loop while DisplayTime>0 and current time < EndTime
- while ( millis() < EndTime ) {
- patbufidx = 0; // reset index counter to beginning of buffer
- // loop over planes
- for (plane=0; plane<CUBESIZE; plane++) {
- // turn previous plane off
- if (plane==0) {
- digitalWrite( PlanePin[CUBESIZE-1], HIGH );
- } else {
- digitalWrite( PlanePin[plane-1], HIGH );
- }
- // load current plane pattern data into ports
- ledpin = 0;
- for (ledrow=0; ledrow<CUBESIZE; ledrow++) {
- for (ledcol=0; ledcol<CUBESIZE; ledcol++) {
- digitalWrite( LEDPin[ledpin++], PatternBuf[patbufidx] & (1 << ledcol) );
- }
- patbufidx++;
- }
- // turn current plane on
- digitalWrite( PlanePin[plane], LOW );
- // delay PLANETIME us
- delayMicroseconds( PLANETIME );
- } // for plane
- } // while <EndTime
- } while (DisplayTime > 0); // read patterns until time=0 which signals end
- }
|
Merci d'avance. Message édité par nerdherd le 11-03-2013 à 18:01:39
|