Skip to content
Snippets Groups Projects
index.md 6.7 KiB
Newer Older
Martin Winter's avatar
Martin Winter committed
# Dokumentation zur LED-Matrix

An dieser Stelle wird beschrieben, wie du mit dem LED-Matrix-Display arbeiten kannst.

## Die LED-Matrix
Die LED-Matrix besteht aus 8 Reihen und 8 Zeilen. Du kannst die LEDs einzeln ansteuern oder ganze Bilder auf das Display "malen". Die LEDs sind in einem Koordinatensystem angeordnet.
Die LED ganz unten links hat die Koordinaten (0,0).

Martin Winter's avatar
Martin Winter committed

## Basisfunktionen des Displays

Um das Display zu programmieren weren diverse Funktionen in sogenannten Bibliotheken bereitgestellt.  Ein einfaches Basisprogramm, welches den Lauftext "Hallo Welt!" anzeigt ist im folgenden zu sehen.

```python
from time import sleep, time, ticks_ms
from machine import Timer

from myfrabuled import WEMOSMatrixLEDShield
from font8x8 import letter
from pictures import *
from animations import *

shield = WEMOSMatrixLEDShield()

while True:
    scroll("Hallo Welt!",5,30)

```

In den ersten sieben Zeilen werden alle Bibliotheken eingebunden, die du benötigst. In der neunten Zeile wird die Display-Objekt angelegt.
In der while-Schleife läuft das eigentliche Programm ab. Hier wird eine vordefinierte Animation aufgerufen.

### update
Usage:
```python
shield.update()
```
Liest das Bild im Speicher und zeigt es auf dem Display an.

### clear()
Usage:
```python
shield.clear()
```
Löscht das aktuelle Bild im Speicher.

### brightness
Usage:
```python
shield.brightness()
```

Setzt die Helligkeit des Displays. Darf Werte zwischen 0 und 7 annehmen.

### power_on()
Usage:
```python
shield.power_on()
```

Schaltet das Display an.

### power_off()
Usage:
```python
shield.power_off()
```

Schaltet das Display an.

### get(i: int, j: int)
Usage:
```python
shield.get(3,5)
```

Gibt den aktuell gesetzten Werte im Speicher wieder.

### set(i: int, j: int, state: bool)
Usage:
```python
shield.set(3,5,1)
```

Setzt im Speicher den Bildpunkt (3,5) auf an.

### on(i: int, j: int)
Usage:
```python
shield.on(3,5)
```

Schaltet den angegebenen Bildpunkt im Speicher an.

### off(i: int, j: int)
Usage:
```python
shield.off(3,5)
```

Schaltet den angegebenen Bildpunkt im Speicher aus.

### toggle(i: int, j: int)
Usage:
```python
shield.toggle(3,5)
```

Invertiert den angegebenen Bildpunkt im Speicher. Aus 1 wird 0, aus 1 wird 0.

## blit
```ython
blit(source: list[list[int | bool]], source_offset: tuple[int, int] = (0, 0), dest_offset: tuple[int, int] = (0, 0))
```
* source - Die Bitmatrix die in den Speicher geschrieben werden soll
* source_offset - Wird benutzt, wenn nur ein Ausschnitt aus der Bitmatrix verwendet werden soll. Gibt des Startpunkt an [Optional]
* dest_offset - Wird benutzt, wenn nur ein Teil des Speichers geschrieben werden soll. Gibt es Startpunkt an [Optional]

Codebeispiel:
Martin Winter's avatar
Martin Winter committed
```python
picture = [[0,0,0,0,0,0,0,0],
           [0,1,1,0,0,1,1,0],
           [0,1,1,0,0,1,1,0],
           [0,0,0,0,0,0,0,0],
           [0,0,0,0,0,0,0,0],
           [0,1,0,0,0,0,1,0],
           [0,0,1,1,1,1,0,0],
           [0,0,0,0,0,0,0,0]]

shield.blit(picture)
```

Bilder bestehen aus einer sogenannten Bitmap. Das sind zwei verschachtelte Listen, die nur Nullen und Einsen enthalten. Eine 1 steht dabei für eine eingeschaltete LED, eine 0 für eine ausgeschaltete LED.
Mit der Funktion wird die Bitmatrix in den Speicher geschrieben. 

## Vordefinierte Bilder und Annimationen

### Vordefinierte Bilder
Die Funktion **get_picture** liefert die Bitmatrix von bereits definierten Bildern. 
Folgende Bilder sind bereits definiert:
* clear
* heart
* smiley
* cross
* diamond
* r_arrow
* l_arrow
* u_arrow
* d_arrow

Um ein Bild anzuzeigen muss der folgende Code verwendet werden.

```python
picture = get_picture("heart")
shield.blit(picture, (0, 0))
shield.update()
sleep(0.8)
```
#### Buchstaben
Eine spezielle Form der Bilder sind Buchstaben. Dies könnt ihr ebenso anzeigen lassen. Die Funktion ***letter*** gibt euch die Bitmatrix eines Buchstabens wieder.
Das folgende Code-Beispiel zeigt dir, wie du z.B. den Buchstaben R anzeigen lassen kannst.
```python
shield.blit(letter("R"), (0, 0))
shield.update()
sleep(0.8)
```

### Vordefinierte Annimationen
Neben den vordefinierten Bilder, gibt es auch schon ein paar vordefinierte Annimationen, die du verwenden kannst.

#### scroll(message, duration=5, speed = 15)

Mit der Funktion kannst du eine Textnachricht anzeigen lassen. 
* message - Dies ist der Text, der angezeigt wird
* duration - Dies ist die Dauer, wie lange der Text angezeigt werden soll [Optional]
* speed - Dies ist die Scroll-Geschwindigkeit des Texts [Optional]
Codebeispiel:
```python
scroll("Hallo Welt!",10)
```

#### random(duration=5, speed = 100):
Mit der Funktion werden die Bildpunkt zufällig ein- oder ausgeschaltet 
* duration - Dies ist die Dauer, wie lange der Text angezeigt werden soll [Optional]
* speed - Dies ist die Geschwindkeit [Optional]
Codebeispiel:
```python
random(10)
```

#### rustle(duration=5, speed = 10)
Mit der Funktion erzeugt ein Bildrauschen 
* duration - Dies ist die Dauer, wie lange der Text angezeigt werden soll [Optional]
* speed - Dies ist die Geschwindigkeit [Optional]
Codebeispiel:
```python
rustle(10)
```
#### arrows(duration=5, direction = "right", speed = 10):
Mit der Funktion können Pfeile angeigt werden die sich bewegen. 
* duration - Dies ist die Dauer, wie lange der Text angezeigt werden soll [Optional]
* direction - 
* speed - Dies ist die Geschwindigkeit [Optional]
Codebeispiel:
```python
arrows(1, "left", 30)
```
### Eigene Annimationen
Ihr könnt natürlich auch eigene Annimationen entwerfen. Annimationen sind eine abfolge von Bildern. Um die Sach für euch zu vereinfachen gibt es ein paar Funktionen, die euch helfen können

Die Funktionen ***shift_up***, ***shift_down***, ***shift_left*** und ***shift_right *** verschieben das Bild um eine Reihe bzw. Spalte in die gewünschte Richtung.
Codebeispiel:
```python
row = [0,1,1,0,0,1,0,1]
shift_up(bitmap, row)
```
Der erste Parameter gibt das Bild an, das verschoben werden soll. Dadurch wird auf der anderen Seite eine Reihe bzw. eine Zeile frei. Mit dem zweiten Parameter könnnt ihr angeben, was dort angezeigt werden soll.
Gebt ihr den zweiten Parameter nicht an, dann wird eine leere Zeile bzw. Spalte eingefügt.


Mit den Funktionen ***get_row*** und  ***get_column*** könnt ihr den Inhalt einer Spalte bzw. Zeile zurückgeben lassen. Der erste Parameter ist die Bitmap, der zweite Parameter die Zeilen bzw. Spalten-Nummer.
**Denkt daran, dass beim Zählen mit der 0 begonnen wird.**

Beispiel für eine eigene Annimation:
```python
heart = get_picture("heart")
    for i in range(8):
        shield.blit(heart, (0, 0))
        shield.update()
        shift_down(heart)
        sleep(0.5)
```
Die Basis für die Annimation ist das Herz. Mit **shift_down** wird das Herz nach unten verschoben. Ihr seht als ein Herz, das nach unten verschwindet.