Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:ffprg2-2020:7segment-display [2020/08/24 08:24] – Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg2-2020:7segment-display [2020/08/24 08:46] (current) – [Codierung der Ziffern als Bytes] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== 7-Segment-Anzeige from Scratch ====== | ||
| + | Ein mittlerer Pin wird über ein 220$\Omega$-Widerstand mit GND verbunden. | ||
| + | Acht Pins vom ESP32 werden mit den acht " | ||
| + | |||
| + | Nummerierung der Segmente: | ||
| + | |||
| + | | oben | 0 | | ||
| + | | oben rechts | 1 | | ||
| + | | unten rechts | 2 | | ||
| + | | unten | 3 | | ||
| + | | links unten | 4 | | ||
| + | | links oben | 5 | | ||
| + | | mitte | 6 | | ||
| + | | Punkt | 7 | | ||
| + | |||
| + | Test: | ||
| + | <code c++> | ||
| + | // Ordnen Sie die Pin-Nummern so, dass die LED in obiger Reihenfolge blinken. | ||
| + | // Diese Ordnung hängt davon ab, wie die die LEDs angeschlossen haben. | ||
| + | byte ledPins[] = {33, 32, 12, 14, 13, 25, 26, 27}; | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | for (int i=0; i<8; i++) { | ||
| + | pinMode(ledPins[i], | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | for (int i=0; i<8; i++) { | ||
| + | digitalWrite(ledPins[i], | ||
| + | Serial.printf(" | ||
| + | delay(1000); | ||
| + | digitalWrite(ledPins[i], | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ====== Codierung der Ziffern als Bytes ====== | ||
| + | Ein Byte hat 8 Bits, kann also darstellen, welche Segmente an und aus sein sollen. Daten können auch direkt binär angegeben werden. | ||
| + | |||
| + | Vervollständigen Sie die Variable digits mit der Darstellung der restlichen Ziffern. | ||
| + | |||
| + | <code c++> | ||
| + | byte ledPins[] = {33, 32, 12, 14, 13, 25, 26, 27}; | ||
| + | |||
| + | byte digits[] = {0b00111111, | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | for (int i=0; i<8; i++) { | ||
| + | pinMode(ledPins[i], | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void showByte(byte b) { | ||
| + | // 1 << i ist die Binärzahl 1, um i Stellen nach links verschoben, | ||
| + | // d.h. jene Zahl, die genau an der Stelle i eine 1 hat. | ||
| + | // | ||
| + | // Diese Zahl wird bitweise UND gerechnet, d.h. es bleibt entweder Null | ||
| + | // oder diese Zahl übrig. | ||
| + | // Das Resultat kann direkt verwendet werden, wobei 0 als LOW und alles andere | ||
| + | // als HIGH interpretiert wird. | ||
| + | for (int i=0; i<8; i++) { | ||
| + | digitalWrite(ledPins[i], | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | for (int j=0; j<4; j++) { | ||
| + | for (int i=0; i<2; i++) { | ||
| + | showByte(digits[i]); | ||
| + | delay(200); | ||
| + | } | ||
| + | } | ||
| + | for (int i=1; i<=256; i++) { | ||
| + | showByte(i); | ||
| + | delay(40); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Weitere Ideen ===== | ||
| + | * Kleine Animationen auf der Anzeige | ||
| + | * Verwendung eines Shift-Registers oder eines 7-Segment Decoders. | ||
| + | * Weitere Displays. | ||