• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Drzewko - Xmastree
#1
Witam w Nowym Roku i wszystkiego dobrego ....
Zrobiłem konstrukcję ze strony "http://v3-1255.vlinux.de/mediawiki/index.php/Xmastree" wgrałem kod  (arduino uno)  i zero animacji , świecą się wszystkie led z podwójnym 300milisek mrugnięciem ....
w linijce kodu  " prog_uchart PROGMEM ..." zamieniłem na "const char PROGMEM...."
nie wiem co dalej.... zaznaczam , że sam kod jest dla mnie dość skomplikowany, proszę o jakieś wskazówki .
Pozdrawiam 

Kod:
#include <avr/pgmspace.h>

#define COLUMN 8        // definicja kolumn
#define PLANE 5         // definicja poziomów
#define PLANETIME 3333  // Anzeigedauer einer Ebene
#define TIMECONST 15    // Mnożnik dla wyświetlania czasu trwania obrazu (33 diody LED)

// LED Muster: Jedna linia składa się z 5 poziomów z 8 diodami LED (z wyjątkiem poziomu 5 z jedną diodą LED) i czasem wyświetlania

prog_uchar PROGMEM PatternTable[] = {
B11111111, B11111111, B11111111, B11111111, B1, 5,  // Wszystkie diody LED są włączone
B00000000, B00000000, B00000000, B00000000, B0, 1,  // Wszystkie diody LED są wyłączone
B11111111, B11111111, B11111111, B11111111, B1, 5,
B00000000, B00000000, B00000000, B00000000, B0, 10,
// Przy czasie wyświetlania 0 pętla kończy się
B00000000, B00000000, B00000000, B00000000, B0, 0
};

// Definiowanie pinów dla poziomów i kolumn (w zależności od sposobu lutowania)
int LedPin[] = {7, 8, 6, 9, 10, 11, 12, 5};
int PlanePin[] = {18, 17, 16, 15, 14};

void setup()
{
    int pin;
    // Pins als OUTPUT initialiseren
    for (pin=0; pin<COLUMN; pin++) {
        pinMode( LedPin[pin], OUTPUT );
    }

    for (pin=0; pin<PLANE; pin++) {
        pinMode( PlanePin[pin], OUTPUT );
    }
}

void loop()
{
    byte PatternBuf[PLANE]; // zapisuje linię wzorów LED
    int PatternIdx;
    byte DisplayTime;
    unsigned long EndTime;
    int plane;
    int patbufidx;
    int ledpin;

    // Index in LED Muster setzen
    PatternIdx = 0;
    // Wiederholen solange Anzeigedauer > 0
    do {
        // Zeile aus LED Muster lesen
        memcpy_P( PatternBuf, PatternTable+PatternIdx, PLANE );
        PatternIdx += PLANE;
        // Anzeigedauer lesen
        DisplayTime = pgm_read_byte_near( PatternTable + PatternIdx++ );
        // Anzeigedauer für Bild berechnen
        EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;

        // Zbuduj diody LED poziomów jeszcze raz i dłużej, o ile czas wyświetlania obrazu nie został jeszcze osiągnięty
        while ( millis() < EndTime ) {
            patbufidx = 0; // Am Anfang der Zeile beginnen
            // Schleife über Ebenen
            for (plane=0; plane<PLANE; plane++) {
                // vorherige Ebene ausschalten
                if (plane==0) {
                  digitalWrite( PlanePin[PLANE-1], HIGH );
                } else {
                  digitalWrite( PlanePin[plane-1], HIGH );
                }

                // Spalten der aktuelle Ebene setzen

                // Ebene 5 gesondert behandeln, da nur eine LED
                 if (plane==PLANE-1) {
                    digitalWrite( LedPin[0], PatternBuf[plane] );
                                } else {
                    // Einzelne Spalten setzen
                                   for (ledpin=0; ledpin<COLUMN; ledpin++) {
                      // Bitoperation zur Ermittlung der einzelnen Bitwerte
                      // Beispiel:
                      // LED Zeile & ledpin (left shift (<<) schiebt ledpin um 1 nach rechts)
                      // B01010000 & B10000000 = 0 (LED leuchtet nicht)
                      // B01010000 & B01000000 = 1 (LED leuchtet)
                      // B01010000 & B00100000 = 0 (LED leuchtet nicht)
                       digitalWrite( LedPin[ledpin], PatternBuf[plane] & (1 << ledpin) );
                    }
                                }

                // aktuelle Ebene aktivieren
                digitalWrite( PlanePin[plane], LOW );
                // Anzeigedauer für Ebene
                delayMicroseconds( PLANETIME );
            }
        }
    } while (DisplayTime > 0);
}
 
Odpowiedź
#2
hmm, nikt nie jest w stanie coś podpowiedzieć ???  Huh
znawcy arduino na feriach ?
 
Odpowiedź
#3
Jak to podłączyć masz tak
int LedPin[] = {7, 8, 6, 9, 10, 11, 12, 5};
int PlanePin[] = {18, 17, 16, 15, 14};
Blinka pewnie znasz to napisz sam kod tak żeby po kolei zaświecić jedną doidę
jeżeli pin 7 dasz na wysoki a 18 na niski to świeci tylko jedna jak 8 na wysoki to świecą dwie w tym samym rzędzie.
w ten sposób sprawdzisz czy masz to dobrze podłączone .
 
Odpowiedź
#4
(17-01-2018, 11:24)bob35 napisał(a): Jak to podłączyć masz tak
int LedPin[] = {7, 8, 6, 9, 10, 11, 12, 5};
int PlanePin[] = {18, 17, 16, 15, 14};
Blinka pewnie znasz to napisz sam kod tak żeby po kolei zaświecić jedną doidę
jeżeli pin 7 dasz na wysoki a 18 na niski to świeci tylko jedna jak 8 na wysoki to świecą dwie w tym samym rzędzie.
w ten sposób sprawdzisz czy masz to dobrze podłączone .

dziękuję ....biorę się do pracy 
pozdrawiam
 
Odpowiedź
#5
int PlanePin[] = {18, 17, 16, 15, 14}; te piny mają mieć stan wysoki na początku programu
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości