- 記事公開日
TM1637Display.hライブラリの使い方
7セグメントLEDモジュールの制御に使用するTM1637Display.hライブラリの使い方や基本的なコードについてまとめました。
目次
使用部品
配線図
ライブラリのインストール
あらかじめ「TM1637Display.h」ライブラリをインストールしておく必要があります。
Arduino IDEを開き、画面上部メニューの[Sketch]ー[Include Library]-[manage Librarys]を選択。
検索窓に「TM1637」と入力し、ライブラリのインストールを行ってください。
基本コード(点灯セグメントを個別に指定)
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);
}
4桁の数値を左詰めで表示(0表示あり)
// [表示する数値],[0表示],[桁数],[左から○番目から表示※0~3]
display.showNumberDec(123, true, 4, 0);
4桁の数値を左詰めで表示(0表示なし)
// [表示する数値],[0表示],[桁数],[左から○番目から表示※0~3]
display.showNumberDec(123, false, 4, 0);
はみ出した分は表示されません
// [表示する数値],[0表示],[桁数],[左から○番目から表示※0~3]
display.showNumberDec(123, false, 3, 2);
左から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);
}
応用(スロットゲーム)
ボタンを押すと、数字が止まるスロットゲームを作ってみました。
数字が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;
}
}