超初心者が、超初心者へ送る Arduino Uno 3641BH 4 桁 7 セグメントLED ディスプレイのレッスン!!(∩´∀`)∩ワーイ

3641BH 4 桁 7 セグメントLED ディスプレイ


概要
このレッスンでは、7セグに1234とダイナミック点灯で表示する


材料
Arduino Uno x 1
ブレッドボード x 1
3641BH コモンアノード(陽極) x 1
220Ω 可変抵抗 x 8
デュポンワイヤー (数本)

  


製品説明
セグメントは発光ダイオードであるため、焼損を防ぐために直列抵抗が必要です。
デジタルディスプレイは、計器、時計、ディスプレイなどで広く使用されています。



ピンレイアウト



技術的パラメータ
タイプ:コモンアノード(陽極)
サイズ:30mm x 14mm x 7.2mm(幅 x .縦 x ピンを除いた奥行き)
発光色:レッド



デバイスレイアウトと回路図



配線図
わかりやすいようにブレッドボードを2つ使ってますが、一つにまとめても大丈夫です。



サンプルコード
自分がわかりやすいようにコメント多めです。解釈が間違ってる可能性もあるので、他のサイトも参照してくださいね。(汗)


/* 
*
*         3641BH(7セグに1234とダイナミック点灯で表示する)
*         コモンアノード(陽極)の7セグ(+側の電源がコモン(共通) セグをLOWで点灯)
*             ※"コモンアノード(陽極)"と"コモンアソード(陰極)"の2種類7セグがあるので注意
*      https://amzn.to/32NxndV
*/

// ———————— ヘッダー開始 ————————

// ————————コモンアソードのインターフェースをPin割当 ————————
int a = 1;  //  a = 11pin(7Seg の 11pin) = 1
int b = 2;  //  b = 7pin(7Seg の  7pin) = 2
int c = 3;  //  c = 4pin(7Seg の  4pin) = 3
int d = 4;  //  d = 2pin(7Seg の  2pin) = 4
int e = 5;  //  e = 1pin(7Seg の  1pin) = 5
int f = 6;  //  f = 10pin(7Seg の 10pin) = 6
int g = 7;  //  g = 5pin(7Seg の  5pin) = 7
int dp = 8; // dp(.) = 3pin(7Seg の 3pin) = 8

//  ———————— コモンアノードのインターフェースをPin割当 ————————
int d4 = 9;  // d4(デジタル4桁目) =  6pin(7Seg の 6pin) = 9
int d3 = 10; // d3(デジタル3桁目) =  8pin(7Seg の 8pin) = 10
int d2 = 11; // d2(デジタル2桁目) =  9pin(7Seg の 9pin) = 11
int d1 = 12; // d1(デジタル1桁目) = 12pin(7Seg の 12pin) = 12

// ———————— ヘッダー終了 ————————

// ———————— 最初に一度だけ実行されるコード 開始 ————————
void setup()
{
  pinMode(d1, OUTPUT); // d1 pinを出力モードに設定する
  pinMode(d2, OUTPUT); // d2 pinを出力モードに設定する
  pinMode(d3, OUTPUT); // d3 pinを出力モードに設定する
  pinMode(d4, OUTPUT); // d4 pinを出力モードに設定する
  pinMode(a, OUTPUT);  //  a pinを出力モードに設定する
  pinMode(b, OUTPUT);  //  b pinを出力モードに設定する
  pinMode(c, OUTPUT);  //  c pinを出力モードに設定する
  pinMode(d, OUTPUT);  //  d pinを出力モードに設定する
  pinMode(e, OUTPUT);  //  e pinを出力モードに設定する
  pinMode(f, OUTPUT);  //  f pinを出力モードに設定する
  pinMode(g, OUTPUT);  //  g pinを出力モードに設定する
  pinMode(dp, OUTPUT); // dp pinを出力モードに設定する
}

// ———————— 最初に一度だけ実行されるコード 終了 ————————

// ———————— 繰り返し実行されるコード 開始 ————————
void loop()
{
  Display(1, 1); // Display(左から1桁目に, 1を入力) ここの値を変えると1行目の7セグに表示される数字が変わります
  Display(2, 2); // Display(左から2桁目に, 2を入力) ここの値を変えると2行目の7セグに表示される数字が変わります
  Display(3, 3); // Display(左から3桁目に, 3を入力) ここの値を変えると3行目の7セグに表示される数字が変わります
  Display(4, 4); // Display(左から4桁目に, 4を入力) ここの値を変えると4行目の7セグに表示される数字が変わります
}

void pickdigital(unsigned char n) // pickdigitalは、void Display(n,n)の1つ目の n
{
  switch (n) // (n)で指定された変数と一致する数値をcaseのセグパターンで出力
  {
  case 1: // 1が入力されたら
    digitalWrite(d1, HIGH);
    digitalWrite(d2, LOW);
    digitalWrite(d3, LOW);
    digitalWrite(d4, LOW);
    break; // breakしてswitch (n) のループから抜けて void pickNumber(unsigned char n)へ移動

  case 2: // 2が入力されたら
    digitalWrite(d1, LOW);
    digitalWrite(d2, HIGH);
    digitalWrite(d3, LOW);
    digitalWrite(d4, LOW);
    break; // breakしてswitch (n) のループから抜けて void pickNumber(unsigned char n)へ移動

  case 3: // 3が入力されたら
    digitalWrite(d1, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(d3, HIGH);
    digitalWrite(d4, LOW);
    break; // breakしてswitch (n) のループから抜けて void pickNumber(unsigned char n)へ移動

  case 4: // 4が入力されたら
    digitalWrite(d1, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(d3, LOW);
    digitalWrite(d4, HIGH);
    break; // breakしてswitch (n) のループから抜けて void pickNumber(unsigned char n)へ移動

  default: // どのcaseにも一致しなかったら
    digitalWrite(d1, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(d3, LOW);
    digitalWrite(d4, LOW);
    break; // breakしてswitch (n) のループから抜けて void pickNumber(unsigned char n)へ移動
  }
}

void pickNumber(unsigned char n) // pickdigitalは、void Display(n,n)の2つ目の n
{
  switch (n) // (n)で指定された変数と一致する Num_*() の下の方の記述で作った、フォントパターンを読み取って "pickNumberへ(n)" と出力
  {
  case 0:    // 0が入力されたら
    Num_0(); // Num_0() のフォントパターンを読み取って "pickNumberへ(0)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  case 1:    // 1が入力されたら
    Num_1(); // Num_1() のフォントパターンを読み取って "pickNumberへ(1)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  case 2:    // 2が入力されたら
    Num_2(); // Num_2() のフォントパターンを読み取って "pickNumberへ(2)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  case 3:    // 3が入力されたら
    Num_3(); // Num_3() のフォントパターンを読み取って "pickNumberへ(3)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  case 4:    // 4が入力されたら
    Num_4(); // Num_4() のフォントパターンを読み取って "pickNumberへ(4)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  case 5:    // 5が入力されたら
    Num_5(); // Num_5() のフォントパターンを読み取って "pickNumberへ(5)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  case 6:    // 6が入力されたら
    Num_6(); // Num_6() のフォントパターンを読み取って "pickNumberへ(6)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  case 7:    // 7が入力されたら
    Num_7(); // Num_7() のフォントパターンを読み取って "pickNumberへ(7)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  case 8:    // 8が入力されたら
    Num_8(); // Num_8() のフォントパターンを読み取って "pickNumberへ(8)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  case 9:    // 9が入力されたら
    Num_9(); // Num_9() のフォントパターンを読み取って "pickNumberへ(9)" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動

  default:   // どのcaseにも一致しなかったら
    Clear(); // Clear のフォントパターンを読み取って "Clear" と出力
    break;   // breakしてループから抜けて 最後の行の void Display(unsigned char x, unsigned char Number)へ移動
  }
}





// ———————— 7セグのどのセグを光らせて文字にするかを定義して 0~9 と Clear のフォントパターンを設定 LOWで点灯 HIGEで消灯 ————————
/*
*           a
*      -----------
*      |   |
*    f |       | b
*      | g   |
*      |---------|
*      |   |
*    e |       | c
*      | d   |
*      |---------| ・dp
*/

void Num_0() // 0 に見えるようにパターンを設定
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
  digitalWrite(dp, HIGH);
}

void Num_1() // 1 に見えるようにパターンを設定
{
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, HIGH);
}

void Num_2() // 2 に見えるようにパターンを設定
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
  digitalWrite(dp, HIGH);
}

void Num_3() // 3 に見えるようにパターンを設定
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
  digitalWrite(dp, HIGH);
}

void Num_4() // 4 に見えるようにパターンを設定
{
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(dp, HIGH);
}

void Num_5() // 5 に見えるようにパターンを設定
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(dp, HIGH);
}

void Num_6() // 6 に見えるようにパターンを設定
{
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(dp, HIGH);
}

void Num_7() // 7 に見えるようにパターンを設定
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, HIGH);
}

void Num_8() // 8 に見えるようにパターンを設定
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(dp, HIGH);
}

void Num_9() // 9 に見えるようにパターンを設定
{
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
  digitalWrite(dp, HIGH);
}

void Clear() // 画面をクリアする すべてのセグを消す
{
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
  digitalWrite(dp, HIGH);
}

void Display(unsigned char x, unsigned char n) // このプログラムでやっと7セグに表示ができます。 xが7セグの何桁目かで、nが数値であることを示します
{
  pickdigital(x); // 7セグにどの桁に表示するか、決まる→Display(桁)
  pickNumber(n);  // 上で決まった桁に7セグに数字を送信して表示する→Display(数字)
  delay(1);       // 一文字の数字が表示される時間を設定する 1000ミリ秒 500ミリ秒 100ミリ秒 10ミリ秒 1ミリ秒 と切り替えて7セグの表示の仕方を観察してみよう!
  Clear();        // 最後にClearコマンドを送信して終了
}
// ———————— 繰り返し実行されるコードがここで終了して一番上のloopに戻る(ここまでのプログラムでやっと一文字が表示できる。これを繰り返して2桁目、3桁目と切り替わっていく) ————————


0 件のコメント :