7セグLED表示 その1 1文字

 Arduinoで温度を測定したらキャラクタ表示LCDを利用して測定結果を表示しました。液晶表示器自体は暗いです。バックライト付きやOLEDであれば、表示文字は鮮明になります。時計や温度、電圧を表示するだけなら、数値だけでも十分です。7セグメントLEDという表示器があります。赤色、黄色、青色など明るい発色なので、遠くからも視認性がよいです。

7segLEDのピンは10本

 省略して7セグといいます。小数点を含めて表示するために10本のピンが出ています。

 内部にはLEDが一つのセグメントに1個が割り当てられているので、接続は次のようになっています。

 これらの図はカソード・コモン、つまりアノードは個別で、カソードが集約されています。アノード・コモンの7セグもあります。大きめの形状だと、1セグメントにLEDが2個以上使われている製品もあります。

 '1'を表示したいとbcのLEDをONします。それぞれのピンをArduinoから配線するのは大変です。キャラクタ表示LCDも当初はパラレル接続でしたが、現在はシリアルのI2Cが主流です。ここでも、シリアル-パラレル変換IC 74HC595を利用します。それでも配線は大変なので、74HC595、電流制限抵抗、7セグLEDを一体化できるキットを利用します。写真は、7セグLEDを別途購入するタイプのキットです。どちらを購入しても同じに動きます。

接続

Arduinoのピン番号と機能 7セグメントLEDのピン名称
5V VDD
11 MOSI SDI
13 CLK SCK
10 SS LATCH
GND GND

スケッチ

 74HC595のデータシートに書かれているタイムチャートをじっくり眺めると、SPIのシリアル通信と同じようなタイミングだと気が付きます。ArduinoのSPIライブラリでは、チップ・セレクトSS信号は独自なピンに割り当てて制御します。通常、通信を始めるときにHIGH->LOWにし、必要なデータを送り終えたらHIGHに戻します。出力データのMOSIとクロックSCKはライブラリの既定のポートです。ライブラリを使うと、データを送った SPI.transfer()とき、同時にクロックも送られます。

 moji[16]の配列は、7セグのセグメントのON/OFFをビットで表した16文字分です。最下位ビットはセグメントのaで、最上位ビットはドット(dp)です。loop()では、1~Fまでの16進の表示を順番に行い、もう一度同じ文字をドットとともに表示します。

#include <SPI.h>
#define SS 10 // Chip Select
#define MOSI 11
#define SCK 13
char moji[16]{
B00111111, // 0
B00000110, // 1
B01011011, // 2
B01001111, // 3
B01100110, // 4
B01101101, // 5
B01111101, // 6
B00000111, // 7
B01111111, // 8
B01100111, // 9
B01011111, // a
B01111100, // b
B01011000, // c
B01011110, // d
B01111001, // e
B01110001 // f
};

void setup() {
pinMode(SS,OUTPUT); digitalWrite(SS,1);
Serial.begin (9600);
SPI.begin();
}

void loop() {
for (int i=0; i <16; i++){
digitalWrite(SS,0);
SPI.transfer(moji[i]);
digitalWrite(SS,1);
delay(1000);
}
for (int i=0; i <16; i++){
digitalWrite(SS,0);
SPI.transfer(moji[i] | B10000000);
digitalWrite(SS,1);
delay(1000);
}
}

前へ

温度を測って異常を検知 その3 警報

次へ

7セグLED表示 その2 1文字でも情報は伝えられる