Menu
CoddyTech

Patrones de dígitos en bytes

Parte de la sección Pantallas y sensores del Journey de Arduino de Coddy. Lección 2 de 24.

Siete líneas de digitalWrite() por cada dígito son mucho código. Guarda cada dígito como un patrón: un bit por segmento, 1 si está encendido y 0 si está apagado.

Un byte es un número entero de 0 a 255 compuesto por ocho bits. Escríbelo en binario con 0b delante. Lee los bits desde la derecha: el último bit es el segmento a, el anterior es b, y así sucesivamente hasta g.

//           gfedcba
byte one = 0b0000110;  // b y c: a 1

Diez patrones caben en un arreglo, así que digits[3] es el patrón de un 3. bitRead(), del contador binario, lee uno de sus bits, contando desde la derecha y empezando en 0:

bitRead(0b0000110, 0)  // 0: el segmento a está apagado
bitRead(0b0000110, 1)  // 1: el segmento b está encendido

Una función puede recorrer los siete bits con un bucle for y establecer cada pin de segmento, así que dibujar cualquier dígito es una sola llamada: showDigit(7);

challenge icon

Desafío

Intermedio

El código inicial tiene todos los patrones excepto el 4 y el 7, y loop() muestra 1, 4 y 7.

  • completa el 4 (segmentos b, c, f, g) y el 7 (a, b, c)
  • escribe showDigit(n): para cada i de 0 a 6, establece segmentPins[i] en LOW cuando el bit i de digits[n] sea 1, y en HIGH cuando sea 0

Pulsa Run y después Check.

Pruébalo tú mismo

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

// Un patrón por dígito, leído desde la derecha: el último bit corresponde al segmento a.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b0000000,  // 4: completa
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000000,  // 7: completa
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  // enciende los segmentos de digits[n] y apaga los demás
}

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Pantallas y sensores

Practica por tu cuenta: Playground de Arduino