====== 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 "äusseren" Pins der 7-Segment-Anzeige verbunden. Verwenden Sie Pin 13 bis 32 auf der "VIN"-Seite des ESP32
Nummerierung der Segmente:
| oben | 0 |
| oben rechts | 1 |
| unten rechts | 2 |
| unten | 3 |
| links unten | 4 |
| links oben | 5 |
| mitte | 6 |
| Punkt | 7 |
Test:
// 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], OUTPUT);
}
}
void loop() {
for (int i=0; i<8; i++) {
digitalWrite(ledPins[i], HIGH);
Serial.printf("[%d] GPIO %d\n", i, ledPins[i]);
delay(1000);
digitalWrite(ledPins[i], LOW);
}
}
====== 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.
byte ledPins[] = {33, 32, 12, 14, 13, 25, 26, 27};
byte digits[] = {0b00111111, 0b110};
void setup() {
Serial.begin(115200);
for (int i=0; i<8; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
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], (b & (1 << 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.