Menu
CoddyTech

Padrões de Dígitos em Bytes

Parte da seção Displays e sensores do Journey de Arduino da Coddy. Lição 2 de 24.

Sete linhas de digitalWrite() para cada dígito são muito código. Armazene cada dígito como um padrão: um bit por segmento, 1 para aceso e 0 para apagado.

Um byte é um número inteiro de 0 a 255 composto por oito bits. Escreva-o em binário com 0b na frente. Leia os bits da direita para a esquerda: o último bit é o segmento a, o anterior é b e assim por diante até g.

//           gfedcba
byte one = 0b0000110;  // b e c: em 1

Dez padrões cabem em um array, então digits[3] é o padrão de um 3. bitRead(), do contador binário, lê um bit dele, contando da direita e começando em 0:

bitRead(0b0000110, 0)  // 0: o segmento a está apagado
bitRead(0b0000110, 1)  // 1: o segmento b está aceso

Uma função pode percorrer os sete bits com um loop for e definir cada pino de segmento, para que exibir qualquer dígito seja uma única chamada: showDigit(7);

challenge icon

Desafio

Médio

O código inicial tem todos os padrões, exceto 4 e 7, e loop() exibe 1, 4 e 7.

  • preencha 4 (segmentos b, c, f, g) e 7 (a, b, c)
  • escreva showDigit(n): para cada i de 0 a 6, defina segmentPins[i] como LOW quando o bit i de digits[n] for 1, e como HIGH quando for 0

Pressione Run e, em seguida, Check.

Experimente você mesmo

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

// Um padrão por dígito, lido da direita para a esquerda: o último bit corresponde ao segmento a.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b0000000,  // 4: preencha
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000000,  // 7: preencha
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  // acenda os segmentos de digits[n] e apague os demais
}

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 seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Displays e sensores

Pratique por conta própria: Playground de Arduino