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.