記事公開日

TM1637Display.hライブラリの使い方

7セグLEDに「0123」と表示

7セグメントLEDモジュールの制御に使用するTM1637Display.hライブラリの使い方や基本的なコードについてまとめました。

目次

使用部品

配線図

7セグLEDとArduinoの配線図

ライブラリのインストール

あらかじめ「TM1637Display.h」ライブラリをインストールしておく必要があります。

Arduino IDEを開き、画面上部メニューの[Sketch]ー[Include Library]-[manage Librarys]を選択。

Arduino IDEを開き、画面上部メニューの[Sketch]ー[Include Library]-[manage Librarys]を選択

検索窓に「TM1637」と入力し、ライブラリのインストールを行ってください。

検索窓に「TM1637」と入力し、ライブラリのインストール

基本コード(点灯セグメントを個別に指定)

7セグLEDに「0123」と表示

display.setSegments関数を使用して、点灯するセグメントを個別に指定します。

#include <TM1637Display.h>

#define CLK 2 // CLKピンをArduinoのピン2に接続
#define DIO 3 // DIOピンをArduinoのピン3に接続

TM1637Display display(CLK, DIO);

void setup() {

  // ディスプレイの輝度を設定(0~7で設定)
  display.setBrightness(5); 
  
  // 表示のリセット(何も表示しない)
  uint8_t data[] = {0x00,0x00,0x00,0x00};
  display.setSegments(data);

}

void loop() {
 
  // [0123]と表示する
  uint8_t data[] = {0b00111111,0b00000110,0b01011011,0b01001111};
  display.setSegments(data);

}
セグメントを個別で表示する

自分で点灯するセグメントを指定して数字を表現するときの例

  • 0b00111111 ⇒ 0
  • 0b00000110 ⇒ 1
  • 0b01011011 ⇒ 2
  • 0b01001111 ⇒ 3
  • 0b01100110 ⇒ 4
  • 0b01101101 ⇒ 5
  • 0b01111101 ⇒ 6
  • 0b00000111 ⇒ 7
  • 0b01111111 ⇒ 8
  • 0b01101111 ⇒ 9

アルファベットを表現するときの例

  • 0b01110111 ⇒ A
  • 0b01111111 ⇒ B
  • 0b00111001 ⇒ C
  • 0b00111111 ⇒ D

数値の表示に使用するコード

display.showNumberDec関数を使用すれば、個別に点灯セグメントを指定しなくても、10進数で表示する数字を指定することが可能です。

「123」という3桁の数値を左詰めで表示

#include <TM1637Display.h>

#define CLK 2 // CLKピンをArduinoのピン2に接続
#define DIO 3 // DIOピンをArduinoのピン3に接続

TM1637Display display(CLK, DIO);

void setup() {

  // ディスプレイの輝度を設定(0~7で設定)
  display.setBrightness(5); 
  
  // 表示のリセット(何も表示しない)
  uint8_t data[] = {0x00,0x00,0x00,0x00};
  display.setSegments(data);

}

void loop() {
 
  // [表示する数値],[0表示],[桁数],[左から○番目から表示※0~3]
  display.showNumberDec(123, false, 3, 0);

}
123-

4桁の数値を左詰めで表示(0表示あり)

// [表示する数値],[0表示],[桁数],[左から○番目から表示※0~3]

display.showNumberDec(123, true, 4, 0);
0123

4桁の数値を左詰めで表示(0表示なし)

// [表示する数値],[0表示],[桁数],[左から○番目から表示※0~3]

display.showNumberDec(123, false, 4, 0);
-123

はみ出した分は表示されません

// [表示する数値],[0表示],[桁数],[左から○番目から表示※0~3]

display.showNumberDec(123, false, 3, 2);
--12

左から3番目(2を指定)に3桁の数字を指定していますが、はみだしてしまっている為、最後の数値「3」は表示されません。

時間の表示に使用するコード

display.showNumberDecEx関数を使用することで、時間の区切り文字「:(コロン)」の表示・非表示を指定することができます。

時間をセミコロン付きで表示(0表示あり)

#include <TM1637Display.h>

#define CLK 2 // CLKピンをArduinoのピン2に接続
#define DIO 3 // DIOピンをArduinoのピン3に接続

TM1637Display display(CLK, DIO);

void setup() {

  // ディスプレイの輝度を設定(0~7で設定)
  display.setBrightness(5); 
  
  // 表示のリセット(何も表示しない)
  uint8_t data[] = {0x00,0x00,0x00,0x00};
  display.setSegments(data);

}

void loop() {
 
  // [表示する数値],[コロン],[0表示]
  display.showNumberDecEx(123,0x40,true);

}
01:23

応用(スロットゲーム)

7セグLEDで作ったスロットゲーム

ボタンを押すと、数字が止まるスロットゲームを作ってみました。

数字が3つ揃うとゲームクリアとなり、ブザーからファンファーレが鳴ります。

スロットゲームのプログラム

#include <TM1637Display.h>


#define CLK 2 // CLKピンをArduinoのピン2に接続
#define DIO 3 // DIOピンをArduinoのピン3に接続


#define BUTTON_PIN_1 4 // ボタン1のピンをArduinoのピン4に接続
#define BUTTON_PIN_2 5 // ボタン2のピンをArduinoのピン5に接続
#define BUTTON_PIN_3 6 // ボタン3のピンをArduinoのピン6に接続

#define BUZZER_PIN 10 // ブザーを接続するピン

TM1637Display display(CLK, DIO);
int numbers[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // 表示する数字の配列

int button1 = 0;
int button2 = 0;
int button3 = 0;

void setup() {

  // ピンを入力として設定し、プルアップ抵抗を有効にする
  pinMode(BUTTON_PIN_1, INPUT_PULLUP);
  pinMode(BUTTON_PIN_2, INPUT_PULLUP);
  pinMode(BUTTON_PIN_3, INPUT_PULLUP);
 
  display.setBrightness(0x0a); // ディスプレイの輝度を設定(0から0x0fの間で設定可能)
 
  uint8_t data[] = {0x00, 0x00, 0x00, 0x00};
  display.setSegments(data);
}

void loop() {


 // ボタン1が押された履歴があるか?
  if(!button1) {

    // ランダム数,0表示,桁数,左から○番目に表示
    int randomIndex1 = random(0, 9);
    display.showNumberDec(numbers[randomIndex1], false, 1, 1);

    // PIN1の状態をチェック
    int value1 = digitalRead(BUTTON_PIN_1);


    // LOWになったらフラグを立てる(初期プルアップ)
    if(!value1) {

      button1 = numbers[randomIndex1];

      tone(BUZZER_PIN,262,30); // 262Hzの音を100ミリ秒鳴らす(C4の音)
      delay(100); // ボタンのバウンスを防止するために少し待ちます
    }
  }
 
  if(!button2) {

    int randomIndex2 = random(0, 9);
    display.showNumberDec(numbers[randomIndex2], false, 1, 2);

    int value2 = digitalRead(BUTTON_PIN_2);

    if(!value2) {
      button2 = numbers[randomIndex2];

      tone(BUZZER_PIN,262,30); // 262Hzの音を100ミリ秒鳴らす(C4の音)
      delay(100); // ボタンのバウンスを防止するために少し待ちます
    }
  }


  if(!button3) {
 
    int randomIndex3 = random(0, 9);
    display.showNumberDec(numbers[randomIndex3], false, 1, 3);

    int value3 = digitalRead(BUTTON_PIN_3);
   
    if(!value3) {
      button3 = numbers[randomIndex3];

      tone(BUZZER_PIN,262,30); // 262Hzの音を100ミリ秒鳴らす(C4の音)
      delay(100); // ボタンのバウンスを防止するために少し待ちます
    }
  }

  // 3つのボタンが全て押されたとき
  if(button1 && button2 && button3) {

    // 3つの数字がそろったとき
    if (button1 == button2 && button2 == button3) {

     delay(300);  // 1秒待機
   
      // 点滅
      uint8_t data[] = {0x00, 0x00, 0x00, 0x00};
      for(int i = 0; i < 3; i++) {

        delay(200);

        // 消灯
        display.setSegments(data);
        delay(200);

        // 点灯
        display.showNumberDec(button1, false, 1, 1);
        display.showNumberDec(button2, false, 1, 2);
        display.showNumberDec(button3, false, 1, 3);
      }

      delay(300);

      // ファンファーレのような音のパターン
      // ド、ミ、ソ、シ、ド、レ、ファ、ソ、ラ、シ、ド
      int melody[] = {262, 330, 392, 494, 523, 587, 659, 784, 880, 988, 1046};
      int melodyLength = sizeof(melody) / sizeof(melody[0]);

      // 各音を順番に鳴らす
      for (int i = 0; i < melodyLength; i++) {
          tone(BUZZER_PIN, melody[i], 200);  // 音の長さを200ミリ秒に設定
          delay(200);                  // 音がなっている間待機
      }

    }
   
    delay(2000);

    button1 = 0;
    button2 = 0;
    button3 = 0;
  }
}

スロットゲームの配線図

スロットゲーム配線図
この記事のURLをコピー

メールアドレスは公開されませんのでご安心ください。また、* が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

関連情報

  • 【2024年度版】マイコンおすすめランキングBEST5
運営者プロフィール
コダマ

職業はIT系フリーランス。過去、電子配線業務の経験が10年ある為、はんだづけも得意です。宮崎県在住、30代・2児の父親。

カテゴリー