「7セグメントLED」とは「7つに分かれているLED」のことですが、よぉ~く見ると、細長い6角形の棒が縦横に組み合わさっていますね。電卓の液晶もこの7セグメントですね。今回は「LED」
+1でドットの丸型セグメントもついています。こちらが下側になりますね。ありがたい。
足は10本もあります。この組み合わせで、光らせる場所が変わると思うんですが、・・・4桁のものは足が12本なんですね。また難しくなりますね。でも下の絵の情報を見つけたので、わかりやすく描いてみました。配線は分かりやすくなりました。仕組みはわかりにくいままですが。
③と⑧がコモンで、アノードコモンなら電源へ、カソードコモンならGNDへ。抵抗も忘れずに。
では、ひとつづつ光らせてみましょう。
- 1桁7セグメントLED:1個
- ブレッドボード:1個
- 抵抗:330Ω(100~1Kくらい):1個
- ジャンパー線:1本
- バッテリーケース
- 乾電池(ここでは単四乾電池2個)
順番にジャンパー線を差替えていきます。➀② ④⑤⑥⑦ ⑨⑩
ひとつづつ光らせることができました。
では、次に自動で光らせるタイプにつくりかえます。使用する材料を準備します。
- 1桁7セグメントLED:1個
- ブレッドボード:1個
- 抵抗:330Ω(100~1Kくらい):1個
- ジャンパー線:9本
- Arduino本体:1個
- USBケーブル:1本(PC⇔Arduino接続用)
- パソコン:1台(ArduinoIDEインストール済)
では、配線をしてまいりましょう。③のコモンに抵抗をつなぎ、それからブレッドボードのマイナス(-)側につないで、ArduinoのGNDへつなぎます。左下➀番からはArduinoデジタル側2番。②番は3番。④番は4番。⑤番は5番。上側の⑩番は9番。⑨番は8番。⑧のコモンはブランク。⑦番は6番。
数字が1つづつ1秒ごとにカウントアップするものを作成してみたのです。
ソースコードは以下のとおり。
const int pin[] = { 7, 6, 4, 3, 2, 8, 9, 5};
const int pattern[11][8] = { {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, LOW}, //0
{LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW}, //1
{HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH, LOW}, //2
{HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH, LOW}, //3
{LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, LOW}, //4
{HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH, LOW}, //5
{HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, LOW}, //6
{HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW}, //7
{HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW}, //8
{HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH, LOW}, //9
{LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH}, //.
};
int number = 0;
void setup() {
int i;
for (i = 0; i < 8; i++) {
pinMode(pin[i], OUTPUT);
}
clearLED();
}
void loop() {
displayDigit(number);
delay(1000);
number = (number + 1) % 10; // 0 から 9 までカウントアップ
}
void clearLED() {
int i;
for (i = 0; i < 8; i++) {
digitalWrite(pin[i], LOW);
}
}
void displayDigit(int n) {
int i;
for (i = 0; i < 8; i++) {
digitalWrite(pin[i], pattern[n][i]);
}
}
カウントダウンは以下
const int pin[] = { 7, 6, 4, 3, 2, 8, 9, 5};
const int pattern[11][8] = { {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW, LOW}, //0
{LOW, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW}, //1
{HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH, LOW}, //2
{HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH, LOW}, //3
{LOW, HIGH, HIGH, LOW, LOW, HIGH, HIGH, LOW}, //4
{HIGH, LOW, HIGH, HIGH, LOW, HIGH, HIGH, LOW}, //5
{HIGH, LOW, HIGH, HIGH, HIGH, HIGH, HIGH, LOW}, //6
{HIGH, HIGH, HIGH, LOW, LOW, LOW, LOW, LOW}, //7
{HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW}, //8
{HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH, LOW}, //9
{LOW, LOW, LOW, LOW, LOW, LOW, LOW, HIGH}, //.
};
int number = 0;
void setup() {
int i;
for (i = 0; i < 8; i++) {
pinMode(pin[i], OUTPUT);
}
clearLED();
}
void loop() {
displayDigit(number);
delay(1000);
number = (number + 9) % 10; // Count down from 9 to 0
}
void clearLED() {
int i;
for (i = 0; i < 8; i++) {
digitalWrite(pin[i], LOW);
}
}
void displayDigit(int n) {
int i;
for (i = 0; i < 8; i++) {
digitalWrite(pin[i], pattern[n][i]);
}
}
pin
配列は、各セグメントに対応するデジタルピン番号を格納しています。pattern
配列は、各数字(0 から 9)および小数点に対応するセグメントの点灯パターンを定義しています。setup()
関数では、各ピンを出力モードに設定しています。clearLED()
関数は、すべてのセグメントを消灯させます。displayDigit(int n)
関数は、指定された数字n
に対応するセグメントを点灯させます。
4桁のものもあるので、またこんど挑戦してみます。
リンク
リンク