Menu
CoddyTech

バイトで表す数字のパターン

CoddyのArduinoジャーニー「ディスプレイとセンサー」セクションの一部。レッスン 2/24。

数字ごとにdigitalWrite()を7行書くのは、かなりのコード量です。各数字をパターンとして保存しましょう。1ビットが1つのセグメントを表し、点灯なら1、消灯なら0です。

byteは、8ビットで構成される0から255までの整数です。先頭に0bを付けて2進数で書きます。ビットは右から読みます。最後のビットがセグメントa、その左がbで、gまで続きます。

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

10個のパターンは配列に収まるので、digits[3]は3のパターンです。2進カウンターで使ったbitRead()は、右端から数えて0から始め、パターンのビットを1つ読み取ります。

bitRead(0b0000110, 0)  // 0: セグメントaは消灯
bitRead(0b0000110, 1)  // 1: セグメントbは点灯

関数でforループを使って7つのビットを順に確認し、各セグメントのピンを設定できます。これで、どの数字もshowDigit(7);の1回の呼び出しで表示できます。

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

// 1桁につき1つのパターン。右から読み、右端のビットがセグメント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プレイグラウンド