Informatikunterricht

am Gymnasium Kirchenfeld

Benutzer-Werkzeuge

Webseiten-Werkzeuge


arduino:matrix-multiplexing

Dies ist eine alte Version des Dokuments!


LED-Matrix: Multiplexing-Demo

Zurück

Dieses Programm steuert eine 8×8 LED-Matrix über zwei in Serie geschaltete Schieberegister (74HC595). Das erste Schieberegister steuert die Spalten der Matrix, das zweite die Zeilen. In jedem Aufruf von loop() wird jeweils nur eine Zeile angezeigt. Die Verzögerung wird mit der Zeit reduziert. Dadurch sieht der Betrachter der Übergang der Darstellung einzelner Zeilen zum gesamten Bild.

#define DATA_PIN 0
#define SHIFT_CLOCK_PIN 1
#define STORAGE_CLOCK_PIN 2
 
const byte PATTERN[] = {
    B01111110,
    B10000001,
    B10101001,
    B10000001,
    B10000101,
    B10111001,
    B10000001,
    B01111110
};
 
const byte DELAY[] = {200, 100, 20, 10, 2, 1};
const byte DELAY_SIZE = sizeof(DELAY) / sizeof(byte);
 
byte row = 0;
byte delayIndex = 0;
unsigned long changeTime;
 
void showRow(byte row, byte col) {
    digitalWrite(STORAGE_CLOCK_PIN, LOW);
    shiftOut(DATA_PIN, SHIFT_CLOCK_PIN, LSBFIRST, 1 << (7 - row));
    shiftOut(DATA_PIN, SHIFT_CLOCK_PIN, LSBFIRST, col ^ 255);
    digitalWrite(STORAGE_CLOCK_PIN, HIGH);
}
 
void setup() {
    pinMode(DATA_PIN, OUTPUT);
    pinMode(SHIFT_CLOCK_PIN, OUTPUT);
    pinMode(STORAGE_CLOCK_PIN, OUTPUT);
    changeTime = millis() + 5000;
}
 
void loop() {
    showRow(row, PATTERN[row]);
    row = (row + 1) % 8;
    delay(DELAY[delayIndex]);
 
    if (millis() >= changeTime && delayIndex < DELAY_SIZE-1) {
        delayIndex = delayIndex + 1;
        changeTime = millis() + 5000;
    }
}
arduino/matrix-multiplexing.1416422098.txt.gz · Zuletzt geändert: 2020/10/13 14:25 (Externe Bearbeitung)