Menu
CoddyTech

바이트로 표현하는 숫자 패턴

Coddy Arduino 여정의 디스플레이와 센서 섹션에 포함된 레슨. 24개 중 2번째.

각 숫자마다 digitalWrite() 줄을 일곱 개씩 작성하면 코드가 너무 많습니다. 각 숫자를 패턴으로 저장하세요. 비트 하나가 세그먼트 하나를 나타내며, 1은 켜짐, 0은 꺼짐입니다.

byte는 8개의 비트로 이루어진 0부터 255까지의 정수입니다. 앞에 0b를 붙여 이진수로 씁니다. 비트를 오른쪽부터 읽으세요. 마지막 비트는 세그먼트 a, 그 앞의 비트는 b이며, 이런 식으로 g까지 이어집니다.

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

패턴 10개를 배열에 넣을 수 있으므로 digits[3]은 숫자 3의 패턴입니다. 이진 카운터에서 사용한 bitRead()는 패턴의 비트 하나를 읽습니다. 오른쪽부터 세며 0에서 시작합니다.

bitRead(0b0000110, 0)  // 0: 세그먼트 a가 꺼져 있음
bitRead(0b0000110, 1)  // 1: 세그먼트 b가 켜져 있음

함수는 for 루프로 7개의 비트를 순회하며 각 세그먼트 핀을 설정할 수 있으므로, 숫자는 무엇이든 한 번의 호출로 표시할 수 있습니다. showDigit(7);

challenge icon

챌린지

중급

시작 코드에는 4와 7을 제외한 모든 패턴이 있으며, loop()는 1, 4, 7을 표시합니다.

  • 4(세그먼트 b, c, f, g)와 7(a, b, c)을 채우세요.
  • showDigit(n)을 작성하세요. 0부터 6까지 각 i에 대해 digits[n]의 비트 i가 1이면 segmentPins[i]를 LOW로, 0이면 HIGH로 설정하세요.

Run을 누른 다음 Check를 누르세요.

직접 해보기

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

// 숫자 하나당 패턴 하나. 오른쪽부터 읽으며, 마지막 비트는 세그먼트 a입니다.
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b0000000,  // 4: 채워 넣기
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000000,  // 7: 채워 넣기
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  // digits[n]에 해당하는 세그먼트는 켜고 나머지는 끕니다.
}

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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

디스플레이와 센서의 모든 레슨

직접 연습해 보세요: Arduino 플레이그라운드