Drzewko - Xmastree - Rybelcik - 07-01-2018
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);
}
RE: Drzewko - Xmastree - Rybelcik - 16-01-2018
hmm, nikt nie jest w stanie coś podpowiedzieć ???
znawcy arduino na feriach ?
RE: Drzewko - Xmastree - bob35 - 17-01-2018
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 .
RE: Drzewko - Xmastree - Rybelcik - 17-01-2018
(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
RE: Drzewko - Xmastree - bob35 - 17-01-2018
int PlanePin[] = {18, 17, 16, 15, 14}; te piny mają mieć stan wysoki na początku programu
|