7セグLED表示 その7 4文字-TM1637

  TM1637は、120~200円と安価な時刻表示用の4桁7セグメントLED表示器に使われています。ebayで入手しました。表示の中央にコロンがある製品が多いのですが、各桁にドットがある製品も見つかります。電圧などを表示するにはそのほうがよいです。

TM1637のおもな特徴

  • 電源電圧 3.3/5V
  • 表示 8セグメント×6ビット
  • キー・スキャン 8×2ビット
  • 輝度 8レベル
  • インターフェース CLK、DIO

インターフェース

 2線式なのでI2Cと思いましたが、データシートにはスレーブ・アドレスはないと書かれています。しかし、スタート・コンディション、ストップ・コンディションはあり、表示器はACKを返します。

ライブラリ

 検索で、二つ見つかりました。TM1637と書かれたライブラリをインストールしました。

接続

 サンプル・スケッチの中に書かれていた配線に合わせました。

TM1637 Arduino UNO
CLK 2
DIO 3
Vcc 5V
GND GND

スケッチ

 サンプルのTM1637TESTを修正して、23:56の数字を表示しました。小数点を表すドットがないので、コロンを表示しています。showNumberDecEx()の1番目の引数は、数値データをそのまま表示し、2番目の引数は小数点の位置を、3番目の引数は上位桁の0を表示するか表示しないかを指示します。

#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);

void setup() {
}

void loop() {
uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };
display.setBrightness(0x0f);
display.showNumberDecEx(2356,0x40,true);
delay(2000);
display.showNumberDecEx(2356,0x0,true);
delay(2000);
}

 真ん中のコロンは動かせないので、小数点の代わりに使おうとすると、マイナス符号を数字の先頭に入れられません。最後の桁に、プラスならブランクを、零下の温度ならマイナス符号を表示するようにします。
 ss.replace(".", "")は、温度データの文字列の中にあるドットを消します。

#include <Arduino.h>
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);

void setup(){
Serial.begin(9600);
}

void loop() {
byte data[] = { 0, 0, 0, 0 };
display.setBrightness(0x0a);

float Temp = -48.5;
if ( Temp<0 ) {
data[3] = 64 ; //SEG_G '-'
} else {
data[3] = 0; // blank
}
String ss = String(Temp);
ss.replace(".", ""); ss.replace("0", "");
Serial.println(ss);
display.setSegments(data); // - or blank
display.showNumberDecEx(ss.toInt(),0x40,true,3,0);
delay(2000);
}

温度と湿度を交互に表示する

 温湿度センサSHT31から読み出した温度と湿度データを使って表示します。
 setSegments()は、byteデータがそれぞれの桁の表示値です。0は全エレメント消灯、1はエレメントa、2はエレメントb、3はエレメントaとb、4はエレメントc、5はエレメントaとc、...、64はエレメントg、...、255は全セグメントの点灯です。
 SEG_A~SEG_Gは、7セグメントのエレメントを個別に光らせるために使います。
 showNumberDecEx()の1番目の引数は表示させる数値データ、2番目の引数は小数点の位置を、3番目の引数は上位桁の0サプレス表示/非表示を、4番目の引数は数値データの表示桁数(最小桁から数える)を、5番目の引数は表示スタート桁(0がオフセットなし、1は2桁目から)を指示します。

#include <Arduino.h>
#include <Wire.h>
#include "SHT31.h"
#include <TM1637Display.h>

// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3

SHT31 sht31 = SHT31();
TM1637Display display(CLK, DIO);

const byte __RH[] = {
SEG_D, // _
SEG_D, // _
SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G, // R
SEG_B | SEG_C | SEG_E | SEG_F | SEG_G, // H
};

void setup(){
sht31.begin();
Serial.begin(9600);
}

void loop() {
float Temp = sht31.getTemperature();
float Hum = sht31.getHumidity();
Serial.print("Temp = "); Serial.println(Temp);
Serial.print("Hum = "); Serial.println(Hum);

byte data[] = { 0, 0, 0, 0 }; //all blank
display.setBrightness(0x0a);

if ( Temp<0 ) {
data[3] = 64 ; Temp = -1 * Temp; //SEG_G '-'
} else {
data[3] = 0; // blank
}
String ss = String(Temp);
ss.replace(".", "");
Serial.println(ss);
String sss = String(ss.charAt(0))+String(ss.charAt(1))+String(ss.charAt(2));
display.setSegments(data); // - or blank
display.showNumberDecEx(sss.toInt(),0x40,true,3,0);
delay(2000);

String hh = String(Hum);
String hhh = String(hh.charAt(0))+String(hh.charAt(1));
display.setSegments(__RH);
display.showNumberDecEx(hhh.toInt(),0,true,2,0);
delay(2000);
}

 実行結果です。温度です。小数点第1位まで表示しています。一番右の桁は、零下だとマイナス符号を表示します。

 湿度です。

前へ

7セグLED表示 その6 8文字-MAX7219

次へ

ESP32入門 通信機能が標準搭載されたマイコン・ボード (1) 準備