Arduino マルチファンクションシールドを使ったシフトレジスタとダイナミック点灯のプログラミング 1/4

「ラボワーク」ホチキス先生の「プログラマーと呼ばれたい」)に参加して学んだことをブログにてまとめています。

 

「ラボワーク」について

高等学校の教科「情報」が実施になったのは、今から約13年前、2003年(平成15年)の4月からでした。当初はコンピュータやプログラミングの取り扱いに重点を置かない授業が多くみられましたが、ようやく近年になってその重要性が認識されるようになりました。そこで Adminteachers ではコンピュータやプログラミング、ネットワークを教科「情報」の授業で実践するノウハウを共有する勉強会をされています。

 

今回、第三回は Arduino UNO 用の実験用シールド「マルチファンクションシールド」を使い、シフトレジスタをコントロールしダイナミック点灯を実現するプログラミングでした。

「マルチファンクションシールド」をコントロールするプログラミングです。マルチファンクションにはシフトレジスタを介した 7セグメント LED が 4つついており、3つの信号線でコントロールします。電源を供給するためにはさらに 2本の線をつなぎます。この LED のコントロールには、シフトレジスタの使い方と短い時間で点滅を切り替える「ダイナミック点灯」の理解が必要です。シフトレジスタはシリアル信号をパラレル信号に変換する IC で、多数のビットをコントロールするときに信号線を減らす働きをするもので、多くのディジタル機器の中でデータの送受信に使われます。

原則に忠実なスケッチ(力技)編

原則的なシフトレジスタの機能をプログラムします。このコードで、左端と右端の2つのLEDチューブが「0」を表示します。うまくできたらコード変更して別のチューブを点灯させ、別の数字を表示させてください。なおコードは「//」以降はコメントです。ので入力しなくても動作します。

Arduinoスケッチ

void setup() {
  // put your setup code here, to run once:
  pinMode(4,OUTPUT);// multifunction board pin 4(LATCH)Digispark pin 0
  pinMode(7,OUTPUT);// multifunction board pin 7(CLOK)Digispark pin 1
  pinMode(8,OUTPUT);// multifunction board pin 8(DATA)Digispark pin 2
}

void loop() {
  // put your main code here, to run repeatedly:
digitalWrite(4,LOW);//LATCHをLOWにして入力モードにする

  // 1:D.P.
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,HIGH);//DATAをセットする(小数点)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //2:g
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,HIGH);//DATAをセットする(横中)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //3:f
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(縦左上)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //4:e
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(縦左下)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //5:d
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(横下)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //6:c
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(縦右下)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //7:b
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(縦右上)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //8:a
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(横上)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //9
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(未使用)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //10
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(未使用)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //11
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(未使用)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //12
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(未使用)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //13:No.1
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,HIGH);//DATAをセットする(HIGHで右から1番LED)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //14:No.2
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(HIGHで右から2番LED)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //15:No.3
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,LOW);//DATAをセットする(HIGHで右から3番LED)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  //16:No.4
  digitalWrite(7,LOW);//CLOCKをLOWにする
  digitalWrite(8,HIGH);//DATAをセットする(HIGHで右から4番LED)
  digitalWrite(7,HIGH);//CLOCKをHIGHにする

  digitalWrite(4,HIGH);//LATCHをHIGHにして出力モードにする
}

「ラボワーク」参加してみて
コード入力の力技で時間を使ってしまったが、資料が充実しているので大変助かりました。
まだまだ駆け出しですが、本やWebページを見るよりかはるかに覚え身に付きました。
大変有意義な学習ができ感謝しております。

 

次回は、WiFiシールドを使ったマイコンとスマートフォーンの接続と制御だそうです。

大変楽しみにしています。

 

目 次