課題2 7セグメント ディスプレイ

課題2-1

今回使う「7セグメント ディスプレイ」は、一般に「7seg LED」とも呼ばれる。

  1. TINKERCADのサイトにアクセスしてログインする。
  2. 「新規作成」→「回路」をクリックする。
  3. 入れる部品の種類を「コンポーネント すべて」に切り替え、「Arduino Uno R3」「7セグメント ディスプレイ」「7セグメント デコーダ」「押しボタン」「抵抗 (200Ω×7個, 10kΩ×1個)」を選んで入れ、図のように配線する。
  4. (抵抗は片方の端子がIC, 押しボタンの端子にくっつくように配置する)
    (「7セグメント ディスプレイ」を入れるときは「陽極」を「陰極」に切り替える)


    (配線部分をズームした図)



  5. コードを「ブロック」から「文字」に切り替え、デフォルトで入っているコードを削除して以下のコードをコピー&ペーストする。
  6. int n=0; // 数値(10進数)
    int pre; // 直前の押しボタンの状態
    int binaryPin[] = {2, 3, 4, 5}; // 出力用のピン
    int buttonPin = 13; // 押しボタン用のピン
    
    void setup(){
      for (int i=0; i<4; i++){
        pinMode(binaryPin[i], OUTPUT);
      }
      pinMode(buttonPin, INPUT);
    }
    
    void loop(){
      // nを2進数に変換し、各桁の値を出力用のピンに書き出す
      for (int i=0; i<4; i++){
        digitalWrite(binaryPin[i], bitRead(n, i));
      }
      // 直前にボタンが押されておらず、今は押されていたらnを1増やす
      if (digitalRead(buttonPin)==HIGH && pre==LOW){
        n++;
        // nが9を超えたら0に戻す
        if (n>9){
          n=0;
        }
      }
      // 現在のボタンの状態をpreに記憶
      pre = digitalRead(buttonPin);
    }
    押しボタンにこのように配線すると、左上のピンの電圧はボタンを押しているときは5V, 離しているときは0Vになる。
    bitRead関数では10進数を2進数に変換したときの特定の桁の値を取り出せる。
    例えば bitRead(5, 0) では、(5)10 = (0101)2 の (下から) 0ビット目、つまり1が得られる。
    7セグメント デコーダの4つ (1, 2, 6, 7番) のピンに5V, 0V (2進数の1, 0) を入れることで、その数字の形に7セグメントディスプレイの線を光らせるための組み合わせで9~15番のピンに電圧が出力される (参考)。
    7セグメントディスプレイは、デジタル数字を構成する7本の線 (a~g) と右下の点 (dp) に対応するピンに5Vか0Vの電圧をいれて点灯・消灯させることで数字を表示する。
    タイプを陰極にした場合は5Vを入れたときに点灯する。
    たとえば b, c に5V, その他に0Vを入れれば数字の「1」になる。

  7. 「シミュレーションを開始」でプログラムを実行し、押しボタンをクリックして以下のように動作することを確認する。



  8. この回路の名前を「課題2-1」に変更する。


  9. トップページに戻り、「課題2-1」を公開する。

課題2-2

  1. 「課題2-1」のコピーを作り、その名前を「課題2-2」に変更して公開する。

  2. 「課題2-2」を編集し、7セグメント ディスプレイを使う機能をつくる。
以下に例を挙げるが、これらと全く同じものはNG。

例1 : ボタンを押すごとにa~g, dpを順に光らせる
配線
(7セグメントデコーダのICは使わず、Arduinoからの出力をそのまま7セグメント ディスプレイに入れる)


コード


動作


例2 : ボタンを押すごとにA, b, C, d, E, F の形に光らせる (参考)
(a~g, dp それぞれのセグメントのON, OFFの情報をあらかじめ配列に入れておき、nの値に応じてそれを7セグメント ディスプレイに入れる)
(配列の最初の値がa, 次がb,.. のセグメントに対応する)
配線は例1と同じ
コード


動作

提出

inserted by FC2 system