Menu
CoddyTech

Motifs de chiffres en octets

Fait partie de la section Écrans et capteurs du Journey Arduino de Coddy. Leçon 2 sur 24.

Sept lignes digitalWrite() pour chaque chiffre, cela fait beaucoup de code. Stocke chaque chiffre sous forme de motif : un bit par segment, 1 pour allumé et 0 pour éteint.

Un byte est un nombre entier compris entre 0 et 255, composé de huit bits. Écris-le en binaire en plaçant 0b devant. Lis les bits de droite à gauche : le dernier bit correspond au segment a, celui qui le précède à b, et ainsi de suite jusqu’à g.

//           gfedcba
byte one = 0b0000110;  // b et c : à 1

Dix motifs tiennent dans un tableau ; ainsi, digits[3] est le motif du chiffre 3. bitRead(), issu du compteur binaire, lit l’un de ses bits, en comptant depuis la droite à partir de 0 :

bitRead(0b0000110, 0)  // 0 : le segment a est éteint
bitRead(0b0000110, 1)  // 1 : le segment b est allumé

Une fonction peut parcourir les sept bits avec une boucle for et définir chaque broche de segment : afficher n’importe quel chiffre se fait alors en un seul appel : showDigit(7);

challenge icon

Défi

Moyen

Le code de départ contient tous les motifs sauf 4 et 7, et loop() affiche 1, 4 et 7.

  • complète 4 (segments b, c, f, g) et 7 (a, b, c)
  • écris showDigit(n) : pour chaque i de 0 à 6, définis segmentPins[i] sur LOW lorsque le bit i de digits[n] vaut 1, et sur HIGH lorsqu’il vaut 0

Appuie sur Run, puis sur Check.

Essayez vous-même

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

// Un motif par chiffre, à lire de droite à gauche : le dernier bit correspond au segment a.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b0000000,  // 4 : à compléter
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000000,  // 7 : à compléter
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  // allumer les segments de digits[n] et éteindre les autres
}

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Écrans et capteurs

Entraînez-vous par vous-même : Playground Arduino