Titan Micro Electronics製 TM1637 LEDドライバICを使用するドットマトリクスLED/7セグメントLED制御ライブラリです。

This software is released under the MIT License. 本ソフトウェアはMITライセンスでリリースされています。

本ライブラリはArduinoおよびESP32に対応しています。 またRaspberry Pi向けの実装(実験的)およびC#バインディング(一部機能のみ)を用意しています。

概要

TM1637を用いてドットマトリクスLEDまたは7セグメントLEDを制御するためのクラスライブラリです。 各ドット・各セグメントごとの点灯・消灯、明るさ制御の基本操作と、ビットマップの描画(ドットマトリクスLED)、左詰め・右詰め・0埋めでの数値表示(7セグメントLED)などの操作のためのメソッドを実装しています。

対応しているLEDディスプレイは、アノード最大6ライン×カソード最大8ラインまでのドットマトリクスLED、アノードコモン型・最大6桁までの小数点付き7セグメントLEDです。 8×8のドットマトリクスLEDではアノード6ライン・カソード8ライン分のみ制御可能です。 (TM1637仕様上の制限)

OSL40391 コロン付き4桁7セグメントLED(OSL40391-IXシリーズ)向けの拡張として、%付き数値の表示、温度(℃/℉)の表示、時刻(mm:ss/hh:mm)の表示のためのメソッドを実装しています。 これを用いることで、温湿度センサーから得られる数値をそのまま℃や%の単位付きでOSL40391-IXに表示するといったことができます。

Raspberry Piで直接TM1637を駆動する実装も用意していますが、現時点では実験的な位置づけで、動作が不安定です。 同C#バインディングは7セグメントLED用の機能のみ実装しています。

動作例

本ライブラリを使って各種LEDディスプレイを駆動した例です。

7セグメントLED

OSL40391-IW (秋月電子 I-09962)を駆動した例。

コロン付き4桁7セグメントLED OSL40391-IW
Arduino Nano上で実行
コロン付き4桁7セグメントLED OSL40391-IW
Raspberry Pi 3 Model B+/Raspbian 9.11上で実行

2381BB (秋月電子 I-08899)を2個並べて6桁として駆動した例。

3桁7セグメントLED 2381BB ×2
Arduino Nano上で実行

ドットマトリクスLED

MOA20UB019GJ (秋月電子 I-08249)を駆動した例。

5×7ドットマトリクスLED MOA20UB019GJ
Arduino Nano上で実行
⚠👁⚡映像の明るさが急激に変わる場面があります

OSL641501-AG (秋月電子 I-07661)を駆動した例。 TM1637の制限により6×8ドットのみ使用。

8×8ドットマトリクスLED OSL641501-AG
Arduino Nano上で実行
⚠👁⚡映像の明るさが急激に変わる場面があります

サンプルスケッチ

ArduinoおよびESP32用のサンプルスケッチは、examplesディレクトリを参照してください。

Raspberry Pi用のサンプルは、C#バインディングを使ったサンプルをbindings/csharp/examplesディレクトリディレクトリに用意しています。 使用する場合は、まずC#バインディングを作成してください。 その後、各サンプルのディレクトリ(csprojファイルがある場所)でdotnet runを実行してください。

上記の各サンプルをそのまま実行する場合は、この後に掲載している配線図のとおりに配線してください。 使用するGPIOピンを変える場合は、ソース上のピン定義も修正してください。

インストール方法

Arduino IDE

ZIPアーカイブからインストールする場合は、以下の手順でインストールしてください。

  1. ReleasesまたはClone or downloadよりZIPアーカイブをダウンロード
  2. Arduino IDEのメニュー[スケッチ] → [ライブラリをインクルード] → [.ZIP形式のライブラリをインストール]を選択
  3. ダウンロードしたZIPアーカイブファイルを選択して[OK]

PlatformIO

platformio lib installでインストールする場合は以下のとおりです。

platformio lib install https://github.com/smdn/TM1637Controller.git

platformio.inilib_depsに直接リポジトリを指定して追加する場合は以下のとおりです。

platformio.ini
[env]
lib_deps =
  https://github.com/smdn/TM1637Controller.git

Raspberry Pi (C#バインディング)

共有ライブラリのビルドにSWIG(version 3.0.12以降)およびWiring PIが必要です。 また、C#バインディングのビルドに.NET Core 2.2以上のSDK、またはそれに相当するバージョンのMonoおよびMono用のMSBuildが必要です。 あらかじめインストールしておいてください。

リポジトリからソースをcloneし、bindingsディレクトリにてmake binding-csharpすることでC#バインディングをビルドできます。

C#バインディングのビルド
git clone https://github.com/smdn/TM1637Controller.git
cd TM1637Controller/bindings
make binding-csharp

このとき同時に生成されるlibTM1637Controller.soを使用すれば他の言語からも使用できます。

具体的な使用方法はbindings/csharp/examplesディレクトリを参照してください。

配線例

TM1637と各ボードの配線例です。

TM1637と各種LEDディスプレイとの接続

ここではLEDディスプレイとして、以下の3例を掲載します。

  • コロン付き4桁7セグメントLED(OSL40391-IX)を接続する場合
  • 5×7ドットマトリクスLED(MOA20UB019GJ)を接続する場合
  • 3桁7セグメントLED(2381BB)を接続する場合
  • 3桁7セグメントLED(2381BB)を2個接続して6桁のディスプレイを構成する場合

各種ボードとの接続は次のセクションに掲載しています。 下図中の4本のワイヤー端(←boardの部分)を使用するボードに合わせて配線してください。

TM1637とOSL40391-IXの配線例
TM1637は180度回転しています
1 1 5 5 10 10 15 15 20 20 25 25 30 30 A A B B C C D D E E F F G G H H I I J J ←board TM1637
TM1637とMOA20UB019GJの配線例
TM1637は180度回転、MOA20UB019GJは時計回りに90度回転しています
1 1 5 5 10 10 15 15 20 20 25 25 30 30 A A B B C C D D E E F F G G H H I I J J TM1637 ←board
TM1637と2381BBの配線例
1 1 5 5 10 10 15 15 20 20 25 25 30 30 A A B B C C D D E E F F G G H H I I J J ←board TM1637
TM1637と2381BB(2個)の配線例
2381BBを2個並べて6桁として構成する
1 1 5 5 10 10 15 15 20 20 25 25 30 30 A A B B C C D D E E F F G G H H I I J J ←board TM1637

図中ではDIO及びCLKと、GND間のキャパシタ(100pF)、またVCC-GND間のキャパシタ(100μF・0.1μF)を省略しています。 実装する回路に合わせて適宜追加してください。

特にRaspberry Piでは、VCC-GND間のキャパシタをできる限りTM1637の近くに配置しないと安定しない場合がある模様です。

TM1637と各種ボードとの接続

GPIOピンはデジタル入出力が使えるものなら任意に使えます。 以下はサンプルスケッチで例示している配線になります。

Arduino NanoとTM1637の配線例
TM1637→ layer 21 text:TX1 TX1 text:RX0 RX0 text:RST RST text:GND GND text:D2 D2 text:D3 D3 text:D4 D4 text:D5 D5 text:D6 D6 text:D7 D7 text:D8 D8 text:D9 D9 text:D10 D10 text:D11 D11 text:D12 D12 text:D13 D13 text:3V3 3V3 text:REF REF text:A0 A0 text:A1 A1 text:A2 A2 text:A3 A3 text:A4 A4 text:A5 A5 text:A6 A6 text:A7 A7 text:5V 5V text:RST RST text:GND GND text:VIN VIN text:1 1 text:ICSP ICSP text:TX TX text:RX RX text:PWR PWR text:RST RST text:L L text:2009 2009 text:USA USA text:ARDUINO.CC ARDUINO.CC text:ARDUINO ARDUINO text:NANO NANO text:V3.0 V3.0 text:* * text:* * text:* * text:* * text:* * text:* * element:C1 package:CAP0805-NP element:C2 package:TAN-A element:C3 package:CAP0805-NP element:C4 package:CAP0805-NP element:C7 package:CAP0805-NP element:C8 package:TAN-A element:C9 package:CAP0805-NP element:D1 package:SOD-123 element:J1 package:HEAD15-NOSS element:J2 package:HEAD15-NOSS-1 element:RP1 package:RES4NT element:RP2 package:RES4NT element:U$4 package:FIDUCIAL-1X2 element:U$37 package:FIDUCIAL-1X2 element:U$53 package:FIDUCIAL-1X2 element:U$54 package:FIDUCIAL-1X2 element:U2 package:SSOP28 element:U3 package:SOT223
ESP-WROOM-32とTM1637の配線例
TM1637→ 3V3 IO17 IO16 GND GND ESP-WROOM-32
Raspberry Pi 3 Model B+とTM1637の配線例
Raspberry Pi 3 Model B v1.2 © Raspberry Pi 2015 Power HDMI Audio USB 2x USB 2x ETHERNET DSI (DISPLAY) CSI (CAMERA) GPIO TM1637→

APIリファレンス

version 1.1.0時点でのAPIリファレンスです。

7セグメントLED用クラス

以下で解説する7セグメントLED用のクラスは、TM1637と7セグメントLEDが次のように接続されていることを前提としています。 §.TM1637と各種LEDディスプレイとの接続と合わせてご覧ください。

端子接続
TM1637の端子 7セグメントLEDの端子
SEG1 (2) A セグメント 'A'
SEG2 (3) B セグメント 'B'
SEG3 (4) C セグメント 'C'
SEG4 (5) D セグメント 'D'
SEG5 (6) E セグメント 'E'
SEG6 (7) F セグメント 'F'
SEG7 (8) G セグメント 'G'
SEG8 (9) DP セグメント 'DP'
GRID1 (15) COM DIG1 (左から)1桁目のアノード共通端子
GRID2 (14) COM DIG2 (左から)2桁目のアノード共通端子
GRID3 (13) COM DIG3 (左から)3桁目のアノード共通端子
GRID4 (12) COM DIG4 (左から)4桁目のアノード共通端子
GRID5 (11) COM DIG5 (左から)5桁目のアノード共通端子
COM D1~D3 ドットD1〜D3の共通端子 (OSL40391-IXの場合)
GRID6 (10) COM DIG6 (左から)6桁目のアノード共通端子
TM1637の端子 7セグメントLEDの端子
セグメントのレイアウト
A B C D E F G DP
SVGに対応したブラウザでご覧ください。

本ライブラリでは、数を表す文字は次のような字形で表示されます。

表示される字形
文字 字形
10進数 0
1
2
3
4
5
6
7
8
9
0
表示される字形
文字 字形
16進数 A
B
C
D
E
F

次のような場合に関しては、§.SegmentAddressingを参照してください。

  • セグメントレイアウトが上記のレイアウトとは異なる7セグメントLEDを接続する場合
  • 部品配置・結線上の都合でTM1637と7セグメントLEDの各端子の接続を上記とは異なる接続に変えて使用したい場合
  • 表示される字形をカスタマイズしたい場合

クラス

制御する7セグメントLEDに合わせて以下のクラスを選んで使用することができます。

クラス一覧 (一般的な用途向け)
クラス 概要 ヘッダファイル
TM1637_1Digit7SegmentLEDController 1桁のアノードコモン型 小数点付き 7セグメントLED用のコントローラ TM1637_7SegmentLEDController.h
TM1637_2Digit7SegmentLEDController 2桁のアノードコモン型 小数点付き 7セグメントLED用のコントローラ
TM1637_3Digit7SegmentLEDController 3桁のアノードコモン型 小数点付き 7セグメントLED用のコントローラ
TM1637_4Digit7SegmentLEDController 4桁のアノードコモン型 小数点付き 7セグメントLED用のコントローラ
TM1637_5Digit7SegmentLEDController 5桁のアノードコモン型 小数点付き 7セグメントLED用のコントローラ
TM1637_6Digit7SegmentLEDController 6桁のアノードコモン型 小数点付き 7セグメントLED用のコントローラ
TM1637_OSL40391IXController アノードコモン型 コロン付き 4桁7セグメントLEDOSL40391-IXシリーズ用のコントローラ TM1637_OSL40391IXController.h

上記の具象クラス以外に、用途に合わせて下記の基本クラスを直接または拡張して使用することもできます。

クラス一覧 (基本クラス)
クラス 概要 ヘッダファイル
TM1637_7SegmentLEDController 標準的なセグメントレイアウトで構成される1〜6桁のアノードコモン型 小数点付き 7セグメントLED用コントローラ基底クラス TM1637_7SegmentLEDController.h
TM1637_7SegmentLEDCustomSegmentAddressingController 1〜6桁のアノードコモン型 小数点付き 7セグメントLED用コントローラ基底クラス TM1637_7SegmentLEDController.h
StandardSegmentAddressing 標準的なセグメントレイアウトの定義クラス TM1637_7SegmentLEDController_SegmentAddressing.h

コンストラクタ・テンプレート引数

各クラスのインスタンスを作成する場合は、コンストラクタで下記の引数を指定してください。

コンストラクタの引数
引数名 概要
pin_DIO (uint8_t) TM1637の端子DIO(17)と接続しているピン番号を指定してください
pin_CLK (uint8_t) TM1637の端子CLK(18)と接続しているピン番号を指定してください
gridsOrder (unsigned int[]) (オプション) TM1637の端子GRID1GRID6と、7セグメントLEDのアノード共通端子1〜6が異なる順で接続されている場合、この引数を指定することで対応順を変えることができます。
具体例はexamples/7SegmentLED_ChangeOrderDigits/7SegmentLED_ChangeOrderDigits.inoを参照してください。
引数名 概要

基本クラスを直接または拡張して使用する際は、下記のテンプレート引数も指定する必要があります。

テンプレート引数
引数名 概要 備考
NUM_OF_DIGITS (size_t) TM1637と接続している7セグメントLEDの桁数を指定してください TM1637_7SegmentLEDControllerおよびTM1637_7SegmentLEDCustomSegmentAddressingController
NUM_OF_GRIDS_FOR_USE (size_t) コントローラ内部で確保するグリッド数を指定してください
(7セグメントと小数点以外に実装されているLEDを操作する場合に指定します。 詳細はTM1637_OSL40391IXControllerの実装をご覧ください。)
TM1637_7SegmentLEDCustomSegmentAddressingController
TSegmentAddressing (typename) TM1637のSEG1SEG8端子と各セグメントの接続対応にあわせて各種キャラクタを定義したクラスを指定してください。
(詳細はStandardSegmentAddressingの実装をご覧ください。)
TM1637_7SegmentLEDCustomSegmentAddressingController
(詳細:§.SegmentAddressing)
引数名 概要 備考

メソッド

7セグメントLED用クラスでは以下のメソッドを使うことができます。 明るさの制御等に関するメソッドについては§.7セグメントLED・ドットマトリクスLED共通をご覧ください。

メソッド
メソッド名 引数(必須) 概要 備考
複数桁の表示に関する操作
display int_fast32_t value 整数値valueを10進表記・右詰めで表示します ・数値の桁数がNUM_OF_DIGITSより大きくなる場合、上位の桁からNUM_OF_DIGITS桁分のみを表示します

・数値がNaNまたは±∞の場合、それぞれnan, INF, -INFの字形を表示します
displayZeroPadding int_fast32_t value 整数値valueを10進表記・0埋めで表示します
displayHex int_fast32_t value 整数値valueを16進表記・右詰めで表示します
displayHexZeroPadding int_fast32_t value 整数値valueを16進表記・0埋めで表示します
display char* format, integer_t value 整数値valueを書式formatで表示します
formatにはsprintf形式の書式指定子を指定してください
display float value 実数値valueを小数形式で表示します
widthに整数部の桁数、precisionに少数部の桁数を指定します(dtostrfの動作に依拠します)
float value, int width, unsigned int precision
displayNumericalString String& str 文字列strで表された数値を表示します
strには09, AF, af, -, ., (SP, 0x20)の各文字を任意の順で含めることができます
それ以外の文字が含まれている場合は空白 として表示します
char* str, size_t length
displaySegmentBits uint8_t (&segmentBits)[NUM_OF_GRIDS_FOR_USE] すべての桁のセグメントを、桁ごとのビット列配列segmentBitsで表される状態に設定します
clear すべての桁に空白 を設定して消灯状態にします
clearCharacterSegments すべての桁に対して、文字のセグメントのみ(ドットのセグメント以外)を消灯状態にします 0.0.0. が表示されている状態の場合、...が表示された状態になります
clearDecimalPointSegments すべての桁に対して、ドットのセグメントのみ(文字のセグメント以外)を消灯状態にします 0.0.0. が表示されている状態の場合、000が表示された状態になります
各桁ごとの表示に関する操作
setDecimalNumberAt unsigned int digit, uint8_t decimalNumber digit桁目に10進数値decimalNumber(0〜9)のキャラクタを設定します
setHexNumberAt unsigned int digit, uint8_t hexadecimalNumber digit桁目に16進数値hexadecimalNumber(0x0〜0xF)のキャラクタを設定します
setDecimalPointOnAt unsigned int digit digit桁目の小数点セグメントを点灯状態に設定します
setDecimalPointOffAt unsigned int digit digit桁目の小数点セグメントを消灯状態に設定します
setDecimalPointAt unsigned int digit digit桁目の小数点セグメントを点灯/消灯状態に設定します
trueForOnOtherwiseOfftrueなら点灯状態、falseなら消灯状態にします
setSegmentBitsAt unsigned int digit, uint8_t segmentBits digit桁目のセグメントをビット列segmentBitsで表される状態に設定します
switchSegmentBitsAt unsigned int digit, uint8_t segmentBits, bool trueForOnOtherwiseOff digit桁目のセグメントをビット列segmentBitsで表される状態に設定します
各ビットに対応するセグメントについて、trueForOnOtherwiseOfftrueなら点灯状態、falseなら消灯状態にします
その他の操作
flush 内部バッファに書き込まれている状態を反映させます 上記の各メソッドのオプション引数flushfalseを指定した場合、内部バッファのみを変更し、TM1637へのコマンド送信を保留します
保留したコマンド送信を行って内部バッファの状態をTM1637へ反映させる際にこのメソッドを呼び出してください
static メソッド
numberOfDigits 桁数を返します
(テンプレート引数NUM_OF_DIGITSで指定した値と同値)
displayableMaximumInteger 表示可能な整数の最大値を返します 4桁の場合: 9999
displayableMinimumInteger 表示可能な整数の最小値を返します 4桁の場合: -999
displayableMaximumPlusFloat 表示可能な正の実数値の最大値を返します 4桁の場合: 9999.0
displayableMinimumPlusFloat 表示可能な正の実数値の最小値を返します 4桁の場合: 0.001
displayableMaximumMinusFloat 表示可能な負の実数値の最大値を返します 4桁の場合: -999.0
displayableMinimumMinusFloat 表示可能な負の実数値の最大値を返します 4桁の場合: -0.01
メソッド名 引数(必須) 概要 備考

OSL40391-IX向けのメソッド

クラスTM1637_OSL40391IXControllerでは、上記のメソッドに加え、OSL40391-IXシリーズ向けに下記のメソッドを実装しています。

TM1637_OSL40391IXControllerのメソッド
メソッド名 引数(必須) 概要 備考
複数桁の表示に関する操作
displayTemperatureCelsius float temperatureCelsius 1〜3桁目にtemperatureCelsiusの値を、4桁目に摂氏度記号℃の字形を表示します ・実数値の表示はdisplay(float)に依拠します

100.1のように3桁目に小数点がある場合でも、常に消灯状態にし100.ではなく100として表示します

・数値が999超過、-99未満、NaN、±∞のいずれかの場合は、---を表示します
displayTemperatureFahrenheit float temperatureFahrenheit 1〜3桁目にtemperatureFahrenheitの値を、4桁目に華氏度記号℉の字形を表示します
displayTemperature float temperature, bool trueForCelsiusOtherwiseFahrenheit 1〜3桁目にtemperatureの値を表示します
trueForOnOtherwiseOfftrueなら摂氏度記号℃の字形falseなら華氏度記号℉の字形を4桁目に表示します
displayPercent float value 1〜3桁目にvalueの値を、4桁目にパーセント記号%の字形を表示します
value100を100%として表示します
displayElapsedTimeMinutesSeconds uint32_t elapsedMilliseconds elapsedMillisecondsで表される総経過ミリ秒をmm:ss形式で表示します
経過時間の部分を1〜2桁目、経過時間の部分を3〜4桁目に表示し、コロンのセグメントを点灯状態にします

分部分は0099の範囲で表示し、100以上となる場合は下位二桁(100での剰余、mod 100)を表示します
秒部分は0059の範囲で表示します
オプション引数blinkColonがtrueの場合、経過ミリ秒に応じて1秒周期でコロンを点滅させて表示します
falseの場合、コロンを常時点灯させて表示します
displayElapsedTimeHoursMinutes uint32_t elapsedMilliseconds elapsedMillisecondsで表される総経過ミリ秒をhh:mm形式で表示します
経過時間の部分を1〜2桁目、経過時間の部分を3〜4桁目に表示し、コロンのセグメントを点灯状態にします

時部分は0099の範囲で表示し、100以上となる場合は下位二桁(100での剰余、mod 100)を表示します
分部分は0059の範囲で表示します
displayTimeOfDayMinutesSeconds uint32_t timeInMilliseconds timeInMillisecondsで表される時刻(日付変更直後00:00:00からの経過ミリ秒)をmm:ss形式で表示します
分部分は0059の範囲で表示します
秒部分は0059の範囲で表示します

上記以外はdisplayElapsedTimeMinutesSecondsと同様です
displayTimeOfDayHoursMinutes uint32_t timeInMilliseconds timeInMillisecondsで表される時刻(日付変更直後00:00:00からの経過ミリ秒)をhh:mm形式(24時制)で表示します
時部分は0023の範囲で表示します
分部分は0059の範囲で表示します

上記以外はdisplayElapsedTimeHoursMinutesと同様です
各桁ごと/セグメントごとの表示に関する操作
setColonOn コロンのセグメントを点灯状態にします
setColonOff コロンのセグメントを消灯状態にします
setColon bool trueForOnOtherwiseOff コロンのセグメントを点灯/消灯状態に設定します
trueForOnOtherwiseOfftrueなら点灯状態、falseなら消灯状態にします
setUpperDotOfColonOn コロン上側ドットのセグメントを点灯状態にします
setUpperDotOfColonOff コロン上側ドットのセグメントを消灯状態にします
setUpperDotOfColon bool trueForOnOtherwiseOff コロン上側ドットのセグメントを点灯/消灯状態に設定します
trueForOnOtherwiseOfftrueなら点灯状態、falseなら消灯状態にします
setLowerDotOfColonOn コロン下側ドットのセグメントを点灯状態にします
setLowerDotOfColonOff コロン下側ドットのセグメントを消灯状態にします
setLowerDotOfColon bool trueForOnOtherwiseOff コロン下側ドットのセグメントを点灯/消灯状態に設定します
trueForOnOtherwiseOfftrueなら点灯状態、falseなら消灯状態にします
setDegreeSignOn 度数記号のセグメントを点灯状態にします
setDegreeSignOff 度数記号のセグメントを消灯状態にします
setDegreeSign bool trueForOnOtherwiseOff 度数記号のセグメントを点灯/消灯状態に設定します
trueForOnOtherwiseOfftrueなら点灯状態、falseなら消灯状態にします
setPercent 4桁目にパーセント記号(%)の字形を設定します
度数記号のセグメントを使用するため、4桁目以外に表示させることはできません
メソッド名 引数(必須) 概要 備考

SegmentAddressing

このセクションの内容は未整備です。

テンプレート引数TSegmentAddressingに各種字形とビットパターンを定義したクラスを指定することにより、その定義に従って動作させることができます。 これにより、一般的なセグメントのレイアウトではない7セグメントLEDを使用したり、TM1637と7セグメントLEDとの結線や表示される字形をカスタマイズすることができます。

TSegmentAddressingに指定できるクラスの実装例については、TM1637_7SegmentLEDController_SegmentAddressing.hを参照してください。

ドットマトリクスLED用クラス

クラス

制御するドットマトリクスLEDのアノード・カソードの結線によって次のどちらかのクラスを使ってください。 どちらのクラスも、アノードが最大6ライン、カソードが最大8ラインまで対応できます。

ドットマトリクスLEDのタイプと対応クラス
ドットマトリクスLED クラス ヘッダ
方向のラインがカソード
方向のラインがアノード
TM1637_CathodeColumnsAnodeRowsDotMatrixLEDController TM1637_DotMatrixLEDController.h
方向のラインがアノード
方向のラインがカソード
TM1637_AnodeColumnsCathodeRowsDotMatrixLEDController

8×8タイプのドットマトリクスLEDを接続すること自体はできますが、操作は最大でアノード6ライン分までとなるため、2ライン分は無効になります。 (TM1637仕様上の制限)

上記の具象クラス以外に、用途に合わせて下記の基本クラスを直接または拡張して使用することもできます。

クラス一覧 (基本クラス)
クラス 概要 ヘッダファイル
TM1637_DotMatrixLEDController ドットマトリクスLED用コントローラ基底クラス TM1637_DotMatrixLEDController.h

コンストラクタ・テンプレート引数

各クラスのインスタンスを作成する場合は、コンストラクタで下記の引数を指定してください。

コンストラクタの引数
引数名 概要
pin_DIO (uint8_t) TM1637の端子DIO(17)と接続しているピン番号を指定してください
pin_CLK (uint8_t) TM1637の端子CLK(18)と接続しているピン番号を指定してください
引数名 概要

クラス TM1637_CathodeColumnsAnodeRowsDotMatrixLEDController または TM1637_AnodeColumnsCathodeRowsDotMatrixLEDController を使用する場合は以下のテンプレート引数を指定してください。

テンプレート引数
引数名 概要
NUM_OF_ROWS (size_t) TM1637と接続しているドットマトリクスLEDのの数を指定してください
NUM_OF_COLS (size_t) TM1637と接続しているドットマトリクスLEDのの数を指定してください
引数名 概要

TM1637_DotMatrixLEDControllerを使用する場合は上記の替わりに以下のテンプレート引数を指定してください。

テンプレート引数
引数名 概要
NUM_OF_ANODE_LINES (size_t) TM1637と接続しているドットマトリクスLEDのアノードのライン数を指定してください
NUM_OF_CATHODE_LINES (size_t) TM1637と接続しているドットマトリクスLEDのカソードのライン数を指定してください
引数名 概要

メソッド

ドットマトリクスLED用クラスでは以下のメソッドを使うことができます。 明るさの制御等に関するメソッドについては§.7セグメントLED・ドットマトリクスLED共通をご覧ください。

メソッド
メソッド名 引数(必須) 概要 備考
各ドットに対する操作
fill すべてのドットを点灯状態にします
clear すべてのドットを消灯状態にします
invert すべてのドットの点灯/消灯状態を反転します
fillRow unsigned int row row列目のすべてのドットを点灯状態にします row, columnは0-basedです
clearRow unsigned int row row列目のすべてのドットを消灯状態にします
fillColumn unsigned int column column行目のすべてのドットを点灯状態にします
clearColumn unsigned int column column行目のすべてのドットを消灯状態にします
setOn unsigned int column, unsigned int row columnrow列のドットを点灯状態にします
setOff unsigned int column, unsigned int row columnrow列のドットを消灯状態にします
set unsigned int column, unsigned int row, bool trueForOnOtherwiseOff columnrow列のドットを点灯/消灯状態を設定します
trueForOnOtherwiseOfftrueなら点灯状態、falseなら消灯状態にします
draw uint8_t (&bitmapTopLeftOrigin) [NUM_OF_ROWS] 左上が原点のビットマップに対応するドットの点灯/消灯状態を設定します
drawRotated uint8_t (&bitmapBottomLeftOrigin) [NUM_OF_COLS] 270度回転して左下が原点のビットマップに対応するドットの点灯/消灯状態を設定します
その他の操作
flush 内部バッファに書き込まれている状態を反映させます 上記の各メソッドのオプション引数flushfalseを指定した場合、内部バッファのみを変更し、TM1637へのコマンド送信を保留します
保留したコマンド送信を行って内部バッファの状態をTM1637へ反映させる際にこのメソッドを呼び出してください
static メソッド
numberOfRows 列数を返します
(テンプレート引数NUM_OF_ROWSで指定した値と同値)
TM1637_CathodeColumnsAnodeRowsDotMatrixLEDControllerおよびTM1637_AnodeColumnsCathodeRowsDotMatrixLEDControllerのみ
numberOfColumns 行数を返します
(テンプレート引数NUM_OF_ROWSで指定した値と同値)
numberOfAnodeLines アノードのライン数を返します
(テンプレート引数NUM_OF_ANODE_LINES、ないしはNUM_OF_ROWS, NUM_OF_COLSで指定した値と同値)
numberOfCathodeLines カソードのライン数を返します
(テンプレート引数NUM_OF_ANODE_LINES、ないしはNUM_OF_ROWS, NUM_OF_COLSで指定した値と同値)
メソッド名 引数(必須) 概要 備考

7セグメントLED・ドットマトリクスLED共通

以下は7セグメントLED用・ドットマトリクスLED用クラスに共通するメソッドです。 基底クラスTM1637Controller(TM1637Controller.h)で実装しています。

メソッド
メソッド名 引数(必須) 概要 備考
begin インスタンスを初期状態にし、TM1637に初期化コマンドを送信します
オプション引数displayBrightnessPercentで明るさの初期値を指定することができます
明るさ設定の詳細については下記メソッドを参照してください
setDisplaySwitchOn ディスプレイをオンにします
点灯状態のセグメントが点灯します
setDisplaySwitchOff ディスプレイをオフにします
点灯状態のセグメントも消灯します
setDisplaySwitch bool trueForOnOtherwiseOff trueForOnOtherwiseOfftrueならディスプレイをオンに、falseならオフにします
getDisplaySwitch 現在のディスプレイのオン/オフの状態を取得します
オンならtrueを、オフならfalseを返します
setDisplayBrightness unsigned int brightnessPercent ディスプレイの明るさを0%〜100%の範囲で指定します
0%に設定した場合、同時にディスプレイオフの状態にします
1%以上に設定した場合、同時にディスプレイオンの状態にします
setDisplayBrightnessMaximum ディスプレイの明るさを最大にします TM1637で定義されているパルス幅14/16に設定します
setDisplayBrightnessBrighter ディスプレイの明るさを明るめにします
(今より1段階明るくするものではありません)
TM1637で定義されているパルス幅10/16に設定します
setDisplayBrightnessDarker ディスプレイの明るさを暗めにします
(今より1段階暗くするものではありません)
TM1637で定義されているパルス幅4/16に設定します
setDisplayBrightnessMinimum ディスプレイの明るさを最小にします TM1637で定義されているパルス幅1/16に設定します
getDisplayBrightness 現在のディスプレイの明るさを0%〜100%の範囲の値で返します 内部でTM1637で定義されているパルス幅に応じてた値に変換するため、setDisplayBrightnessで指定した値と同じ値を返すとは限りません
メソッド名 引数(必須) 概要 備考

動作状況

version 1.1.0の時点において、以下の環境・ボードでの動作を確認しています。

動作確認済みのボード

IDE

  • Ubuntu 20.04 + PlatformIO IDE 2.2.1
  • Ubuntu 18.04 + Arduino IDE 1.8.10

制限事項・特記事項

Raspberry Pi向けの実装に関して

version 1.0.0の時点では実験的な位置づけです。 すべての機能は一応の動作はしますが、不安定です。

現時点での実装では、TM1637に送信するコマンドのタイミングが遅れることがあります。 これにより、目的より後ろの桁やセグメントに表示される、目的と異なるコマンドと誤認される問題が発生します。

短時間でコマンド送信を連続すると、この現象が顕著に現れます。 コマンド送信を50ms〜100msに一度程度にすると(少なくとも見かけ上は)緩和しますが、間隔をあまり大きくするとズレた状態のまま表示されることになります。

Raspberry Pi上で連続してコマンドを送信した場合の動作

その他

本ページ内の実体配線図の作図にはFritzingを使用しています。

デモ映像でのOLEDディスプレイの表示にはSO2002A_I2C (https://github.com/garretlab/SO2002A_I2C)を使用しています。

不具合・要望・質問等

不具合の報告、ライブラリに対する修正案等がありましたらIssues、要望や質問等はDiscussionsへお願いします。 言語は英語のほうが望ましいですが、日本語のほうが助かります。

バージョン履歴

バージョンごとの変更点はリンク先をご覧ください。