![見出し画像](https://assets.st-note.com/production/uploads/images/162051746/rectangle_large_type_2_16a9c4b379ae52a3300b1ed1f405b9e9.jpeg?width=1200)
7seg+NANO(3) TM1637
TM1637というドライバICのついた4ケタ7セグのモジュールをAliで買った。
![](https://assets.st-note.com/img/1731739188-5oIhSpxaBfN4RjmAwLbZiuMW.jpg?width=1200)
3.3/5V駆動。端子はVCC、GND、CLK、DIOの4つでデータのやり取りは2本の線で行う。シフトレジスタ(3本でやりとり)より優れている。時刻表示用に2ケタ目と3ケタ目の間にコロンを表示できるようになっている。
検索をかけるとTM1637を扱うライブラリがいくつかあがってきたが、事例の多い<TM1637Display.h>をインストールした。
すると、サンプルスケッチを参考にあっという間にできてしまった。しかも明るい。これまでの苦労は何やったんか。(→ 7seg+NANO(1)、7seg+NANO(2))以下にスケッチを示す。
/* NANO_TM1637_01.ino
Arduino NANO serial port is COM3 for hp_PC.
1・ ・VIN 3,11 is interfered by tone().
0・ ・GND A6,A7 is analog only.
Reset・ ・Reset
GND・ ・5V
TM1637_CLK <-- 2・ ・A7
TM1637_DIO <-- 3・ ・A6
4・ ・19/A5
5・ ・18/A4
6・ ・17/A3
7・ ・16/A2
8・ ・15/A1
9・ ・14/A0
10・ ・AREF
11・ ・3.3V
12・ USB ・13*
*/
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff }; // 7seg用データ(0000)を表示
int digit[4]; // 表示する4ケタの数
void setup() {
Serial.begin(9600);
// put your setup code here, to run once:
display.clear();
display.setBrightness(0x0c); // 輝度 max 0x0f
}
uint8_t alpha_data[26] = {
0b01110111, /* 1a */ 0b01111100, /* 2b */ 0b01011000, /* 3c */ 0b01011110, // 4d
0b01111001, /* 5e */ 0b01110001, /* 6f */ 0b00111101, /* 7g */ 0b01110100, // 8h
0b00000100, /* 9i */ 0b00011110, /* 10j */ 0b01110101, /* 11k */ 0b00111000, // 12l
0b00110111, /* 13m */ 0b01010100, /* 14n */ 0b01011100, /* 15o */ 0b01110011, // 16p
0b01100111, /* 17q */ 0b01010000, /* 18r */ 0b01101100, /* 19s */ 0b01111000, // 20t
0b00011100, /* 21u */ 0b00111110, /* 22v */ 0b01111110, /* 23w */ 0b01110110, // 24x
0b01101110, /* 25y */ 0b00011011, // 26z
};
uint8_t num_data[10] = {
0b00111111, /* 0 */ 0b00000110, /* 1 */ 0b01011011, /* 2 */ 0b01001111, /* 3 */
0b01100110, /* 4 */ 0b01101101, /* 5 */ 0b01111101, /* 6 */ 0b00100111, /* 7 */
0b01111111, /* 8 */ 0b01101111 // 10
};
void loop() {
for (int i = 0; i < 10; i++) { // 0 - 9 のフロー
uint8_t data[] = {num_data[i], num_data[(i + 1) % 10], num_data[(i + 2) % 10], num_data[(i + 3) % 10]};
display.setSegments(data);
delay(500);
}
display.clear(); delay(500);
for (int i = 0; i < 26; i++) { // a - z のフロー
uint8_t data[] = {alpha_data[i], alpha_data[(i + 1) % 26], alpha_data[(i + 2) % 26], alpha_data[(i + 3) % 26]};
display.setSegments(data);
delay(500);
}
display.clear(); delay(500);
// [表示する数値],[0表示],[桁数(下位から表示)],[左から(○-1)番目から表示※0~3]
display.showNumberDec(1234, true, 4, 0);
delay(1000);
display.clear(); delay(500);
// 時刻表示用[表示する数値],[コロン],[0表示]
display.showNumberDecEx(123, 0x40, true);
delay(1000);
display.clear(); delay(500);
int i = 9999; // 9999からのカウントダウン
while (i < 10000) {
disp_digit(i);
i--;
delay(500);
}
}
void disp_digit(int N) { // 4ケタの数をディスプレイに表示
for (int i = 0; i < 4; i++) { // 一位から千位まで順に各ケタの数を7segデータに変換
digit[i] = N % 10; // 各位の数を求める
data[3 - i] = display.encodeDigit(digit[i]); // 7segのデータに変換
Serial.print(data[3 - i]); Serial.print(" ");
N = N / 10; //
}
Serial.println();
display.setSegments(data); // dataをディスプレイに表示
}
0~9のフロー → アルファベットのフロー → 1234の表示 → 01:23の表示 → 9999からのカウントダウン(アルファベットはご愛敬ということで。。 マニアックすぎる)
お世話になったサイト
TM1637Display.hライブラリの使い方
4桁7セグメントLEDをLINX(Arduino UNO)で使ってみる
7segment_display.pdf