Menu
CoddyTech

Ziffernmuster in Bytes

Teil des Abschnitts Displays und Sensoren der Arduino-Journey von Coddy. Lektion 2 von 24.

Sieben digitalWrite()-Zeilen für jede Ziffer sind eine Menge Code. Speichere jede Ziffer als Muster: ein Bit pro Segment, 1 für an und 0 für aus.

Ein byte ist eine ganze Zahl von 0 bis 255, die aus acht Bits besteht. Schreibe sie binär mit vorangestelltem 0b. Lies die Bits von rechts: Das letzte Bit ist Segment a, das davor b und so weiter bis g.

//           gfedcba
byte one = 0b0000110;  // b und c: eine 1

Zehn Muster passen in ein Array, daher ist digits[3] das Muster einer 3. bitRead() aus dem Binärzähler liest eines der Bits daraus, von rechts gezählt und beginnend bei 0:

bitRead(0b0000110, 0)  // 0: Segment a ist aus
bitRead(0b0000110, 1)  // 1: Segment b leuchtet

Eine Funktion kann die sieben Bits mit einer for-Schleife durchgehen und jeden Segment-Pin setzen, sodass das Zeichnen einer beliebigen Ziffer ein einziger Aufruf ist: showDigit(7);

challenge icon

Aufgabe

Mittel

Im Starter fehlen alle Muster außer 4 und 7, und loop() zeigt 1, 4 und 7 an.

  • ergänze 4 (Segmente b, c, f, g) und 7 (a, b, c)
  • schreibe showDigit(n): Setze für jedes i von 0 bis 6 segmentPins[i] auf LOW, wenn Bit i von digits[n] 1 ist, und auf HIGH, wenn es 0 ist

Drücke Run und dann Check.

Probier es selbst

const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8};  // a, b, c, d, e, f, g

// Ein Muster pro Ziffer, von rechts gelesen: Das letzte Bit entspricht Segment a.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b0000000,  // 4: ergänzen
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000000,  // 7: ergänzen
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  // Schalte die Segmente von digits[n] ein und die anderen aus
}

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }
}

void loop() {
  showDigit(1);
  delay(1000);
  showDigit(4);
  delay(1000);
  showDigit(7);
  delay(1000);
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Displays und Sensoren

Übe selbstständig: Arduino-Playground